[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-sentry-iterate-pr":3,"mdc-tppw3i-key":38,"related-org-sentry-iterate-pr":1220,"related-repo-sentry-iterate-pr":1395},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":26,"repoUrl":27,"updatedAt":28,"license":29,"forks":30,"topics":31,"repo":33,"sourceUrl":36,"mdContent":37},"iterate-pr","iterate on pull requests until CI passes","Iterate on a PR until actionable CI passes and high\u002Fmedium review feedback is addressed. Use for PR CI failures, review feedback, or green-check loops; do not wait for human approval, draft status, or merge gates.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"sentry","Sentry","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fsentry.png","getsentry",[13,17,20,23],{"name":14,"slug":15,"type":16},"QA","qa","tag",{"name":18,"slug":19,"type":16},"Engineering","engineering",{"name":21,"slug":22,"type":16},"CI\u002FCD","ci-cd",{"name":24,"slug":25,"type":16},"Pull Requests","pull-requests",861,"https:\u002F\u002Fgithub.com\u002Fgetsentry\u002Fskills","2026-07-28T05:35:16.434627",null,45,[32],"tag-production",{"repoUrl":27,"stars":26,"forks":30,"topics":34,"description":35},[32],"Agent Skills used by the Sentry team for development.","https:\u002F\u002Fgithub.com\u002Fgetsentry\u002Fskills\u002Ftree\u002FHEAD\u002Fskills\u002Fiterate-pr","---\nname: iterate-pr\ndescription: Iterate on a PR until actionable CI passes and high\u002Fmedium review feedback is addressed. Use for PR CI failures, review feedback, or green-check loops; do not wait for human approval, draft status, or merge gates.\ndisable-model-invocation: false\n---\n\n# Iterate on PR Until CI Passes\n\nGoal: fix actionable CI failures and high\u002Fmedium review feedback. Stop and report human approval, draft-readiness, and merge-readiness gates.\n\nRequires:\n- authenticated `gh`\n- `uv`\n- target repository root as cwd\n- skill-root-relative script paths, for example `scripts\u002Ffetch_pr_checks.py`\n\n## Bundled Scripts\n\n| Script | Run | Output |\n|--------|-----|--------|\n| `scripts\u002Ffetch_pr_checks.py` | `uv run scripts\u002Ffetch_pr_checks.py [--pr NUMBER]` | JSON: `pr`, `summary`, `checks`, failure snippets |\n| `scripts\u002Ffetch_pr_feedback.py` | `uv run scripts\u002Ffetch_pr_feedback.py [--pr NUMBER]` | JSON buckets: `high`, `medium`, `low`, `bot`, `resolved` |\n| `scripts\u002Fmonitor_pr_checks.py` | `uv run scripts\u002Fmonitor_pr_checks.py [--pr NUMBER]` | terminal marker plus tab-separated checks |\n| `scripts\u002Freply_to_thread.py` | `uv run scripts\u002Freply_to_thread.py THREAD_ID BODY [...]` | JSON reply results |\n\nCheck summary fields include `failed`, `pending`, `actionable_pending`, and `human_gate_pending`.\n\nMonitor markers:\n- `ALL_CHECKS_PASSED`\n- `CHECKS_DONE_WITH_FAILURES`\n- `NO_CHECKS_REGISTERED`\n- `DRAFT_PR_WITH_NO_CHECKS`\n- `CHECKS_BLOCKED_BY_REVIEW_GATE`\n\n## Workflow\n\n### 1. Identify PR\n\nRun:\n```bash\ngh pr view --json number,url,headRefName,isDraft,reviewDecision\n```\n\nStop when:\n- no PR exists\n- draft PR has no checks after monitor grace period: report `DRAFT_PR_WITH_NO_CHECKS`\n\nDraft rule: inspect existing checks\u002Ffeedback only. Do not mark ready for review unless asked.\n\n### 2. Handle Feedback\n\nRun `uv run scripts\u002Ffetch_pr_feedback.py [--pr NUMBER]`.\n\n| Bucket | Action |\n|--------|--------|\n| `high` | fix |\n| `medium` | fix |\n| `low` | ask user which to address |\n| `bot` | skip informational comments |\n| `resolved` | skip |\n\nFeedback fix checklist:\n- verify root cause\n- search related code\n- fix all instances\n- for `review_bot: true`: fix real issues, explain false positives\n\nLow-priority prompt format:\n```text\nFound 3 low-priority suggestions:\n1. [l] \"Consider renaming this variable\" - @reviewer in api.py:42\n2. [nit] \"Could use a list comprehension\" - @reviewer in utils.py:18\n3. [style] \"Add a docstring\" - @reviewer in models.py:55\n\nWhich should I address? (\"1,3\", \"all\", or \"none\")\n```\n\n### 3. Check CI Status\n\nRun `uv run scripts\u002Ffetch_pr_checks.py [--pr NUMBER]`.\n\n| State | Action |\n|-------|--------|\n| `failed > 0` and `actionable_pending == 0` | fix failures |\n| `actionable_pending > 0` | wait; poll feedback while waiting |\n| `pending > 0` and `actionable_pending == 0` | report `CHECKS_BLOCKED_BY_REVIEW_GATE` |\n| no checks after grace period | report `NO_CHECKS_REGISTERED` or `DRAFT_PR_WITH_NO_CHECKS` |\n| all actionable checks passed | run post-CI feedback check |\n\nWait for actionable review bots: sentry, warden, cursor, bugbot, seer, codeql.\nDo not wait for approval, `isDraft`, `REVIEW_REQUIRED`, Codecov, or informational bots.\n\n### 4. Fix CI Failures\n\nFor each failure:\n1. read full log: `gh run view \u003Crun-id> --log-failed`\n2. trace from assertion\u002Fexception\u002Flint rule to source\n3. state the cause before editing: \"fails because X, affected by Y\"\n4. search related call sites\u002Fpatterns\n5. fix root cause, not symptom\n6. add focused test coverage when needed\n\n### 5. Verify Locally, Then Commit and Push\n\nBefore commit:\n- test fix: rerun specific test\n- lint\u002Ftype fix: rerun affected checker\n- code fix: rerun covering tests\n- local failure: fix before pushing\n\n```bash\ngit add \u003Cfiles>\ngit commit -m \"fix: \u003Cdescriptive message>\"\ngit push\n```\n\n### 6. Monitor CI and Address Feedback\n\nLoop:\n1. run `uv run scripts\u002Ffetch_pr_checks.py`\n2. handle table in step 3\n3. while `actionable_pending > 0`, run `uv run scripts\u002Ffetch_pr_feedback.py`\n4. fix new high\u002Fmedium feedback immediately\n5. if changed, verify, commit, push, restart loop\n6. otherwise sleep 30 seconds and repeat\n7. after checks pass, wait 10 seconds, fetch feedback once more\n8. if new high\u002Fmedium feedback exists, return to step 4\n\nClaude Code optional: run `uv run scripts\u002Fmonitor_pr_checks.py` through `MonitorTool` with `persistent: false`; set timeout to normal repo CI duration. Restart the monitor after every push.\n\n## Exit Conditions\n\n| Exit | Conditions |\n|------|------------|\n| Success | actionable CI passed; post-CI feedback clean; low-priority choice handled |\n| Ask user | same failure after 2 attempts; feedback unclear; infrastructure issue |\n| Stop | no PR; branch needs rebase; no checks; draft no-checks; only human gates remain |\n\n## Fallback\n\nIf scripts fail, use `gh` CLI directly:\n- `gh pr view --json number,url,headRefName,isDraft,reviewDecision`\n- `gh pr checks --json name,state,bucket,description,link`\n- `gh run view \u003Crun-id> --log-failed`\n- `gh api repos\u002F{owner}\u002F{repo}\u002Fpulls\u002F{number}\u002Fcomments`\n",{"data":39,"body":41},{"name":4,"description":6,"disable-model-invocation":40},false,{"type":42,"children":43},"root",[44,53,59,64,106,113,306,341,346,394,400,407,412,455,460,478,483,489,500,601,606,637,642,652,658,668,796,816,822,827,867,873,878,901,989,995,1000,1062,1091,1097,1158,1164,1176,1214],{"type":45,"tag":46,"props":47,"children":49},"element","h1",{"id":48},"iterate-on-pr-until-ci-passes",[50],{"type":51,"value":52},"text","Iterate on PR Until CI Passes",{"type":45,"tag":54,"props":55,"children":56},"p",{},[57],{"type":51,"value":58},"Goal: fix actionable CI failures and high\u002Fmedium review feedback. Stop and report human approval, draft-readiness, and merge-readiness gates.",{"type":45,"tag":54,"props":60,"children":61},{},[62],{"type":51,"value":63},"Requires:",{"type":45,"tag":65,"props":66,"children":67},"ul",{},[68,81,90,95],{"type":45,"tag":69,"props":70,"children":71},"li",{},[72,74],{"type":51,"value":73},"authenticated ",{"type":45,"tag":75,"props":76,"children":78},"code",{"className":77},[],[79],{"type":51,"value":80},"gh",{"type":45,"tag":69,"props":82,"children":83},{},[84],{"type":45,"tag":75,"props":85,"children":87},{"className":86},[],[88],{"type":51,"value":89},"uv",{"type":45,"tag":69,"props":91,"children":92},{},[93],{"type":51,"value":94},"target repository root as cwd",{"type":45,"tag":69,"props":96,"children":97},{},[98,100],{"type":51,"value":99},"skill-root-relative script paths, for example ",{"type":45,"tag":75,"props":101,"children":103},{"className":102},[],[104],{"type":51,"value":105},"scripts\u002Ffetch_pr_checks.py",{"type":45,"tag":107,"props":108,"children":110},"h2",{"id":109},"bundled-scripts",[111],{"type":51,"value":112},"Bundled Scripts",{"type":45,"tag":114,"props":115,"children":116},"table",{},[117,141],{"type":45,"tag":118,"props":119,"children":120},"thead",{},[121],{"type":45,"tag":122,"props":123,"children":124},"tr",{},[125,131,136],{"type":45,"tag":126,"props":127,"children":128},"th",{},[129],{"type":51,"value":130},"Script",{"type":45,"tag":126,"props":132,"children":133},{},[134],{"type":51,"value":135},"Run",{"type":45,"tag":126,"props":137,"children":138},{},[139],{"type":51,"value":140},"Output",{"type":45,"tag":142,"props":143,"children":144},"tbody",{},[145,194,254,280],{"type":45,"tag":122,"props":146,"children":147},{},[148,157,166],{"type":45,"tag":149,"props":150,"children":151},"td",{},[152],{"type":45,"tag":75,"props":153,"children":155},{"className":154},[],[156],{"type":51,"value":105},{"type":45,"tag":149,"props":158,"children":159},{},[160],{"type":45,"tag":75,"props":161,"children":163},{"className":162},[],[164],{"type":51,"value":165},"uv run scripts\u002Ffetch_pr_checks.py [--pr NUMBER]",{"type":45,"tag":149,"props":167,"children":168},{},[169,171,177,179,185,186,192],{"type":51,"value":170},"JSON: ",{"type":45,"tag":75,"props":172,"children":174},{"className":173},[],[175],{"type":51,"value":176},"pr",{"type":51,"value":178},", ",{"type":45,"tag":75,"props":180,"children":182},{"className":181},[],[183],{"type":51,"value":184},"summary",{"type":51,"value":178},{"type":45,"tag":75,"props":187,"children":189},{"className":188},[],[190],{"type":51,"value":191},"checks",{"type":51,"value":193},", failure snippets",{"type":45,"tag":122,"props":195,"children":196},{},[197,206,215],{"type":45,"tag":149,"props":198,"children":199},{},[200],{"type":45,"tag":75,"props":201,"children":203},{"className":202},[],[204],{"type":51,"value":205},"scripts\u002Ffetch_pr_feedback.py",{"type":45,"tag":149,"props":207,"children":208},{},[209],{"type":45,"tag":75,"props":210,"children":212},{"className":211},[],[213],{"type":51,"value":214},"uv run scripts\u002Ffetch_pr_feedback.py [--pr NUMBER]",{"type":45,"tag":149,"props":216,"children":217},{},[218,220,226,227,233,234,240,241,247,248],{"type":51,"value":219},"JSON buckets: ",{"type":45,"tag":75,"props":221,"children":223},{"className":222},[],[224],{"type":51,"value":225},"high",{"type":51,"value":178},{"type":45,"tag":75,"props":228,"children":230},{"className":229},[],[231],{"type":51,"value":232},"medium",{"type":51,"value":178},{"type":45,"tag":75,"props":235,"children":237},{"className":236},[],[238],{"type":51,"value":239},"low",{"type":51,"value":178},{"type":45,"tag":75,"props":242,"children":244},{"className":243},[],[245],{"type":51,"value":246},"bot",{"type":51,"value":178},{"type":45,"tag":75,"props":249,"children":251},{"className":250},[],[252],{"type":51,"value":253},"resolved",{"type":45,"tag":122,"props":255,"children":256},{},[257,266,275],{"type":45,"tag":149,"props":258,"children":259},{},[260],{"type":45,"tag":75,"props":261,"children":263},{"className":262},[],[264],{"type":51,"value":265},"scripts\u002Fmonitor_pr_checks.py",{"type":45,"tag":149,"props":267,"children":268},{},[269],{"type":45,"tag":75,"props":270,"children":272},{"className":271},[],[273],{"type":51,"value":274},"uv run scripts\u002Fmonitor_pr_checks.py [--pr NUMBER]",{"type":45,"tag":149,"props":276,"children":277},{},[278],{"type":51,"value":279},"terminal marker plus tab-separated checks",{"type":45,"tag":122,"props":281,"children":282},{},[283,292,301],{"type":45,"tag":149,"props":284,"children":285},{},[286],{"type":45,"tag":75,"props":287,"children":289},{"className":288},[],[290],{"type":51,"value":291},"scripts\u002Freply_to_thread.py",{"type":45,"tag":149,"props":293,"children":294},{},[295],{"type":45,"tag":75,"props":296,"children":298},{"className":297},[],[299],{"type":51,"value":300},"uv run scripts\u002Freply_to_thread.py THREAD_ID BODY [...]",{"type":45,"tag":149,"props":302,"children":303},{},[304],{"type":51,"value":305},"JSON reply results",{"type":45,"tag":54,"props":307,"children":308},{},[309,311,317,318,324,325,331,333,339],{"type":51,"value":310},"Check summary fields include ",{"type":45,"tag":75,"props":312,"children":314},{"className":313},[],[315],{"type":51,"value":316},"failed",{"type":51,"value":178},{"type":45,"tag":75,"props":319,"children":321},{"className":320},[],[322],{"type":51,"value":323},"pending",{"type":51,"value":178},{"type":45,"tag":75,"props":326,"children":328},{"className":327},[],[329],{"type":51,"value":330},"actionable_pending",{"type":51,"value":332},", and ",{"type":45,"tag":75,"props":334,"children":336},{"className":335},[],[337],{"type":51,"value":338},"human_gate_pending",{"type":51,"value":340},".",{"type":45,"tag":54,"props":342,"children":343},{},[344],{"type":51,"value":345},"Monitor markers:",{"type":45,"tag":65,"props":347,"children":348},{},[349,358,367,376,385],{"type":45,"tag":69,"props":350,"children":351},{},[352],{"type":45,"tag":75,"props":353,"children":355},{"className":354},[],[356],{"type":51,"value":357},"ALL_CHECKS_PASSED",{"type":45,"tag":69,"props":359,"children":360},{},[361],{"type":45,"tag":75,"props":362,"children":364},{"className":363},[],[365],{"type":51,"value":366},"CHECKS_DONE_WITH_FAILURES",{"type":45,"tag":69,"props":368,"children":369},{},[370],{"type":45,"tag":75,"props":371,"children":373},{"className":372},[],[374],{"type":51,"value":375},"NO_CHECKS_REGISTERED",{"type":45,"tag":69,"props":377,"children":378},{},[379],{"type":45,"tag":75,"props":380,"children":382},{"className":381},[],[383],{"type":51,"value":384},"DRAFT_PR_WITH_NO_CHECKS",{"type":45,"tag":69,"props":386,"children":387},{},[388],{"type":45,"tag":75,"props":389,"children":391},{"className":390},[],[392],{"type":51,"value":393},"CHECKS_BLOCKED_BY_REVIEW_GATE",{"type":45,"tag":107,"props":395,"children":397},{"id":396},"workflow",[398],{"type":51,"value":399},"Workflow",{"type":45,"tag":401,"props":402,"children":404},"h3",{"id":403},"_1-identify-pr",[405],{"type":51,"value":406},"1. Identify PR",{"type":45,"tag":54,"props":408,"children":409},{},[410],{"type":51,"value":411},"Run:",{"type":45,"tag":413,"props":414,"children":419},"pre",{"className":415,"code":416,"language":417,"meta":418,"style":418},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","gh pr view --json number,url,headRefName,isDraft,reviewDecision\n","bash","",[420],{"type":45,"tag":75,"props":421,"children":422},{"__ignoreMap":418},[423],{"type":45,"tag":424,"props":425,"children":428},"span",{"class":426,"line":427},"line",1,[429,434,440,445,450],{"type":45,"tag":424,"props":430,"children":432},{"style":431},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[433],{"type":51,"value":80},{"type":45,"tag":424,"props":435,"children":437},{"style":436},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[438],{"type":51,"value":439}," pr",{"type":45,"tag":424,"props":441,"children":442},{"style":436},[443],{"type":51,"value":444}," view",{"type":45,"tag":424,"props":446,"children":447},{"style":436},[448],{"type":51,"value":449}," --json",{"type":45,"tag":424,"props":451,"children":452},{"style":436},[453],{"type":51,"value":454}," number,url,headRefName,isDraft,reviewDecision\n",{"type":45,"tag":54,"props":456,"children":457},{},[458],{"type":51,"value":459},"Stop when:",{"type":45,"tag":65,"props":461,"children":462},{},[463,468],{"type":45,"tag":69,"props":464,"children":465},{},[466],{"type":51,"value":467},"no PR exists",{"type":45,"tag":69,"props":469,"children":470},{},[471,473],{"type":51,"value":472},"draft PR has no checks after monitor grace period: report ",{"type":45,"tag":75,"props":474,"children":476},{"className":475},[],[477],{"type":51,"value":384},{"type":45,"tag":54,"props":479,"children":480},{},[481],{"type":51,"value":482},"Draft rule: inspect existing checks\u002Ffeedback only. Do not mark ready for review unless asked.",{"type":45,"tag":401,"props":484,"children":486},{"id":485},"_2-handle-feedback",[487],{"type":51,"value":488},"2. Handle Feedback",{"type":45,"tag":54,"props":490,"children":491},{},[492,494,499],{"type":51,"value":493},"Run ",{"type":45,"tag":75,"props":495,"children":497},{"className":496},[],[498],{"type":51,"value":214},{"type":51,"value":340},{"type":45,"tag":114,"props":501,"children":502},{},[503,519],{"type":45,"tag":118,"props":504,"children":505},{},[506],{"type":45,"tag":122,"props":507,"children":508},{},[509,514],{"type":45,"tag":126,"props":510,"children":511},{},[512],{"type":51,"value":513},"Bucket",{"type":45,"tag":126,"props":515,"children":516},{},[517],{"type":51,"value":518},"Action",{"type":45,"tag":142,"props":520,"children":521},{},[522,538,553,569,585],{"type":45,"tag":122,"props":523,"children":524},{},[525,533],{"type":45,"tag":149,"props":526,"children":527},{},[528],{"type":45,"tag":75,"props":529,"children":531},{"className":530},[],[532],{"type":51,"value":225},{"type":45,"tag":149,"props":534,"children":535},{},[536],{"type":51,"value":537},"fix",{"type":45,"tag":122,"props":539,"children":540},{},[541,549],{"type":45,"tag":149,"props":542,"children":543},{},[544],{"type":45,"tag":75,"props":545,"children":547},{"className":546},[],[548],{"type":51,"value":232},{"type":45,"tag":149,"props":550,"children":551},{},[552],{"type":51,"value":537},{"type":45,"tag":122,"props":554,"children":555},{},[556,564],{"type":45,"tag":149,"props":557,"children":558},{},[559],{"type":45,"tag":75,"props":560,"children":562},{"className":561},[],[563],{"type":51,"value":239},{"type":45,"tag":149,"props":565,"children":566},{},[567],{"type":51,"value":568},"ask user which to address",{"type":45,"tag":122,"props":570,"children":571},{},[572,580],{"type":45,"tag":149,"props":573,"children":574},{},[575],{"type":45,"tag":75,"props":576,"children":578},{"className":577},[],[579],{"type":51,"value":246},{"type":45,"tag":149,"props":581,"children":582},{},[583],{"type":51,"value":584},"skip informational comments",{"type":45,"tag":122,"props":586,"children":587},{},[588,596],{"type":45,"tag":149,"props":589,"children":590},{},[591],{"type":45,"tag":75,"props":592,"children":594},{"className":593},[],[595],{"type":51,"value":253},{"type":45,"tag":149,"props":597,"children":598},{},[599],{"type":51,"value":600},"skip",{"type":45,"tag":54,"props":602,"children":603},{},[604],{"type":51,"value":605},"Feedback fix checklist:",{"type":45,"tag":65,"props":607,"children":608},{},[609,614,619,624],{"type":45,"tag":69,"props":610,"children":611},{},[612],{"type":51,"value":613},"verify root cause",{"type":45,"tag":69,"props":615,"children":616},{},[617],{"type":51,"value":618},"search related code",{"type":45,"tag":69,"props":620,"children":621},{},[622],{"type":51,"value":623},"fix all instances",{"type":45,"tag":69,"props":625,"children":626},{},[627,629,635],{"type":51,"value":628},"for ",{"type":45,"tag":75,"props":630,"children":632},{"className":631},[],[633],{"type":51,"value":634},"review_bot: true",{"type":51,"value":636},": fix real issues, explain false positives",{"type":45,"tag":54,"props":638,"children":639},{},[640],{"type":51,"value":641},"Low-priority prompt format:",{"type":45,"tag":413,"props":643,"children":647},{"className":644,"code":646,"language":51,"meta":418},[645],"language-text","Found 3 low-priority suggestions:\n1. [l] \"Consider renaming this variable\" - @reviewer in api.py:42\n2. [nit] \"Could use a list comprehension\" - @reviewer in utils.py:18\n3. [style] \"Add a docstring\" - @reviewer in models.py:55\n\nWhich should I address? (\"1,3\", \"all\", or \"none\")\n",[648],{"type":45,"tag":75,"props":649,"children":650},{"__ignoreMap":418},[651],{"type":51,"value":646},{"type":45,"tag":401,"props":653,"children":655},{"id":654},"_3-check-ci-status",[656],{"type":51,"value":657},"3. Check CI Status",{"type":45,"tag":54,"props":659,"children":660},{},[661,662,667],{"type":51,"value":493},{"type":45,"tag":75,"props":663,"children":665},{"className":664},[],[666],{"type":51,"value":165},{"type":51,"value":340},{"type":45,"tag":114,"props":669,"children":670},{},[671,686],{"type":45,"tag":118,"props":672,"children":673},{},[674],{"type":45,"tag":122,"props":675,"children":676},{},[677,682],{"type":45,"tag":126,"props":678,"children":679},{},[680],{"type":51,"value":681},"State",{"type":45,"tag":126,"props":683,"children":684},{},[685],{"type":51,"value":518},{"type":45,"tag":142,"props":687,"children":688},{},[689,714,731,759,783],{"type":45,"tag":122,"props":690,"children":691},{},[692,709],{"type":45,"tag":149,"props":693,"children":694},{},[695,701,703],{"type":45,"tag":75,"props":696,"children":698},{"className":697},[],[699],{"type":51,"value":700},"failed > 0",{"type":51,"value":702}," and ",{"type":45,"tag":75,"props":704,"children":706},{"className":705},[],[707],{"type":51,"value":708},"actionable_pending == 0",{"type":45,"tag":149,"props":710,"children":711},{},[712],{"type":51,"value":713},"fix failures",{"type":45,"tag":122,"props":715,"children":716},{},[717,726],{"type":45,"tag":149,"props":718,"children":719},{},[720],{"type":45,"tag":75,"props":721,"children":723},{"className":722},[],[724],{"type":51,"value":725},"actionable_pending > 0",{"type":45,"tag":149,"props":727,"children":728},{},[729],{"type":51,"value":730},"wait; poll feedback while waiting",{"type":45,"tag":122,"props":732,"children":733},{},[734,749],{"type":45,"tag":149,"props":735,"children":736},{},[737,743,744],{"type":45,"tag":75,"props":738,"children":740},{"className":739},[],[741],{"type":51,"value":742},"pending > 0",{"type":51,"value":702},{"type":45,"tag":75,"props":745,"children":747},{"className":746},[],[748],{"type":51,"value":708},{"type":45,"tag":149,"props":750,"children":751},{},[752,754],{"type":51,"value":753},"report ",{"type":45,"tag":75,"props":755,"children":757},{"className":756},[],[758],{"type":51,"value":393},{"type":45,"tag":122,"props":760,"children":761},{},[762,767],{"type":45,"tag":149,"props":763,"children":764},{},[765],{"type":51,"value":766},"no checks after grace period",{"type":45,"tag":149,"props":768,"children":769},{},[770,771,776,778],{"type":51,"value":753},{"type":45,"tag":75,"props":772,"children":774},{"className":773},[],[775],{"type":51,"value":375},{"type":51,"value":777}," or ",{"type":45,"tag":75,"props":779,"children":781},{"className":780},[],[782],{"type":51,"value":384},{"type":45,"tag":122,"props":784,"children":785},{},[786,791],{"type":45,"tag":149,"props":787,"children":788},{},[789],{"type":51,"value":790},"all actionable checks passed",{"type":45,"tag":149,"props":792,"children":793},{},[794],{"type":51,"value":795},"run post-CI feedback check",{"type":45,"tag":54,"props":797,"children":798},{},[799,801,807,808,814],{"type":51,"value":800},"Wait for actionable review bots: sentry, warden, cursor, bugbot, seer, codeql.\nDo not wait for approval, ",{"type":45,"tag":75,"props":802,"children":804},{"className":803},[],[805],{"type":51,"value":806},"isDraft",{"type":51,"value":178},{"type":45,"tag":75,"props":809,"children":811},{"className":810},[],[812],{"type":51,"value":813},"REVIEW_REQUIRED",{"type":51,"value":815},", Codecov, or informational bots.",{"type":45,"tag":401,"props":817,"children":819},{"id":818},"_4-fix-ci-failures",[820],{"type":51,"value":821},"4. Fix CI Failures",{"type":45,"tag":54,"props":823,"children":824},{},[825],{"type":51,"value":826},"For each failure:",{"type":45,"tag":828,"props":829,"children":830},"ol",{},[831,842,847,852,857,862],{"type":45,"tag":69,"props":832,"children":833},{},[834,836],{"type":51,"value":835},"read full log: ",{"type":45,"tag":75,"props":837,"children":839},{"className":838},[],[840],{"type":51,"value":841},"gh run view \u003Crun-id> --log-failed",{"type":45,"tag":69,"props":843,"children":844},{},[845],{"type":51,"value":846},"trace from assertion\u002Fexception\u002Flint rule to source",{"type":45,"tag":69,"props":848,"children":849},{},[850],{"type":51,"value":851},"state the cause before editing: \"fails because X, affected by Y\"",{"type":45,"tag":69,"props":853,"children":854},{},[855],{"type":51,"value":856},"search related call sites\u002Fpatterns",{"type":45,"tag":69,"props":858,"children":859},{},[860],{"type":51,"value":861},"fix root cause, not symptom",{"type":45,"tag":69,"props":863,"children":864},{},[865],{"type":51,"value":866},"add focused test coverage when needed",{"type":45,"tag":401,"props":868,"children":870},{"id":869},"_5-verify-locally-then-commit-and-push",[871],{"type":51,"value":872},"5. Verify Locally, Then Commit and Push",{"type":45,"tag":54,"props":874,"children":875},{},[876],{"type":51,"value":877},"Before commit:",{"type":45,"tag":65,"props":879,"children":880},{},[881,886,891,896],{"type":45,"tag":69,"props":882,"children":883},{},[884],{"type":51,"value":885},"test fix: rerun specific test",{"type":45,"tag":69,"props":887,"children":888},{},[889],{"type":51,"value":890},"lint\u002Ftype fix: rerun affected checker",{"type":45,"tag":69,"props":892,"children":893},{},[894],{"type":51,"value":895},"code fix: rerun covering tests",{"type":45,"tag":69,"props":897,"children":898},{},[899],{"type":51,"value":900},"local failure: fix before pushing",{"type":45,"tag":413,"props":902,"children":904},{"className":415,"code":903,"language":417,"meta":418,"style":418},"git add \u003Cfiles>\ngit commit -m \"fix: \u003Cdescriptive message>\"\ngit push\n",[905],{"type":45,"tag":75,"props":906,"children":907},{"__ignoreMap":418},[908,943,976],{"type":45,"tag":424,"props":909,"children":910},{"class":426,"line":427},[911,916,921,927,932,938],{"type":45,"tag":424,"props":912,"children":913},{"style":431},[914],{"type":51,"value":915},"git",{"type":45,"tag":424,"props":917,"children":918},{"style":436},[919],{"type":51,"value":920}," add",{"type":45,"tag":424,"props":922,"children":924},{"style":923},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[925],{"type":51,"value":926}," \u003C",{"type":45,"tag":424,"props":928,"children":929},{"style":436},[930],{"type":51,"value":931},"file",{"type":45,"tag":424,"props":933,"children":935},{"style":934},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[936],{"type":51,"value":937},"s",{"type":45,"tag":424,"props":939,"children":940},{"style":923},[941],{"type":51,"value":942},">\n",{"type":45,"tag":424,"props":944,"children":946},{"class":426,"line":945},2,[947,951,956,961,966,971],{"type":45,"tag":424,"props":948,"children":949},{"style":431},[950],{"type":51,"value":915},{"type":45,"tag":424,"props":952,"children":953},{"style":436},[954],{"type":51,"value":955}," commit",{"type":45,"tag":424,"props":957,"children":958},{"style":436},[959],{"type":51,"value":960}," -m",{"type":45,"tag":424,"props":962,"children":963},{"style":923},[964],{"type":51,"value":965}," \"",{"type":45,"tag":424,"props":967,"children":968},{"style":436},[969],{"type":51,"value":970},"fix: \u003Cdescriptive message>",{"type":45,"tag":424,"props":972,"children":973},{"style":923},[974],{"type":51,"value":975},"\"\n",{"type":45,"tag":424,"props":977,"children":979},{"class":426,"line":978},3,[980,984],{"type":45,"tag":424,"props":981,"children":982},{"style":431},[983],{"type":51,"value":915},{"type":45,"tag":424,"props":985,"children":986},{"style":436},[987],{"type":51,"value":988}," push\n",{"type":45,"tag":401,"props":990,"children":992},{"id":991},"_6-monitor-ci-and-address-feedback",[993],{"type":51,"value":994},"6. Monitor CI and Address Feedback",{"type":45,"tag":54,"props":996,"children":997},{},[998],{"type":51,"value":999},"Loop:",{"type":45,"tag":828,"props":1001,"children":1002},{},[1003,1014,1019,1037,1042,1047,1052,1057],{"type":45,"tag":69,"props":1004,"children":1005},{},[1006,1008],{"type":51,"value":1007},"run ",{"type":45,"tag":75,"props":1009,"children":1011},{"className":1010},[],[1012],{"type":51,"value":1013},"uv run scripts\u002Ffetch_pr_checks.py",{"type":45,"tag":69,"props":1015,"children":1016},{},[1017],{"type":51,"value":1018},"handle table in step 3",{"type":45,"tag":69,"props":1020,"children":1021},{},[1022,1024,1029,1031],{"type":51,"value":1023},"while ",{"type":45,"tag":75,"props":1025,"children":1027},{"className":1026},[],[1028],{"type":51,"value":725},{"type":51,"value":1030},", run ",{"type":45,"tag":75,"props":1032,"children":1034},{"className":1033},[],[1035],{"type":51,"value":1036},"uv run scripts\u002Ffetch_pr_feedback.py",{"type":45,"tag":69,"props":1038,"children":1039},{},[1040],{"type":51,"value":1041},"fix new high\u002Fmedium feedback immediately",{"type":45,"tag":69,"props":1043,"children":1044},{},[1045],{"type":51,"value":1046},"if changed, verify, commit, push, restart loop",{"type":45,"tag":69,"props":1048,"children":1049},{},[1050],{"type":51,"value":1051},"otherwise sleep 30 seconds and repeat",{"type":45,"tag":69,"props":1053,"children":1054},{},[1055],{"type":51,"value":1056},"after checks pass, wait 10 seconds, fetch feedback once more",{"type":45,"tag":69,"props":1058,"children":1059},{},[1060],{"type":51,"value":1061},"if new high\u002Fmedium feedback exists, return to step 4",{"type":45,"tag":54,"props":1063,"children":1064},{},[1065,1067,1073,1075,1081,1083,1089],{"type":51,"value":1066},"Claude Code optional: run ",{"type":45,"tag":75,"props":1068,"children":1070},{"className":1069},[],[1071],{"type":51,"value":1072},"uv run scripts\u002Fmonitor_pr_checks.py",{"type":51,"value":1074}," through ",{"type":45,"tag":75,"props":1076,"children":1078},{"className":1077},[],[1079],{"type":51,"value":1080},"MonitorTool",{"type":51,"value":1082}," with ",{"type":45,"tag":75,"props":1084,"children":1086},{"className":1085},[],[1087],{"type":51,"value":1088},"persistent: false",{"type":51,"value":1090},"; set timeout to normal repo CI duration. Restart the monitor after every push.",{"type":45,"tag":107,"props":1092,"children":1094},{"id":1093},"exit-conditions",[1095],{"type":51,"value":1096},"Exit Conditions",{"type":45,"tag":114,"props":1098,"children":1099},{},[1100,1116],{"type":45,"tag":118,"props":1101,"children":1102},{},[1103],{"type":45,"tag":122,"props":1104,"children":1105},{},[1106,1111],{"type":45,"tag":126,"props":1107,"children":1108},{},[1109],{"type":51,"value":1110},"Exit",{"type":45,"tag":126,"props":1112,"children":1113},{},[1114],{"type":51,"value":1115},"Conditions",{"type":45,"tag":142,"props":1117,"children":1118},{},[1119,1132,1145],{"type":45,"tag":122,"props":1120,"children":1121},{},[1122,1127],{"type":45,"tag":149,"props":1123,"children":1124},{},[1125],{"type":51,"value":1126},"Success",{"type":45,"tag":149,"props":1128,"children":1129},{},[1130],{"type":51,"value":1131},"actionable CI passed; post-CI feedback clean; low-priority choice handled",{"type":45,"tag":122,"props":1133,"children":1134},{},[1135,1140],{"type":45,"tag":149,"props":1136,"children":1137},{},[1138],{"type":51,"value":1139},"Ask user",{"type":45,"tag":149,"props":1141,"children":1142},{},[1143],{"type":51,"value":1144},"same failure after 2 attempts; feedback unclear; infrastructure issue",{"type":45,"tag":122,"props":1146,"children":1147},{},[1148,1153],{"type":45,"tag":149,"props":1149,"children":1150},{},[1151],{"type":51,"value":1152},"Stop",{"type":45,"tag":149,"props":1154,"children":1155},{},[1156],{"type":51,"value":1157},"no PR; branch needs rebase; no checks; draft no-checks; only human gates remain",{"type":45,"tag":107,"props":1159,"children":1161},{"id":1160},"fallback",[1162],{"type":51,"value":1163},"Fallback",{"type":45,"tag":54,"props":1165,"children":1166},{},[1167,1169,1174],{"type":51,"value":1168},"If scripts fail, use ",{"type":45,"tag":75,"props":1170,"children":1172},{"className":1171},[],[1173],{"type":51,"value":80},{"type":51,"value":1175}," CLI directly:",{"type":45,"tag":65,"props":1177,"children":1178},{},[1179,1188,1197,1205],{"type":45,"tag":69,"props":1180,"children":1181},{},[1182],{"type":45,"tag":75,"props":1183,"children":1185},{"className":1184},[],[1186],{"type":51,"value":1187},"gh pr view --json number,url,headRefName,isDraft,reviewDecision",{"type":45,"tag":69,"props":1189,"children":1190},{},[1191],{"type":45,"tag":75,"props":1192,"children":1194},{"className":1193},[],[1195],{"type":51,"value":1196},"gh pr checks --json name,state,bucket,description,link",{"type":45,"tag":69,"props":1198,"children":1199},{},[1200],{"type":45,"tag":75,"props":1201,"children":1203},{"className":1202},[],[1204],{"type":51,"value":841},{"type":45,"tag":69,"props":1206,"children":1207},{},[1208],{"type":45,"tag":75,"props":1209,"children":1211},{"className":1210},[],[1212],{"type":51,"value":1213},"gh api repos\u002F{owner}\u002F{repo}\u002Fpulls\u002F{number}\u002Fcomments",{"type":45,"tag":1215,"props":1216,"children":1217},"style",{},[1218],{"type":51,"value":1219},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":1221,"total":1394},[1222,1247,1261,1272,1286,1303,1319,1333,1343,1353,1363,1381],{"slug":1223,"name":1223,"fn":1224,"description":1225,"org":1226,"tags":1227,"stars":1244,"repoUrl":1245,"updatedAt":1246},"xcodebuildmcp","build and test Apple apps with XcodeBuildMCP","Official skill for XcodeBuildMCP. Use when doing iOS\u002FmacOS\u002FwatchOS\u002FtvOS\u002FvisionOS work (build, test, run, debug, log, UI automation).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1228,1231,1234,1237,1238,1241],{"name":1229,"slug":1230,"type":16},"Debugging","debugging",{"name":1232,"slug":1233,"type":16},"iOS","ios",{"name":1235,"slug":1236,"type":16},"macOS","macos",{"name":9,"slug":8,"type":16},{"name":1239,"slug":1240,"type":16},"Testing","testing",{"name":1242,"slug":1243,"type":16},"Xcode","xcode",6176,"https:\u002F\u002Fgithub.com\u002Fgetsentry\u002FXcodeBuildMCP","2026-04-06T18:13:34.8719",{"slug":1248,"name":1248,"fn":1249,"description":1250,"org":1251,"tags":1252,"stars":1244,"repoUrl":1245,"updatedAt":1260},"xcodebuildmcp-cli","build and test Apple apps via CLI","Official skill for the XcodeBuildMCP CLI. Use when doing iOS\u002FmacOS\u002FwatchOS\u002FtvOS\u002FvisionOS work (build, test, run, debug, log, UI automation).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1253,1256,1257,1258,1259],{"name":1254,"slug":1255,"type":16},"CLI","cli",{"name":1232,"slug":1233,"type":16},{"name":1235,"slug":1236,"type":16},{"name":1239,"slug":1240,"type":16},{"name":1242,"slug":1243,"type":16},"2026-04-06T18:13:36.13414",{"slug":1262,"name":1262,"fn":1263,"description":1264,"org":1265,"tags":1266,"stars":26,"repoUrl":27,"updatedAt":1271},"agents-md","maintain project instruction files","Creates and maintains concise AGENTS.md and CLAUDE.md project instruction files. Use when asked to create AGENTS.md, update AGENTS.md, maintain agent docs, set up CLAUDE.md, document repository agent conventions, or keep coding-agent instructions minimal and reference-backed.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1267,1270],{"name":1268,"slug":1269,"type":16},"Documentation","documentation",{"name":18,"slug":19,"type":16},"2026-05-15T06:16:29.695991",{"slug":1273,"name":1273,"fn":1274,"description":1275,"org":1276,"tags":1277,"stars":26,"repoUrl":27,"updatedAt":1285},"blog-writing-guide","write and review engineering blog posts","Write, review, and improve blog posts for the Sentry engineering blog following Sentry's specific writing standards, voice, and quality bar. Use this skill whenever someone asks to write a blog post, draft a technical article, review blog content, improve a draft, write a product announcement, create an engineering deep-dive, or produce any written content destined for the Sentry blog or developer audience. Also trigger when the user mentions \"blog post,\" \"blog draft,\" \"write-up,\" \"announcement post,\" \"engineering post,\" \"deep dive,\" \"postmortem,\" or asks for help with technical writing for Sentry. Even if the user just says \"help me write about [feature\u002Ftopic]\" — if it sounds like it could become a Sentry blog post, use this skill.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1278,1281,1282],{"name":1279,"slug":1280,"type":16},"Communications","communications",{"name":9,"slug":8,"type":16},{"name":1283,"slug":1284,"type":16},"Technical Writing","technical-writing","2026-05-15T06:16:33.38217",{"slug":1287,"name":1287,"fn":1288,"description":1289,"org":1290,"tags":1291,"stars":26,"repoUrl":27,"updatedAt":1302},"brand-guidelines","write copy following Sentry brand guidelines","Write copy following Sentry brand guidelines. Use when writing UI text, error messages, empty states, onboarding flows, 404 pages, documentation, marketing copy, or any user-facing content. Covers both Plain Speech (default) and Sentry Voice tones.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1292,1295,1298,1299],{"name":1293,"slug":1294,"type":16},"Branding","branding",{"name":1296,"slug":1297,"type":16},"Content Creation","content-creation",{"name":9,"slug":8,"type":16},{"name":1300,"slug":1301,"type":16},"UX Copy","ux-copy","2026-05-15T06:16:22.395707",{"slug":1304,"name":1304,"fn":1305,"description":1306,"org":1307,"tags":1308,"stars":26,"repoUrl":27,"updatedAt":1318},"claude-settings-audit","generate Claude Code settings permissions","Analyze a repository to generate recommended Claude Code settings.json permissions. Use when setting up a new project, auditing existing settings, or determining which read-only bash commands to allow. Detects tech stack, build tools, and monorepo structure.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1309,1312,1315],{"name":1310,"slug":1311,"type":16},"Claude Code","claude-code",{"name":1313,"slug":1314,"type":16},"Configuration","configuration",{"name":1316,"slug":1317,"type":16},"Security","security","2026-05-15T06:16:44.335977",{"slug":1320,"name":1320,"fn":1321,"description":1322,"org":1323,"tags":1324,"stars":26,"repoUrl":27,"updatedAt":1332},"code-review","perform code reviews for Sentry projects","Perform code reviews following Sentry engineering practices. Use when reviewing pull requests, examining code changes, or providing feedback on code quality. Covers security, performance, testing, and design review.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1325,1327,1328,1331],{"name":1326,"slug":1320,"type":16},"Code Review",{"name":18,"slug":19,"type":16},{"name":1329,"slug":1330,"type":16},"Performance","performance",{"name":1316,"slug":1317,"type":16},"2026-05-15T06:16:35.824864",{"slug":1334,"name":1334,"fn":1335,"description":1336,"org":1337,"tags":1338,"stars":26,"repoUrl":27,"updatedAt":1342},"code-simplifier","simplify and refine source code","Simplifies and refines code for clarity, consistency, and maintainability while preserving all functionality. Use when asked to \"simplify code\", \"clean up code\", \"refactor for clarity\", \"improve readability\", or review recently modified code for elegance. Focuses on project-specific best practices.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1339],{"name":1340,"slug":1341,"type":16},"Code Analysis","code-analysis","2026-05-15T06:16:32.127981",{"slug":1344,"name":1344,"fn":1345,"description":1346,"org":1347,"tags":1348,"stars":26,"repoUrl":27,"updatedAt":1352},"commit","create commits with Sentry conventions","Use for every request to commit changes or draft a commit message. Creates Sentry-style conventional commits with issue references.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1349,1351],{"name":1350,"slug":915,"type":16},"Git",{"name":9,"slug":8,"type":16},"2026-07-18T05:15:10.723937",{"slug":1354,"name":1354,"fn":1355,"description":1356,"org":1357,"tags":1358,"stars":26,"repoUrl":27,"updatedAt":1362},"create-branch","create git branches for Sentry workflows","Create a git branch following Sentry naming conventions. Use when asked to \"create a branch\", \"new branch\", \"start a branch\", \"make a branch\", \"switch to a new branch\", or when starting new work on the default branch.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1359,1360,1361],{"name":18,"slug":19,"type":16},{"name":1350,"slug":915,"type":16},{"name":9,"slug":8,"type":16},"2026-05-15T06:16:39.458431",{"slug":1364,"name":1364,"fn":1365,"description":1366,"org":1367,"tags":1368,"stars":26,"repoUrl":27,"updatedAt":1380},"django-access-review","review Django access control and IDOR","Django access control and IDOR security review. Use when reviewing Django views, DRF viewsets, ORM queries, or any Python\u002FDjango code handling user authorization. Trigger keywords: \"IDOR\", \"access control\", \"authorization\", \"Django permissions\", \"object permissions\", \"tenant isolation\", \"broken access\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1369,1372,1373,1376,1379],{"name":1370,"slug":1371,"type":16},"Access Control","access-control",{"name":1340,"slug":1341,"type":16},{"name":1374,"slug":1375,"type":16},"Django","django",{"name":1377,"slug":1378,"type":16},"Python","python",{"name":1316,"slug":1317,"type":16},"2026-05-15T06:16:43.098698",{"slug":1382,"name":1382,"fn":1383,"description":1384,"org":1385,"tags":1386,"stars":26,"repoUrl":27,"updatedAt":1393},"django-perf-review","review and optimize Django performance","Django performance code review. Use when asked to \"review Django performance\", \"find N+1 queries\", \"optimize Django\", \"check queryset performance\", \"database performance\", \"Django ORM issues\", or audit Django code for performance problems.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1387,1388,1391,1392],{"name":1326,"slug":1320,"type":16},{"name":1389,"slug":1390,"type":16},"Database","database",{"name":1374,"slug":1375,"type":16},{"name":1329,"slug":1330,"type":16},"2026-05-15T06:16:24.832813",88,{"items":1396,"total":1437},[1397,1402,1408,1415,1421,1428,1432],{"slug":1262,"name":1262,"fn":1263,"description":1264,"org":1398,"tags":1399,"stars":26,"repoUrl":27,"updatedAt":1271},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1400,1401],{"name":1268,"slug":1269,"type":16},{"name":18,"slug":19,"type":16},{"slug":1273,"name":1273,"fn":1274,"description":1275,"org":1403,"tags":1404,"stars":26,"repoUrl":27,"updatedAt":1285},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1405,1406,1407],{"name":1279,"slug":1280,"type":16},{"name":9,"slug":8,"type":16},{"name":1283,"slug":1284,"type":16},{"slug":1287,"name":1287,"fn":1288,"description":1289,"org":1409,"tags":1410,"stars":26,"repoUrl":27,"updatedAt":1302},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1411,1412,1413,1414],{"name":1293,"slug":1294,"type":16},{"name":1296,"slug":1297,"type":16},{"name":9,"slug":8,"type":16},{"name":1300,"slug":1301,"type":16},{"slug":1304,"name":1304,"fn":1305,"description":1306,"org":1416,"tags":1417,"stars":26,"repoUrl":27,"updatedAt":1318},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1418,1419,1420],{"name":1310,"slug":1311,"type":16},{"name":1313,"slug":1314,"type":16},{"name":1316,"slug":1317,"type":16},{"slug":1320,"name":1320,"fn":1321,"description":1322,"org":1422,"tags":1423,"stars":26,"repoUrl":27,"updatedAt":1332},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1424,1425,1426,1427],{"name":1326,"slug":1320,"type":16},{"name":18,"slug":19,"type":16},{"name":1329,"slug":1330,"type":16},{"name":1316,"slug":1317,"type":16},{"slug":1334,"name":1334,"fn":1335,"description":1336,"org":1429,"tags":1430,"stars":26,"repoUrl":27,"updatedAt":1342},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1431],{"name":1340,"slug":1341,"type":16},{"slug":1344,"name":1344,"fn":1345,"description":1346,"org":1433,"tags":1434,"stars":26,"repoUrl":27,"updatedAt":1352},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1435,1436],{"name":1350,"slug":915,"type":16},{"name":9,"slug":8,"type":16},28]