[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M719MF2CF5H783AHJ5D3D50K":3,"skill-same:01M719MF2CF5H783AHJ5D3D50K":45},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":14,"categories":15,"keywords":16,"publishedAt":20,"linkOnly":21,"markdownContent":22,"markdownBody":22,"frontMatter":23,"refName":24,"commitSha":25,"skillDirectory":26,"forksCount":27,"repositoryHtmlUrl":28,"repositoryHomepageUrl":6,"ownerHtmlUrl":29,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":30,"install":31,"resources":44},"01M719MF2CF5H783AHJ5D3D50K","retro-enforcement",null,"DeDuva\u002Fsquad","DeDuva","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F8153108?v=4","01M719BQB25861D0TKS3RVHMN2","01M719BQBSWR380PSYDD5M9YD4",1,"MIT","https:\u002F\u002Fgithub.com\u002FDeDuva\u002Fsquad\u002Fblob\u002Fdev\u002Fpackages\u002Fsquad-sdk\u002Ftemplates\u002Fskills\u002Fretro-enforcement\u002FSKILL.md",[],[17,18,19],"retro enforcement","retro","enforcement","2026-11-10 10:12:30",false,"# Skill: Retro Enforcement\n\n## Purpose\n\nEnsure retrospectives happen on schedule and that their action items are tracked in GitHub Issues — not markdown checklists.\n\nThis skill addresses a specific, measured failure mode: **0% completion rate on markdown retro action items across 6 consecutive retrospectives**. GitHub Issues have an 85%+ completion rate in the same squad. The format was the problem, not the people.\n\n## Core Function: Test-RetroOverdue\n\n```powershell\nfunction Test-RetroOverdue {\n    param(\n        [string]$LogDir    = \".squad\u002Flog\",\n        [int]$WindowDays   = 7,\n        [string]$Pattern   = \"*retrospective*\"\n    )\n\n    $cutoff = (Get-Date).AddDays(-$WindowDays)\n\n    $retroLogs = Get-ChildItem -Path $LogDir -Filter $Pattern -ErrorAction SilentlyContinue |\n                 Where-Object { $_.LastWriteTime -ge $cutoff }\n\n    return ($retroLogs.Count -eq 0)\n}\n```\n\n### Returns\n- `$true` — No retro log found within the window. **Retro is overdue. Block other work.**\n- `$false` — At least one retro log found within the window. Proceed normally.\n\n### Detection Logic\n\nThe function checks `.squad\u002Flog\u002F` for any file matching `*retrospective*` dated within the last `$WindowDays` days (default: 7). If none is found, the retro is overdue.\n\n**File naming convention:** `.squad\u002Flog\u002F{ISO8601-timestamp}-retrospective.md`\n\nExample: `.squad\u002Flog\u002F2026-03-24T14-45-00Z-retrospective.md`\n\n## Coordinator Integration\n\nCall `Test-RetroOverdue` **at the start of every round**, before building the work queue.\n\n```powershell\n# At round start — before any work queue construction\nif (Test-RetroOverdue -LogDir \".squad\u002Flog\" -WindowDays 7) {\n    Write-Host \"[RETRO] Retrospective overdue. Running before other work.\"\n\n    # Spawn retro facilitator\n    Invoke-RetroSession -Mode \"catch-up\"\n\n    # Wait for retro log to be written\n    # Then resume normal round\n}\n\n# Proceed with normal work queue\n$workQueue = Get-PendingIssues | Sort-Object -Property Priority\n```\n\n### Blocking Semantics\n\nWhen `Test-RetroOverdue` returns `$true`:\n\n1. **Do not start any other work** until the retro completes\n2. **Spawn the facilitator agent** (Scribe or designated) with retro mode\n3. **Wait for the log file** to be written to `.squad\u002Flog\u002F`\n4. **Verify action items** were created as GitHub Issues (not markdown)\n5. **Resume normal round** after retro log confirmed\n\n## Action Item Enforcement\n\nEvery retro action item MUST become a GitHub Issue. The facilitator agent is responsible for this. The coordinator verifies.\n\n### Verification Check\n\n```powershell\nfunction Test-RetroActionItemsCreated {\n    param([string]$RetroLogPath)\n\n    $content = Get-Content $RetroLogPath -Raw\n\n    # Check for Issue references (e.g., #1478, https:\u002F\u002Fgithub.com\u002F...\u002Fissues\u002F1478)\n    $issueRefs = [regex]::Matches($content, '(?:#\\d{3,}|issues\u002F\\d{3,})')\n\n    # Check for unclosed markdown checkboxes (bad pattern)\n    $openCheckboxes = [regex]::Matches($content, '- \\[ \\]')\n\n    if ($openCheckboxes.Count -gt 0) {\n        Write-Warning \"[RETRO] Found $($openCheckboxes.Count) markdown checkboxes — convert to Issues\"\n        return $false\n    }\n\n    return ($issueRefs.Count -gt 0)\n}\n```\n\n### Why Not Markdown Checklists\n\nFrom production data in tamirdresher\u002Ftamresearch1:\n\n| Retro | Action Items Format | Completion |\n|-------|---------------------|------------|\n| 2025-12-05 | Markdown `- [ ]` | 0\u002F4 = **0%** |\n| 2025-12-19 | Markdown `- [ ]` | 0\u002F3 = **0%** |\n| 2026-01-09 | Markdown `- [ ]` | 0\u002F5 = **0%** |\n| 2026-01-23 | Markdown `- [ ]` | 0\u002F4 = **0%** |\n| 2026-02-07 | Markdown `- [ ]` | 0\u002F3 = **0%** |\n| 2026-02-21 | Markdown `- [ ]` | 0\u002F4 = **0%** |\n| 2026-03-24 | GitHub Issues | 4\u002F4 = **100%** (after enforcement) |\n\n**Root cause:** Markdown checklists have no assignee, no notifications, no close event, and no query surface. They are invisible to every workflow that drives completion.\n\n## Cadence Enforcement\n\n### Recommended schedule\n- Weekly squads: window = 7 days\n- Bi-weekly squads: window = 14 days\n\n### Ralph integration example\n\n```powershell\n# ralph-watch.ps1 — round start hook\nfunction Invoke-RoundStart {\n    # 1. Always check retro first\n    if (Test-RetroOverdue -LogDir \"$RepoRoot\u002F.squad\u002Flog\" -WindowDays 7) {\n        Write-Host \"[RALPH] Retro overdue — enforcing before work queue\"\n        Invoke-RetroSession\n        return  # Re-enter round after retro completes\n    }\n\n    # 2. Normal work queue\n    $issues = Get-ReadyIssues\n    foreach ($issue in $issues) {\n        Invoke-WorkItem -Issue $issue\n    }\n}\n```\n\n## Skill Metadata\n\n| Field | Value |\n|-------|-------|\n| **Skill ID** | `retro-enforcement` |\n| **Category** | Ceremonies \u002F Process |\n| **Trigger** | Coordinator round start |\n| **Dependencies** | `.squad\u002Flog\u002F` directory, GitHub Issues API |\n| **Tested in** | tamirdresher\u002Ftamresearch1 (production, March 2026) |\n| **Outcome** | Retro cadence restored; action item completion 0% → 100% |\n",{},"dev","4ffda80d1bb1043d9169688cf161e53097345c72","packages\u002Fsquad-sdk\u002Ftemplates\u002Fskills\u002Fretro-enforcement",0,"https:\u002F\u002Fgithub.com\u002FDeDuva\u002Fsquad","https:\u002F\u002Fgithub.com\u002FDeDuva","2026-11-09 20:24:44",{"source":7,"skillName":5,"commands":32,"prompt":42,"zipAvailable":43},[33,36,39],{"tool":34,"command":35},"npx","npx skills add DeDuva\u002Fsquad --skill retro-enforcement",{"tool":37,"command":38},"bunx","bunx skills add DeDuva\u002Fsquad --skill retro-enforcement",{"tool":40,"command":41},"pnpm","pnpm dlx skills add DeDuva\u002Fsquad --skill retro-enforcement","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FDeDuva\u002Fsquad\u002Fblob\u002Fdev\u002Fpackages\u002Fsquad-sdk\u002Ftemplates\u002Fskills\u002Fretro-enforcement\u002FSKILL.md",true,[],[46,62,70,87,111,126],{"skillNo":47,"name":48,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":49,"categories":50,"keywords":56,"publishedAt":20},"01M719NE6ZPZT80MKVWFDECJZ3","My Skill","https:\u002F\u002Fgithub.com\u002FDeDuva\u002Fsquad\u002Fblob\u002Fdev\u002Ftest-fixtures\u002Fskills-test-abb30454\u002Fmy-skill\u002FSKILL.md",[51],{"categoryNo":52,"categoryName":53,"taxonomyType":54,"taxonomyTypeDesc":55},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[57,58,59,60,61],"my","my skill","testing","vitest","tester",{"skillNo":63,"name":64,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":65,"categories":66,"keywords":67,"publishedAt":20},"01M719NDJAMEWM8D9H355SCNA8","bad-skill","https:\u002F\u002Fgithub.com\u002FDeDuva\u002Fsquad\u002Fblob\u002Fdev\u002Ftest-fixtures\u002Fskills-test-abb30454\u002Fbad-skill\u002FSKILL.md",[],[68,69],"bad skill","bad",{"skillNo":71,"name":72,"nameZh":6,"description":73,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":74,"categories":75,"keywords":76,"publishedAt":20},"01M719NCC1AZ02GHZ1V71YPEV7","squad-conventions","Core conventions and patterns used in the Squad codebase","https:\u002F\u002Fgithub.com\u002FDeDuva\u002Fsquad\u002Fblob\u002Fdev\u002Ftemplates\u002Fskills\u002Fsquad-conventions\u002FSKILL.md",[],[77,78,79,80,81,82,83,84,85,86],"conventions","squad","squad conventions","project-conventions","core","project","manual","high","codebase","patterns",{"skillNo":88,"name":89,"nameZh":6,"description":90,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":91,"categories":92,"keywords":93,"publishedAt":20},"01M719NAYM17B7X8MGP681EHKQ","rework-rate","Measure and interpret PR rework rate — the emerging 5th DORA metric","https:\u002F\u002Fgithub.com\u002FDeDuva\u002Fsquad\u002Fblob\u002Fdev\u002Ftemplates\u002Fskills\u002Frework-rate\u002FSKILL.md",[],[94,95,96,97,84,98,99,100,78,101,102,103,104,83,105,106,107,108,109,110],"rate","rework rate","health","analyze","review efficiency","quality","metric","metrics","efficiency","code quality","pr","prs","when","code","team","code-review","review",{"skillNo":112,"name":113,"nameZh":6,"description":114,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":115,"categories":116,"keywords":117,"publishedAt":20},"01M719NA136PDC3SQ10R4R88TH","nap","Context hygiene — compress, prune, archive .squad\u002F state","https:\u002F\u002Fgithub.com\u002FDeDuva\u002Fsquad\u002Fblob\u002Fdev\u002Ftemplates\u002Fskills\u002Fnap\u002FSKILL.md",[],[113,118,119,120,121,122,123,124,78,125],"prune","state","maintenance","context hygiene","archive","hygiene","compress","context",{"skillNo":127,"name":128,"nameZh":6,"description":129,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":130,"categories":131,"keywords":136,"publishedAt":20},"01M719N7B4PBQPNXW78TEJY4HQ","e2e-template-testing","End-to-end validation of coordinator and agent template changes","https:\u002F\u002Fgithub.com\u002FDeDuva\u002Fsquad\u002Fblob\u002Fdev\u002Ftemplates\u002Fskills\u002Fe2e-template-testing\u002FSKILL.md",[132,135],{"categoryNo":133,"categoryName":134,"taxonomyType":54,"taxonomyTypeDesc":55},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":52,"categoryName":53,"taxonomyType":54,"taxonomyTypeDesc":55},[59,137,138,139,140,141,142,83,143,84,144],"e2e template testing","e2e","template","end","coordinator","development","changes","validation"]