[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-openshift-degraded-operator-recovery":3,"mdc-y6hwed-key":35,"related-org-openshift-degraded-operator-recovery":453,"related-repo-openshift-degraded-operator-recovery":565},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":24,"repoUrl":25,"updatedAt":26,"license":27,"forks":28,"topics":29,"repo":30,"sourceUrl":33,"mdContent":34},"degraded-operator-recovery","recover degraded OpenShift cluster operators","Troubleshoot ClusterOperator in Degraded, Unavailable, or not Progressing state. Use when operator status shows error conditions, reconciliation failures, or degraded health checks.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"openshift","OpenShift (Red Hat)","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fopenshift.png",[12,16,19,21],{"name":13,"slug":14,"type":15},"SRE","sre","tag",{"name":17,"slug":18,"type":15},"Operations","operations",{"name":20,"slug":8,"type":15},"OpenShift",{"name":22,"slug":23,"type":15},"Debugging","debugging",70,"https:\u002F\u002Fgithub.com\u002Fopenshift\u002Flightspeed-service","2026-04-06T18:43:30.354728",null,88,[],{"repoUrl":25,"stars":24,"forks":28,"topics":31,"description":32},[],"Core repository for an AI-powered OCP assistant service","https:\u002F\u002Fgithub.com\u002Fopenshift\u002Flightspeed-service\u002Ftree\u002FHEAD\u002Fskills\u002Fdegraded-operator-recovery","---\nname: degraded-operator-recovery\ndescription: Troubleshoot ClusterOperator in Degraded, Unavailable, or not Progressing state. Use when operator status shows error conditions, reconciliation failures, or degraded health checks.\n---\n\n# Degraded Operator Recovery\n\nWhen a user reports unhealthy cluster operators or a stuck upgrade, follow this structured approach to identify the blocking condition and provide recovery steps.\n\n## 1. Assess Cluster Operator Health\n\nStart by listing all cluster operators and their status conditions:\n\n- Identify operators with `Degraded=True` or `Available=False`.\n- Note operators with `Progressing=True` — these may be mid-reconciliation and need time, not intervention.\n- If multiple operators are degraded, identify dependencies. For example, if `kube-apiserver` is degraded, other operators that depend on the API server will also report issues.\n\nFocus on the **root cause operator** — the one whose degradation is not explained by another operator's failure.\n\n## 2. Read the Blocking Condition\n\nFor each degraded operator:\n\n1. Read the operator's status conditions — the `message` field on the `Degraded` condition usually contains the specific error.\n2. Check the `lastTransitionTime` to understand how long the operator has been in this state.\n3. Look for common patterns in the condition message:\n   - Certificate expiry or rotation failures\n   - Webhook configuration errors\n   - Failed rollout of an operand deployment\n   - Resource contention (CPU\u002Fmemory on control plane nodes)\n   - Quorum loss (etcd-specific)\n\nDo not skip this step. The condition message is the single most informative piece of data.\n\n## 3. Inspect Managed Operands\n\nIf the condition message is not sufficient:\n\n1. Identify the operator's managed deployments, daemonsets, or statefulsets (usually in `openshift-*` namespaces).\n2. Check if any operand pods are in CrashLoopBackOff, Pending, or Error state.\n3. If operand pods are failing, triage them using the same approach as pod failure diagnosis — check logs and events.\n4. For control plane operators (etcd, kube-apiserver, kube-controller-manager, kube-scheduler): check static pod status on control plane nodes.\n\n## 4. Check for Upgrade-Related Issues\n\nIf this is happening during or after a cluster upgrade:\n\n1. Check `oc get clusterversion` for the upgrade status and any reported failures.\n2. Determine if the operator is stuck waiting for a node reboot (MachineConfigPool not updated).\n3. Check if pending CSRs need approval — node certificate renewal during upgrade can block operators.\n4. For transient `Progressing=True` during upgrade: advise waiting (up to the operator's expected rollout window) before intervening.\n\nDistinguish between \"upgrade in progress\" (normal) and \"upgrade stuck\" (needs intervention).\n\n## 5. Provide Recovery Steps\n\nOnce the blocking condition is identified:\n\n1. State which operator is degraded and what the blocking condition is.\n2. Provide specific recovery actions:\n   - **Pending CSRs**: approve them with `oc adm certificate approve`.\n   - **Failed operand pod**: follow pod triage to fix the underlying issue.\n   - **Certificate issues**: check if cert rotation can be triggered or if manual renewal is needed.\n   - **Resource contention**: identify the pressure source on control plane nodes.\n   - **Webhook errors**: check if the webhook service is available and the CA bundle is correct.\n3. If the issue is internal to the operator and cannot be resolved by the user, recommend opening a support case with the specific condition message.\n\n## Quality Standards\n\n- Always start with `oc get clusteroperators` before diving deeper — this prevents chasing symptoms of a different root cause.\n- For etcd, kube-apiserver, and kube-controller-manager: warn about control plane impact before suggesting any restart or remediation.\n- Never suggest force-deleting operator-managed resources without explicit warning — operators reconcile state and force-deletion can cause split-brain.\n- If the operator is `Progressing=True`, advise waiting before intervening — premature action can make the situation worse.\n- Distinguish upgrade-related transient degradation from persistent failures that need action.\n",{"data":36,"body":37},{"name":4,"description":6},{"type":38,"children":39},"root",[40,48,54,61,66,119,132,138,143,214,219,225,230,261,267,272,310,315,321,326,404,410],{"type":41,"tag":42,"props":43,"children":44},"element","h1",{"id":4},[45],{"type":46,"value":47},"text","Degraded Operator Recovery",{"type":41,"tag":49,"props":50,"children":51},"p",{},[52],{"type":46,"value":53},"When a user reports unhealthy cluster operators or a stuck upgrade, follow this structured approach to identify the blocking condition and provide recovery steps.",{"type":41,"tag":55,"props":56,"children":58},"h2",{"id":57},"_1-assess-cluster-operator-health",[59],{"type":46,"value":60},"1. Assess Cluster Operator Health",{"type":41,"tag":49,"props":62,"children":63},{},[64],{"type":46,"value":65},"Start by listing all cluster operators and their status conditions:",{"type":41,"tag":67,"props":68,"children":69},"ul",{},[70,93,106],{"type":41,"tag":71,"props":72,"children":73},"li",{},[74,76,83,85,91],{"type":46,"value":75},"Identify operators with ",{"type":41,"tag":77,"props":78,"children":80},"code",{"className":79},[],[81],{"type":46,"value":82},"Degraded=True",{"type":46,"value":84}," or ",{"type":41,"tag":77,"props":86,"children":88},{"className":87},[],[89],{"type":46,"value":90},"Available=False",{"type":46,"value":92},".",{"type":41,"tag":71,"props":94,"children":95},{},[96,98,104],{"type":46,"value":97},"Note operators with ",{"type":41,"tag":77,"props":99,"children":101},{"className":100},[],[102],{"type":46,"value":103},"Progressing=True",{"type":46,"value":105}," — these may be mid-reconciliation and need time, not intervention.",{"type":41,"tag":71,"props":107,"children":108},{},[109,111,117],{"type":46,"value":110},"If multiple operators are degraded, identify dependencies. For example, if ",{"type":41,"tag":77,"props":112,"children":114},{"className":113},[],[115],{"type":46,"value":116},"kube-apiserver",{"type":46,"value":118}," is degraded, other operators that depend on the API server will also report issues.",{"type":41,"tag":49,"props":120,"children":121},{},[122,124,130],{"type":46,"value":123},"Focus on the ",{"type":41,"tag":125,"props":126,"children":127},"strong",{},[128],{"type":46,"value":129},"root cause operator",{"type":46,"value":131}," — the one whose degradation is not explained by another operator's failure.",{"type":41,"tag":55,"props":133,"children":135},{"id":134},"_2-read-the-blocking-condition",[136],{"type":46,"value":137},"2. Read the Blocking Condition",{"type":41,"tag":49,"props":139,"children":140},{},[141],{"type":46,"value":142},"For each degraded operator:",{"type":41,"tag":144,"props":145,"children":146},"ol",{},[147,168,181],{"type":41,"tag":71,"props":148,"children":149},{},[150,152,158,160,166],{"type":46,"value":151},"Read the operator's status conditions — the ",{"type":41,"tag":77,"props":153,"children":155},{"className":154},[],[156],{"type":46,"value":157},"message",{"type":46,"value":159}," field on the ",{"type":41,"tag":77,"props":161,"children":163},{"className":162},[],[164],{"type":46,"value":165},"Degraded",{"type":46,"value":167}," condition usually contains the specific error.",{"type":41,"tag":71,"props":169,"children":170},{},[171,173,179],{"type":46,"value":172},"Check the ",{"type":41,"tag":77,"props":174,"children":176},{"className":175},[],[177],{"type":46,"value":178},"lastTransitionTime",{"type":46,"value":180}," to understand how long the operator has been in this state.",{"type":41,"tag":71,"props":182,"children":183},{},[184,186],{"type":46,"value":185},"Look for common patterns in the condition message:\n",{"type":41,"tag":67,"props":187,"children":188},{},[189,194,199,204,209],{"type":41,"tag":71,"props":190,"children":191},{},[192],{"type":46,"value":193},"Certificate expiry or rotation failures",{"type":41,"tag":71,"props":195,"children":196},{},[197],{"type":46,"value":198},"Webhook configuration errors",{"type":41,"tag":71,"props":200,"children":201},{},[202],{"type":46,"value":203},"Failed rollout of an operand deployment",{"type":41,"tag":71,"props":205,"children":206},{},[207],{"type":46,"value":208},"Resource contention (CPU\u002Fmemory on control plane nodes)",{"type":41,"tag":71,"props":210,"children":211},{},[212],{"type":46,"value":213},"Quorum loss (etcd-specific)",{"type":41,"tag":49,"props":215,"children":216},{},[217],{"type":46,"value":218},"Do not skip this step. The condition message is the single most informative piece of data.",{"type":41,"tag":55,"props":220,"children":222},{"id":221},"_3-inspect-managed-operands",[223],{"type":46,"value":224},"3. Inspect Managed Operands",{"type":41,"tag":49,"props":226,"children":227},{},[228],{"type":46,"value":229},"If the condition message is not sufficient:",{"type":41,"tag":144,"props":231,"children":232},{},[233,246,251,256],{"type":41,"tag":71,"props":234,"children":235},{},[236,238,244],{"type":46,"value":237},"Identify the operator's managed deployments, daemonsets, or statefulsets (usually in ",{"type":41,"tag":77,"props":239,"children":241},{"className":240},[],[242],{"type":46,"value":243},"openshift-*",{"type":46,"value":245}," namespaces).",{"type":41,"tag":71,"props":247,"children":248},{},[249],{"type":46,"value":250},"Check if any operand pods are in CrashLoopBackOff, Pending, or Error state.",{"type":41,"tag":71,"props":252,"children":253},{},[254],{"type":46,"value":255},"If operand pods are failing, triage them using the same approach as pod failure diagnosis — check logs and events.",{"type":41,"tag":71,"props":257,"children":258},{},[259],{"type":46,"value":260},"For control plane operators (etcd, kube-apiserver, kube-controller-manager, kube-scheduler): check static pod status on control plane nodes.",{"type":41,"tag":55,"props":262,"children":264},{"id":263},"_4-check-for-upgrade-related-issues",[265],{"type":46,"value":266},"4. Check for Upgrade-Related Issues",{"type":41,"tag":49,"props":268,"children":269},{},[270],{"type":46,"value":271},"If this is happening during or after a cluster upgrade:",{"type":41,"tag":144,"props":273,"children":274},{},[275,288,293,298],{"type":41,"tag":71,"props":276,"children":277},{},[278,280,286],{"type":46,"value":279},"Check ",{"type":41,"tag":77,"props":281,"children":283},{"className":282},[],[284],{"type":46,"value":285},"oc get clusterversion",{"type":46,"value":287}," for the upgrade status and any reported failures.",{"type":41,"tag":71,"props":289,"children":290},{},[291],{"type":46,"value":292},"Determine if the operator is stuck waiting for a node reboot (MachineConfigPool not updated).",{"type":41,"tag":71,"props":294,"children":295},{},[296],{"type":46,"value":297},"Check if pending CSRs need approval — node certificate renewal during upgrade can block operators.",{"type":41,"tag":71,"props":299,"children":300},{},[301,303,308],{"type":46,"value":302},"For transient ",{"type":41,"tag":77,"props":304,"children":306},{"className":305},[],[307],{"type":46,"value":103},{"type":46,"value":309}," during upgrade: advise waiting (up to the operator's expected rollout window) before intervening.",{"type":41,"tag":49,"props":311,"children":312},{},[313],{"type":46,"value":314},"Distinguish between \"upgrade in progress\" (normal) and \"upgrade stuck\" (needs intervention).",{"type":41,"tag":55,"props":316,"children":318},{"id":317},"_5-provide-recovery-steps",[319],{"type":46,"value":320},"5. Provide Recovery Steps",{"type":41,"tag":49,"props":322,"children":323},{},[324],{"type":46,"value":325},"Once the blocking condition is identified:",{"type":41,"tag":144,"props":327,"children":328},{},[329,334,399],{"type":41,"tag":71,"props":330,"children":331},{},[332],{"type":46,"value":333},"State which operator is degraded and what the blocking condition is.",{"type":41,"tag":71,"props":335,"children":336},{},[337,339],{"type":46,"value":338},"Provide specific recovery actions:\n",{"type":41,"tag":67,"props":340,"children":341},{},[342,359,369,379,389],{"type":41,"tag":71,"props":343,"children":344},{},[345,350,352,358],{"type":41,"tag":125,"props":346,"children":347},{},[348],{"type":46,"value":349},"Pending CSRs",{"type":46,"value":351},": approve them with ",{"type":41,"tag":77,"props":353,"children":355},{"className":354},[],[356],{"type":46,"value":357},"oc adm certificate approve",{"type":46,"value":92},{"type":41,"tag":71,"props":360,"children":361},{},[362,367],{"type":41,"tag":125,"props":363,"children":364},{},[365],{"type":46,"value":366},"Failed operand pod",{"type":46,"value":368},": follow pod triage to fix the underlying issue.",{"type":41,"tag":71,"props":370,"children":371},{},[372,377],{"type":41,"tag":125,"props":373,"children":374},{},[375],{"type":46,"value":376},"Certificate issues",{"type":46,"value":378},": check if cert rotation can be triggered or if manual renewal is needed.",{"type":41,"tag":71,"props":380,"children":381},{},[382,387],{"type":41,"tag":125,"props":383,"children":384},{},[385],{"type":46,"value":386},"Resource contention",{"type":46,"value":388},": identify the pressure source on control plane nodes.",{"type":41,"tag":71,"props":390,"children":391},{},[392,397],{"type":41,"tag":125,"props":393,"children":394},{},[395],{"type":46,"value":396},"Webhook errors",{"type":46,"value":398},": check if the webhook service is available and the CA bundle is correct.",{"type":41,"tag":71,"props":400,"children":401},{},[402],{"type":46,"value":403},"If the issue is internal to the operator and cannot be resolved by the user, recommend opening a support case with the specific condition message.",{"type":41,"tag":55,"props":405,"children":407},{"id":406},"quality-standards",[408],{"type":46,"value":409},"Quality Standards",{"type":41,"tag":67,"props":411,"children":412},{},[413,426,431,436,448],{"type":41,"tag":71,"props":414,"children":415},{},[416,418,424],{"type":46,"value":417},"Always start with ",{"type":41,"tag":77,"props":419,"children":421},{"className":420},[],[422],{"type":46,"value":423},"oc get clusteroperators",{"type":46,"value":425}," before diving deeper — this prevents chasing symptoms of a different root cause.",{"type":41,"tag":71,"props":427,"children":428},{},[429],{"type":46,"value":430},"For etcd, kube-apiserver, and kube-controller-manager: warn about control plane impact before suggesting any restart or remediation.",{"type":41,"tag":71,"props":432,"children":433},{},[434],{"type":46,"value":435},"Never suggest force-deleting operator-managed resources without explicit warning — operators reconcile state and force-deletion can cause split-brain.",{"type":41,"tag":71,"props":437,"children":438},{},[439,441,446],{"type":46,"value":440},"If the operator is ",{"type":41,"tag":77,"props":442,"children":444},{"className":443},[],[445],{"type":46,"value":103},{"type":46,"value":447},", advise waiting before intervening — premature action can make the situation worse.",{"type":41,"tag":71,"props":449,"children":450},{},[451],{"type":46,"value":452},"Distinguish upgrade-related transient degradation from persistent failures that need action.",{"items":454,"total":564},[455,462,475,488,501,514,531,542,552],{"slug":4,"name":4,"fn":5,"description":6,"org":456,"tags":457,"stars":24,"repoUrl":25,"updatedAt":26},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[458,459,460,461],{"name":22,"slug":23,"type":15},{"name":20,"slug":8,"type":15},{"name":17,"slug":18,"type":15},{"name":13,"slug":14,"type":15},{"slug":463,"name":463,"fn":464,"description":465,"org":466,"tags":467,"stars":24,"repoUrl":25,"updatedAt":474},"namespace-troubleshooting","troubleshoot OpenShift namespace and RBAC issues","Troubleshoot namespace stuck in Terminating state, ResourceQuota exhaustion, or RBAC permission denied errors. Use when resources cannot be created or forbidden errors occur.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[468,471,472,473],{"name":469,"slug":470,"type":15},"Access Control","access-control",{"name":22,"slug":23,"type":15},{"name":20,"slug":8,"type":15},{"name":13,"slug":14,"type":15},"2026-04-06T18:43:29.107881",{"slug":476,"name":476,"fn":477,"description":478,"org":479,"tags":480,"stars":24,"repoUrl":25,"updatedAt":487},"node-not-ready","troubleshoot OpenShift node status issues","Troubleshoot NotReady or SchedulingDisabled node status. Use when a node is down, unschedulable, or needs to be drained and restored.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[481,482,485,486],{"name":22,"slug":23,"type":15},{"name":483,"slug":484,"type":15},"Engineering","engineering",{"name":20,"slug":8,"type":15},{"name":17,"slug":18,"type":15},"2026-04-06T18:43:26.607462",{"slug":489,"name":489,"fn":490,"description":491,"org":492,"tags":493,"stars":24,"repoUrl":25,"updatedAt":500},"pod-failure-diagnosis","diagnose OpenShift pod failure states","Troubleshoot CrashLoopBackOff, ImagePullBackOff, Pending, Error, or OOMKilled status. Use when a workload keeps restarting, fails to start, or is crash-looping.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[494,495,498,499],{"name":22,"slug":23,"type":15},{"name":496,"slug":497,"type":15},"Kubernetes","kubernetes",{"name":20,"slug":8,"type":15},{"name":13,"slug":14,"type":15},"2026-04-06T18:43:27.866868",{"slug":502,"name":502,"fn":503,"description":504,"org":505,"tags":506,"stars":24,"repoUrl":25,"updatedAt":513},"route-ingress-troubleshooting","troubleshoot OpenShift Route and Ingress connectivity","Troubleshoot Route or Ingress connectivity failures. Use when traffic returns 502, 503, connection refused, or the endpoint is not reachable externally.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[507,508,511,512],{"name":22,"slug":23,"type":15},{"name":509,"slug":510,"type":15},"Networking","networking",{"name":20,"slug":8,"type":15},{"name":13,"slug":14,"type":15},"2026-04-06T18:43:31.593028",{"slug":515,"name":515,"fn":516,"description":517,"org":518,"tags":519,"stars":528,"repoUrl":529,"updatedAt":530},"cluster-update-advisor","assess OpenShift cluster update readiness","Assess OpenShift cluster update (upgrade) readiness and risk. Use when evaluating whether a cluster is safe to update, when an update is available, or when the user asks about update risks, prerequisites, blockers, or best practices.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[520,523,524,525],{"name":521,"slug":522,"type":15},"Deployment","deployment",{"name":20,"slug":8,"type":15},{"name":17,"slug":18,"type":15},{"name":526,"slug":527,"type":15},"Risk Assessment","risk-assessment",5,"https:\u002F\u002Fgithub.com\u002Fopenshift\u002Fagentic-skills","2026-05-12T06:07:16.759342",{"slug":532,"name":532,"fn":533,"description":534,"org":535,"tags":536,"stars":528,"repoUrl":529,"updatedAt":541},"kubernetes-docs","search and read Kubernetes documentation","Search and read Kubernetes documentation in markdown format. Use when the user asks about Kubernetes concepts, tasks, API reference, kubectl, or any upstream k8s topic — including pods, deployments, services, RBAC, networking, storage, or scheduling.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[537,540],{"name":538,"slug":539,"type":15},"Documentation","documentation",{"name":496,"slug":497,"type":15},"2026-05-12T06:07:15.393562",{"slug":543,"name":543,"fn":544,"description":545,"org":546,"tags":547,"stars":528,"repoUrl":529,"updatedAt":551},"openshift-docs","search and read OpenShift documentation","Search and read OpenShift Container Platform documentation in markdown format. Use when the user asks about OpenShift features, configuration, installation, troubleshooting, or any OCP-specific topic — including operators, routes, services, oc, RBAC, networking, storage, or cluster administration.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[548,549,550],{"name":538,"slug":539,"type":15},{"name":496,"slug":497,"type":15},{"name":20,"slug":8,"type":15},"2026-05-12T06:07:14.03809",{"slug":553,"name":553,"fn":554,"description":555,"org":556,"tags":557,"stars":528,"repoUrl":529,"updatedAt":563},"product-lifecycle","query Red Hat product lifecycle data","Query Red Hat Product Life Cycle data for support phases, end-of-life dates, and OpenShift version compatibility. Use when evaluating whether installed operators or layered products are supported on a given OCP version, approaching end of life, or need upgrading before a cluster upgrade. Also use when the user asks about product support status, EOL dates, or lifecycle phases for any Red Hat product.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[558,559,560],{"name":20,"slug":8,"type":15},{"name":17,"slug":18,"type":15},{"name":561,"slug":562,"type":15},"Reporting","reporting","2026-07-31T05:55:39.981651",9,{"items":566,"total":528},[567,574,581,588,595],{"slug":4,"name":4,"fn":5,"description":6,"org":568,"tags":569,"stars":24,"repoUrl":25,"updatedAt":26},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[570,571,572,573],{"name":22,"slug":23,"type":15},{"name":20,"slug":8,"type":15},{"name":17,"slug":18,"type":15},{"name":13,"slug":14,"type":15},{"slug":463,"name":463,"fn":464,"description":465,"org":575,"tags":576,"stars":24,"repoUrl":25,"updatedAt":474},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[577,578,579,580],{"name":469,"slug":470,"type":15},{"name":22,"slug":23,"type":15},{"name":20,"slug":8,"type":15},{"name":13,"slug":14,"type":15},{"slug":476,"name":476,"fn":477,"description":478,"org":582,"tags":583,"stars":24,"repoUrl":25,"updatedAt":487},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[584,585,586,587],{"name":22,"slug":23,"type":15},{"name":483,"slug":484,"type":15},{"name":20,"slug":8,"type":15},{"name":17,"slug":18,"type":15},{"slug":489,"name":489,"fn":490,"description":491,"org":589,"tags":590,"stars":24,"repoUrl":25,"updatedAt":500},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[591,592,593,594],{"name":22,"slug":23,"type":15},{"name":496,"slug":497,"type":15},{"name":20,"slug":8,"type":15},{"name":13,"slug":14,"type":15},{"slug":502,"name":502,"fn":503,"description":504,"org":596,"tags":597,"stars":24,"repoUrl":25,"updatedAt":513},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[598,599,600,601],{"name":22,"slug":23,"type":15},{"name":509,"slug":510,"type":15},{"name":20,"slug":8,"type":15},{"name":13,"slug":14,"type":15}]