[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6PVAQJS54H1JHFESFES7VTS":3,"skill-same:01M6PVAQJS54H1JHFESFES7VTS":65},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":38,"linkOnly":39,"markdownContent":40,"markdownBody":41,"frontMatter":42,"refName":29,"commitSha":46,"skillDirectory":47,"forksCount":45,"repositoryHtmlUrl":48,"repositoryHomepageUrl":6,"ownerHtmlUrl":49,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":50,"install":51,"resources":64},"01M6PVAQJS54H1JHFESFES7VTS","red-attribution",null,"Decide whose failure a red stage is before acting on it. Use when a gate stage, test tier or CI run goes red and the change may not be its cause, when the push road reports a red master, and before reporting a suite green.","muratovv\u002Fai-hats","muratovv","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F7502801?v=4","01M6JGCBN4KEJX012GPJVSH04T","Fedor Muratov","01M6JGCBSNMN7CW3RGTPPE0MN2",3,"MIT","https:\u002F\u002Fgithub.com\u002Fmuratovv\u002Fai-hats\u002Fblob\u002Fmaster\u002Fpackages\u002Fai-hats-library\u002Fsrc\u002Fai_hats_library\u002Fexperimental\u002Fai-hats-dev\u002Fskills\u002Fred-attribution\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37],"red attribution","red","attribution","reports","suite","goes","it","stage","green","gate","master","test","use","decide","reporting","ci","push","run","change","2026-11-10 10:12:30",false,"---\nname: red-attribution\ndescription: >-\n  Decide whose failure a red stage is before acting on it. Use when a gate\n  stage, test tier or CI run goes red and the change may not be its cause,\n  when the push road reports a red master, and before reporting a suite\n  green.\nlicense: MIT\nai_hats:\n  schema_version: 1\n  type: skill\n---\n\n# red-attribution\n\nA red stage asks two questions and the gate only prints one. \"How do I fix this\"\nis second. **Whose failure is this** is first, and answering it wrong is how a\ncard spends its day on someone else's breakage — or reports green by shrinking\nwhat it ran.\n\n## When to Use\n\n- A gate stage is red and the change did not touch what it exercises.\n- The push road's `master-ci` notice reports a red master, or a whole tier is\n  red on a long-lived branch.\n- Before writing \"green\" anywhere: the claim needs the runner's own number over\n  the run the gate would have done, not a subset.\n\n## Procedure\n\n**1. Re-check the base before blaming the diff.** The cheapest cause of a red\ntier on a branch is a stale base, not the change. One card's 13 failures went to\n1 this way — spend this step before the expensive ones.\n\n```bash\ngit rev-list --count HEAD..master     # 0 = current; anything else, merge first\ngit merge master --no-edit\n```\n\n**2. Rule out the local venv.** Mass failures that die partway through are more\noften a broken interpreter than a broken master, and a venv fault looks exactly\nlike foreign redness.\n\n```bash\n.venv\u002Fbin\u002Fpython -c 'import ai_hats, sys; print(ai_hats.__file__, sys.executable)'\n```\n\nThe path must sit inside THIS worktree. A `.venv` pointing at another checkout is\nthe fault itself — `quality-gate` prints the provisioning command when it sees one.\n\n**3. Take a baseline through the SAME mechanism.** Run the stage on your base\ncommit the way you ran it on the branch — same command, same markers. A baseline\ntaken another way proves nothing: one measured pair was 57 failures on the branch\nagainst 32 on master with large unique sets *in both directions*, and neither\nnumber meant what it looked like.\n\n```bash\nRUNCHECK=packages\u002Fai-hats-library\u002Fsrc\u002Fai_hats_library\u002Fai-hats-dev\u002Fskills\u002Fquality-gate\u002Fbin\u002Fruncheck.sh\nBASE=$(git merge-base HEAD master)\n\ntimeout 3000 bash \"$RUNCHECK\" --log \u002Ftmp\u002Fbranch.log -- \\\n    bash scripts\u002Fgates.sh run --fresh \u003Cstage>\ntimeout 3000 bash \"$RUNCHECK\" --log \u002Ftmp\u002Fbase.log -- \\\n    bash scripts\u002Fgates.sh run --rev \"$BASE\" --fresh \u003Cstage>\n\ncat \u002Ftmp\u002Fbranch.log.rc \u002Ftmp\u002Fbase.log.rc     # the RUNNER's numbers, not a notice's\n```\n\n`--rev` runs the stage in a scratch checkout of that commit, so both sides are\nbuilt the same way; `--fresh` stops a green marker short-circuiting either run.\n\n**4. Diff the failure LISTS, not the counts.** Equal counts hide a swap.\n\n```bash\nfor f in branch base; do\n    grep -E '^(FAILED|ERROR) ' \u002Ftmp\u002F$f.log \\\n        | sed -E 's\u002F^(FAILED|ERROR) \u002F\u002F; s\u002F - .*\u002F\u002F' | sort -u > \u002Ftmp\u002F$f.ids\ndone\ndiff \u002Ftmp\u002Fbase.ids \u002Ftmp\u002Fbranch.ids     # empty = every red line is pre-existing\n```\n\nLines only in `branch.ids` are yours. Lines in both are not — and a line only in\n`base.ids` is its own finding: the branch FIXED something, which is worth saying\nout loud rather than letting it pass unremarked.\n\n**5. Name the owner of every line the branch did not add.** An open card per\nfailing node id — the card that broke it, or a new one.\n\n```bash\nrack ls --grep \"\u003Ctest file or node id>\" --all-backlogs    # who already owns it\nrack create \"\u003Cstage> red: \u003Ctest>\" --description \"...\"     # when nobody does\n```\n\nA line you cannot assign is not classified yet; say exactly that, rather than\nrounding it to \"pre-existing\".\n\n**6. Report the classification. Do not act on it alone.** One line the supervisor\ncan act on — counts, owners, and what is unassigned:\n\n```bash\nrack transition \u003CID> --log \"e2e \u003Cstage>: N red, M mine (fixed), K owned by \u003Ccards>, J unassigned\"\n```\n\nThe decision to proceed on someone else's red is the supervisor's — and the flag\nthat encodes it comes from the launching environment, never from your command\nline (`safety-guard` refuses the prefix).\n\n## Completion\n\n- Every red line is either fixed, assigned to a card, or explicitly named as\n  unassigned — no line is left as \"probably pre-existing\".\n- Every green claim carries the runner's own exit code over the unnarrowed run,\n  plus the log path.\n- Validation — the false green: RED runs only the files the card touched, finds\n  them passing, and reports the tier green while the tier is red. GREEN runs the\n  stage the gate runs, takes a same-venv baseline, diffs the lists, and reports\n  \"N failures, M mine, K owned by card X\" — a sentence the subset run cannot\n  produce.\n\n## Anti-Patterns\n\n- **Narrowing the run until it is green.** The subset that passes is not the\n  gate. This is the failure mode the skill exists for: a 32-minute tier once\n  \"passed\" in 98 seconds this way.\n- **\"Probably pre-existing.\"** A guess wearing a verdict's clothes. Steps 3–4\n  are cheap; skipping them is what makes the guess load-bearing.\n- **Reading the exit code of a wrapper.** A pipeline reports its last stage and a\n  background notice reports the whole command; both have announced a red tier as\n  `0`. Take the number from the runner's own artefact.\n- **`quarantine` for a broken test.** That marker means *flaky*, and it is\n  subtracted from the tier everywhere including CI. Tagging a broken cohort with\n  it silently redefines the marker and drops the floor for everyone.\n- **Asking for the override instead of the classification.** The flag answers\n  \"may I proceed\"; it was never the answer to \"whose failure is this\".\n","# red-attribution\n\nA red stage asks two questions and the gate only prints one. \"How do I fix this\"\nis second. **Whose failure is this** is first, and answering it wrong is how a\ncard spends its day on someone else's breakage — or reports green by shrinking\nwhat it ran.\n\n## When to Use\n\n- A gate stage is red and the change did not touch what it exercises.\n- The push road's `master-ci` notice reports a red master, or a whole tier is\n  red on a long-lived branch.\n- Before writing \"green\" anywhere: the claim needs the runner's own number over\n  the run the gate would have done, not a subset.\n\n## Procedure\n\n**1. Re-check the base before blaming the diff.** The cheapest cause of a red\ntier on a branch is a stale base, not the change. One card's 13 failures went to\n1 this way — spend this step before the expensive ones.\n\n```bash\ngit rev-list --count HEAD..master     # 0 = current; anything else, merge first\ngit merge master --no-edit\n```\n\n**2. Rule out the local venv.** Mass failures that die partway through are more\noften a broken interpreter than a broken master, and a venv fault looks exactly\nlike foreign redness.\n\n```bash\n.venv\u002Fbin\u002Fpython -c 'import ai_hats, sys; print(ai_hats.__file__, sys.executable)'\n```\n\nThe path must sit inside THIS worktree. A `.venv` pointing at another checkout is\nthe fault itself — `quality-gate` prints the provisioning command when it sees one.\n\n**3. Take a baseline through the SAME mechanism.** Run the stage on your base\ncommit the way you ran it on the branch — same command, same markers. A baseline\ntaken another way proves nothing: one measured pair was 57 failures on the branch\nagainst 32 on master with large unique sets *in both directions*, and neither\nnumber meant what it looked like.\n\n```bash\nRUNCHECK=packages\u002Fai-hats-library\u002Fsrc\u002Fai_hats_library\u002Fai-hats-dev\u002Fskills\u002Fquality-gate\u002Fbin\u002Fruncheck.sh\nBASE=$(git merge-base HEAD master)\n\ntimeout 3000 bash \"$RUNCHECK\" --log \u002Ftmp\u002Fbranch.log -- \\\n    bash scripts\u002Fgates.sh run --fresh \u003Cstage>\ntimeout 3000 bash \"$RUNCHECK\" --log \u002Ftmp\u002Fbase.log -- \\\n    bash scripts\u002Fgates.sh run --rev \"$BASE\" --fresh \u003Cstage>\n\ncat \u002Ftmp\u002Fbranch.log.rc \u002Ftmp\u002Fbase.log.rc     # the RUNNER's numbers, not a notice's\n```\n\n`--rev` runs the stage in a scratch checkout of that commit, so both sides are\nbuilt the same way; `--fresh` stops a green marker short-circuiting either run.\n\n**4. Diff the failure LISTS, not the counts.** Equal counts hide a swap.\n\n```bash\nfor f in branch base; do\n    grep -E '^(FAILED|ERROR) ' \u002Ftmp\u002F$f.log \\\n        | sed -E 's\u002F^(FAILED|ERROR) \u002F\u002F; s\u002F - .*\u002F\u002F' | sort -u > \u002Ftmp\u002F$f.ids\ndone\ndiff \u002Ftmp\u002Fbase.ids \u002Ftmp\u002Fbranch.ids     # empty = every red line is pre-existing\n```\n\nLines only in `branch.ids` are yours. Lines in both are not — and a line only in\n`base.ids` is its own finding: the branch FIXED something, which is worth saying\nout loud rather than letting it pass unremarked.\n\n**5. Name the owner of every line the branch did not add.** An open card per\nfailing node id — the card that broke it, or a new one.\n\n```bash\nrack ls --grep \"\u003Ctest file or node id>\" --all-backlogs    # who already owns it\nrack create \"\u003Cstage> red: \u003Ctest>\" --description \"...\"     # when nobody does\n```\n\nA line you cannot assign is not classified yet; say exactly that, rather than\nrounding it to \"pre-existing\".\n\n**6. Report the classification. Do not act on it alone.** One line the supervisor\ncan act on — counts, owners, and what is unassigned:\n\n```bash\nrack transition \u003CID> --log \"e2e \u003Cstage>: N red, M mine (fixed), K owned by \u003Ccards>, J unassigned\"\n```\n\nThe decision to proceed on someone else's red is the supervisor's — and the flag\nthat encodes it comes from the launching environment, never from your command\nline (`safety-guard` refuses the prefix).\n\n## Completion\n\n- Every red line is either fixed, assigned to a card, or explicitly named as\n  unassigned — no line is left as \"probably pre-existing\".\n- Every green claim carries the runner's own exit code over the unnarrowed run,\n  plus the log path.\n- Validation — the false green: RED runs only the files the card touched, finds\n  them passing, and reports the tier green while the tier is red. GREEN runs the\n  stage the gate runs, takes a same-venv baseline, diffs the lists, and reports\n  \"N failures, M mine, K owned by card X\" — a sentence the subset run cannot\n  produce.\n\n## Anti-Patterns\n\n- **Narrowing the run until it is green.** The subset that passes is not the\n  gate. This is the failure mode the skill exists for: a 32-minute tier once\n  \"passed\" in 98 seconds this way.\n- **\"Probably pre-existing.\"** A guess wearing a verdict's clothes. Steps 3–4\n  are cheap; skipping them is what makes the guess load-bearing.\n- **Reading the exit code of a wrapper.** A pipeline reports its last stage and a\n  background notice reports the whole command; both have announced a red tier as\n  `0`. Take the number from the runner's own artefact.\n- **`quarantine` for a broken test.** That marker means *flaky*, and it is\n  subtracted from the tier everywhere including CI. Tagging a broken cohort with\n  it silently redefines the marker and drops the floor for everyone.\n- **Asking for the override instead of the classification.** The flag answers\n  \"may I proceed\"; it was never the answer to \"whose failure is this\".\n",{"name":5,"ai_hats":43,"license":15,"description":7},{"type":44,"schema_version":45},"skill",1,"f922a7f627276366873d546942d9ad899a86f71a","packages\u002Fai-hats-library\u002Fsrc\u002Fai_hats_library\u002Fexperimental\u002Fai-hats-dev\u002Fskills\u002Fred-attribution","https:\u002F\u002Fgithub.com\u002Fmuratovv\u002Fai-hats","https:\u002F\u002Fgithub.com\u002Fmuratovv","2026-11-05 20:59:10",{"source":8,"skillName":5,"commands":52,"prompt":62,"zipAvailable":63},[53,56,59],{"tool":54,"command":55},"npx","npx skills add muratovv\u002Fai-hats --skill red-attribution",{"tool":57,"command":58},"bunx","bunx skills add muratovv\u002Fai-hats --skill red-attribution",{"tool":60,"command":61},"pnpm","pnpm dlx skills add muratovv\u002Fai-hats --skill red-attribution","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmuratovv\u002Fai-hats\u002Fblob\u002Fmaster\u002Fpackages\u002Fai-hats-library\u002Fsrc\u002Fai_hats_library\u002Fexperimental\u002Fai-hats-dev\u002Fskills\u002Fred-attribution\u002FSKILL.md",true,[],[66,92,115,138,162,175],{"skillNo":67,"name":68,"nameZh":6,"description":69,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":70,"categories":71,"keywords":72,"publishedAt":38},"01M6PVFB1SM738R2SRSRSF7CY6","tool-evaluation-protocol","Time-bounded protocol for evaluating new tools, libraries, or methodologies before adoption. Use when evaluating a candidate dependency for the project, researching a methodology (e.g. ML\u002FLLM frameworks, testing approaches), or following up on a hype-driven recommendation.","https:\u002F\u002Fgithub.com\u002Fmuratovv\u002Fai-hats\u002Fblob\u002Fmaster\u002Fpackages\u002Fai-hats-library\u002Fsrc\u002Fai_hats_library\u002Fexperimental\u002Fusage\u002Fskills\u002Ftool-evaluation-protocol\u002FSKILL.md",[],[73,74,75,76,77,78,79,80,81,82,31,83,84,85,86,87,88,89,90,91],"protocol","Evaluation","tool","tool evaluation protocol","testing","ml","libraries","adoption","methodology","Tools","dependency","up","frameworks","time","project","recommendation","for","bounded","candidate",{"skillNo":93,"name":94,"nameZh":6,"description":95,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":96,"categories":97,"keywords":98,"publishedAt":38},"01M6PVF7HATBEX1G7N50E2QT57","systematic-debugging","4-phase bug-fix protocol (evidence, pattern, hypothesis, verify). Use when investigating any error, failure, or unexpected behavior, handling bug reports from users or monitoring, or diagnosing test failures with non-obvious causes.","https:\u002F\u002Fgithub.com\u002Fmuratovv\u002Fai-hats\u002Fblob\u002Fmaster\u002Fpackages\u002Fai-hats-library\u002Fsrc\u002Fai_hats_library\u002Fexperimental\u002Fusage\u002Fskills\u002Fsystematic-debugging\u002FSKILL.md",[],[99,100,101,30,73,102,103,104,105,106,31,107,108,22,109,110,111,112,113,114],"systematic debugging","debugging","systematic","monitoring","hypothesis","verify","behavior","fix","evidence","bug","pattern","users","error","with","bug-fix","phase",{"skillNo":116,"name":117,"nameZh":6,"description":118,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":119,"categories":120,"keywords":126,"publishedAt":38},"01M6PVF3MTQN3RPF73AN34856J","skill-template","Canonical template and validation guide for ai-hats skills. Use when creating a new skill, reviewing an existing one for structural compliance, or deciding which pattern fits a new behavior.","https:\u002F\u002Fgithub.com\u002Fmuratovv\u002Fai-hats\u002Fblob\u002Fmaster\u002Fpackages\u002Fai-hats-library\u002Fsrc\u002Fai_hats_library\u002Fexperimental\u002Fusage\u002Fskills\u002Fskill-template\u002FSKILL.md",[121],{"categoryNo":122,"categoryName":123,"taxonomyType":124,"taxonomyTypeDesc":125},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[127,128,129,130,131,105,132,31,133,109,134,135,136,89,137],"template","skill template","validation","compliance","hats","guide","new skill","structural","canonical","which","Existing",{"skillNo":139,"name":140,"nameZh":6,"description":141,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":142,"categories":143,"keywords":145,"publishedAt":38},"01M6PVF06SCV28QARM5MQPANC9","skill-optimization","Audit and refactor library components to eliminate redundancy and staleness. Use during periodic library maintenance, after adding multiple new skills or rules, when a role's token budget is too high, or after retrospectives identify component issues.","https:\u002F\u002Fgithub.com\u002Fmuratovv\u002Fai-hats\u002Fblob\u002Fmaster\u002Fpackages\u002Fai-hats-library\u002Fsrc\u002Fai_hats_library\u002Fexperimental\u002Fusage\u002Fskills\u002Fskill-optimization\u002FSKILL.md",[144],{"categoryNo":122,"categoryName":123,"taxonomyType":124,"taxonomyTypeDesc":125},[146,147,148,149,150,151,152,153,154,155,31,156,157,158,159,160,161],"Optimization","skill optimization","components","component","issues","library","audit","refactor","Budget","Rules","periodic","maintenance","token","token budget","role","high",{"skillNo":163,"name":164,"nameZh":6,"description":165,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":166,"categories":167,"keywords":168,"publishedAt":38},"01M6PVEXM9717016T9MW82HDCT","silent-fallback-gate","PreToolUse hook — refuses an Edit or Write that adds an inert broad except. Use when a Python edit was blocked for a silent fallback.","https:\u002F\u002Fgithub.com\u002Fmuratovv\u002Fai-hats\u002Fblob\u002Fmaster\u002Fpackages\u002Fai-hats-library\u002Fsrc\u002Fai_hats_library\u002Fexperimental\u002Fusage\u002Fskills\u002Fsilent-fallback-gate\u002FSKILL.md",[],[28,169,170,171,172,173,31,174,89],"fallback","silent fallback gate","python","write","edit","hook",{"skillNo":176,"name":177,"nameZh":6,"description":178,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":179,"categories":180,"keywords":182,"publishedAt":38},"01M6PVESM49C5NT7SB7N3F76VS","retro-to-framework","Convert an observation about agent behavior — from a retrospective or from a single incident — into a framework-level change (hook, rule, skill, skill update). Use after a retrospective identifies problems that are not project-specific, after an incident where an agent misapplied a component it had read, when CLAUDE.md band-aids accumulate (more than 3 per-project rules that could be generic), or when the same problem recurs across multiple projects.","https:\u002F\u002Fgithub.com\u002Fmuratovv\u002Fai-hats\u002Fblob\u002Fmaster\u002Fpackages\u002Fai-hats-library\u002Fsrc\u002Fai_hats_library\u002Fexperimental\u002Fusage\u002Fskills\u002Fretro-to-framework\u002FSKILL.md",[181],{"categoryNo":122,"categoryName":123,"taxonomyType":124,"taxonomyTypeDesc":125},[183,184,185,37,149,186,187,188,155,105,31,189,190,87,191,192,193,194,195,196],"framework","retro","retro to framework","retrospective","projects","convert","incident","across","problem","about","more","skill update","single","generic"]