[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M70FSWZ45YPDE3TE8NC83MT3":3,"skill-same:01M70FSWZ45YPDE3TE8NC83MT3":75},{"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":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":47,"commitSha":48,"skillDirectory":49,"forksCount":50,"repositoryHtmlUrl":51,"repositoryHomepageUrl":6,"ownerHtmlUrl":52,"ownerBlogUrl":6,"ownerDescription":53,"updatedAt":54,"install":55,"resources":68},"01M70FSWZ45YPDE3TE8NC83MT3","delivery-gate",null,"Stop hook that blocks Claude from finishing until quality checks pass. Detects rationalization patterns (surface text heuristics), stale learning logs (filesystem mtime), and low disk space. Complements self-audit by mechanically enforcing learning capture habits. Use when Claude should be mechanically blocked from declaring work finished before quality checks and learning capture actually pass.","mdnaimul22\u002Fhuman-skills","mdnaimul22","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F64520358?v=4","01M70FH95MH2H796Q01TYSFZ03","Naimul","01M70FH96798CQR4YHA13F17GA",3,"MIT","https:\u002F\u002Fgithub.com\u002Fmdnaimul22\u002Fhuman-skills\u002Fblob\u002Fmain\u002Fskills\u002Fstorage\u002Faffaan-m_ECC\u002Fdelivery-gate\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"delivery gate","gate","delivery","quality","use","learning","filesystem","learning capture","habits","stop","patterns","hook","audit","work","self","text","logs","disk","when","heuristics","2026-11-10 10:12:30",false,"---\nname: delivery-gate\ndescription: Stop hook that blocks Claude from finishing until quality checks pass. Detects rationalization patterns (surface text heuristics), stale learning logs (filesystem mtime), and low disk space. Complements self-audit by mechanically enforcing learning capture habits. Use when Claude should be mechanically blocked from declaring work finished before quality checks and learning capture actually pass.\nmetadata:\n  version: 1.1.1\n  origin: ECC\n---\n\n# Delivery Gate — Mechanical Quality Gate for Claude Code\n\nA **Stop hook** that checks three things before Claude can finish a session, using only **deterministic checks** — file modification timestamps, disk usage, and regex patterns on the transcript text. No AI inference.\n\nThis is distinct from reasoning gates (like `self-audit`): delivery-gate checks machine-verifiable facts; self-audit checks output quality across four reasoning dimensions. Together they form defense in depth:\n- **delivery-gate**: \"Was the learning library touched today? Is disk space safe?\"\n- **self-audit**: \"Is the file content correct, complete, and honest?\"\n\nThis is the same pattern as CI pipeline gates — automated, deterministic checks that verify machine-readable facts rather than trusting self-reported status.\n\n## What It Checks\n\n| Check | Mechanism | On Hit |\n|-------|-----------|--------|\n| Rationalization patterns | Regex on transcript tail | **Warning only** (never blocks) |\n| Stale learning libraries | mtime on 5 configurable paths | Warning if some stale; **Block** on a complex task if >=3 stale OR growth-log stale |\n| Disk space \u003C 50GB | `shutil.disk_usage` | Reminder |\n| Disk space \u003C 30GB | `shutil.disk_usage` | Warning |\n| Disk space \u003C 15GB | `shutil.disk_usage` | **Block** (exit 2), on every Stop |\n\nRationalization detection warns about patterns like \"skip tests for now\" and \"pre-existing bug\" — surface signals that thinking may have been cut short. It never blocks on its own, because regex heuristics can false-positive. The blocking conditions are: disk critical (any session), or, on a complex task (>=3 Edit\u002FWrite calls), `>=3 learning libs stale` OR `growth-log` specifically stale. If the project memory directory does not exist, the learning-library checks are skipped: the hook only warns that it cannot verify learning capture, and a complex task is not blocked (the disk checks still apply).\n\nThe hook blocks a given Stop at most once. When Claude Code re-runs it with `stop_hook_active: true` (Claude already continued once because of this hook), it exits 0, so a condition the agent cannot fix (such as low disk space) cannot trap the session in an endless loop.\n\n## Why\n\nClaude Code's built-in checks cover code quality (build → type → lint → test). But there's a different failure mode: the agent produces working code while the **session hygiene was neglected** — learning not captured, rationalized shortcuts, disk running out silently.\n\nOver many sessions of \"ship and forget,\" the human hasn't grown. This hook enforces the habit: complex task → must touch learning libraries.\n\n## Install\n\nFrom the ECC repository root:\n\n```bash\nmkdir -p ~\u002F.claude\u002Fscripts\ncp skills\u002Fdelivery-gate\u002Fhooks\u002Fquality-gate.py ~\u002F.claude\u002Fscripts\u002F\n```\n\nAdd to `~\u002F.claude\u002Fsettings.json`:\n```json\n{\n  \"hooks\": {\n    \"Stop\": [{\n      \"hooks\": [{\n        \"type\": \"command\",\n        \"command\": \"python3 ~\u002F.claude\u002Fscripts\u002Fquality-gate.py\",\n        \"timeout\": 5\n      }]\n    }]\n  }\n}\n```\n\n## Learning Libraries\n\nCreate these files in your project's memory directory (`~\u002F.claude\u002Fprojects\u002F\u003Cencoded-project-path>\u002Fmemory\u002F`, where every non-alphanumeric character of the project path becomes `-`). The hook checks which of them were updated today:\n\n```\nmemory\u002F\n├── growth-log\u002F          # Daily learning entries (directory)\n├── decisions\u002Flog.md     # Decision log\n├── output-index.md      # Index of session outputs\n├── ratings-tracker.md   # Skill ratings over time\n└── tooling_capabilities.md  # Known tools inventory\n```\n\nCustomize the `LIBS` dict to match your own file structure.\n\n## Configuration\n\nEdit `quality-gate.py`:\n\n| Variable | Default | Purpose |\n|----------|---------|---------|\n| `RATIONALIZE` | 4 patterns | Regex patterns for rationalization detection |\n| `LIBS` | 5 libraries | Files\u002Fdirs to check for today's updates |\n| `COMPLEX_THRESHOLD` | 3 | Edit\u002FWrite calls to classify as complex |\n| `DISK_REMIND_GB` | 50 | Remind below this |\n| `DISK_WARN_GB` | 30 | Warn below this |\n| `DISK_CRIT_GB` | 15 | Block below this |\n\n## Examples\n\n**Simple session — allowed:**\n```\nedit_count=1 (\u003C 3, not complex) → exit 0\n```\n\n**Complex task, learning captured — allowed:**\n```\nedit_count=5 (complex) → checks LIBS → growth-log + 2 others updated today (2 stale) → exit 0\n```\n\n**Complex task, no learning — BLOCKED:**\n```\nedit_count=4 (complex) → checks LIBS → all 5 stale → exit 2\nstderr: \"Blocked: complex task but >=3 learning libs stale.\"\n```\n\n**Low disk space — BLOCKED:**\n```\ndisk_free=12GB \u003C 15GB critical → exit 2\nstderr: \"Blocked: disk space at 12GB (\u003C15GB). Free space before continuing.\"\n```\n\n## Limitations\n\nThe hook enforces the **habit** of touching learning libraries, not the **quality** of what was recorded. On a complex task it passes only when `growth-log` was updated today and at most 2 libraries are stale; updating `output-index.md` alone still blocks. Without a project memory directory there is nothing to check, so it only warns. This is by design: mechanical gates check machine-verifiable facts. For content quality verification, pair with `self-audit`.\n\n## Compatibility\n\n- Python 3.8+ (uses `from __future__ import annotations`)\n- Cross-platform: Windows, macOS, Linux\n- Zero dependencies beyond stdlib\n\n## Quality\n\nThis code went through 4 rounds of automated code review (CodeRabbit + Greptile) with 9 real bugs found and fixed.\n\n## See Also\n\n- `self-audit` — Reasoning quality gate (completeness\u002Fconsistency\u002Fgroundedness\u002Fhonesty)\n- `verification-loop` — Code quality checks (build\u002Ftype\u002Flint\u002Ftest)\n- `gateguard` — PreToolUse safety gate\n","# Delivery Gate — Mechanical Quality Gate for Claude Code\n\nA **Stop hook** that checks three things before Claude can finish a session, using only **deterministic checks** — file modification timestamps, disk usage, and regex patterns on the transcript text. No AI inference.\n\nThis is distinct from reasoning gates (like `self-audit`): delivery-gate checks machine-verifiable facts; self-audit checks output quality across four reasoning dimensions. Together they form defense in depth:\n- **delivery-gate**: \"Was the learning library touched today? Is disk space safe?\"\n- **self-audit**: \"Is the file content correct, complete, and honest?\"\n\nThis is the same pattern as CI pipeline gates — automated, deterministic checks that verify machine-readable facts rather than trusting self-reported status.\n\n## What It Checks\n\n| Check | Mechanism | On Hit |\n|-------|-----------|--------|\n| Rationalization patterns | Regex on transcript tail | **Warning only** (never blocks) |\n| Stale learning libraries | mtime on 5 configurable paths | Warning if some stale; **Block** on a complex task if >=3 stale OR growth-log stale |\n| Disk space \u003C 50GB | `shutil.disk_usage` | Reminder |\n| Disk space \u003C 30GB | `shutil.disk_usage` | Warning |\n| Disk space \u003C 15GB | `shutil.disk_usage` | **Block** (exit 2), on every Stop |\n\nRationalization detection warns about patterns like \"skip tests for now\" and \"pre-existing bug\" — surface signals that thinking may have been cut short. It never blocks on its own, because regex heuristics can false-positive. The blocking conditions are: disk critical (any session), or, on a complex task (>=3 Edit\u002FWrite calls), `>=3 learning libs stale` OR `growth-log` specifically stale. If the project memory directory does not exist, the learning-library checks are skipped: the hook only warns that it cannot verify learning capture, and a complex task is not blocked (the disk checks still apply).\n\nThe hook blocks a given Stop at most once. When Claude Code re-runs it with `stop_hook_active: true` (Claude already continued once because of this hook), it exits 0, so a condition the agent cannot fix (such as low disk space) cannot trap the session in an endless loop.\n\n## Why\n\nClaude Code's built-in checks cover code quality (build → type → lint → test). But there's a different failure mode: the agent produces working code while the **session hygiene was neglected** — learning not captured, rationalized shortcuts, disk running out silently.\n\nOver many sessions of \"ship and forget,\" the human hasn't grown. This hook enforces the habit: complex task → must touch learning libraries.\n\n## Install\n\nFrom the ECC repository root:\n\n```bash\nmkdir -p ~\u002F.claude\u002Fscripts\ncp skills\u002Fdelivery-gate\u002Fhooks\u002Fquality-gate.py ~\u002F.claude\u002Fscripts\u002F\n```\n\nAdd to `~\u002F.claude\u002Fsettings.json`:\n```json\n{\n  \"hooks\": {\n    \"Stop\": [{\n      \"hooks\": [{\n        \"type\": \"command\",\n        \"command\": \"python3 ~\u002F.claude\u002Fscripts\u002Fquality-gate.py\",\n        \"timeout\": 5\n      }]\n    }]\n  }\n}\n```\n\n## Learning Libraries\n\nCreate these files in your project's memory directory (`~\u002F.claude\u002Fprojects\u002F\u003Cencoded-project-path>\u002Fmemory\u002F`, where every non-alphanumeric character of the project path becomes `-`). The hook checks which of them were updated today:\n\n```\nmemory\u002F\n├── growth-log\u002F          # Daily learning entries (directory)\n├── decisions\u002Flog.md     # Decision log\n├── output-index.md      # Index of session outputs\n├── ratings-tracker.md   # Skill ratings over time\n└── tooling_capabilities.md  # Known tools inventory\n```\n\nCustomize the `LIBS` dict to match your own file structure.\n\n## Configuration\n\nEdit `quality-gate.py`:\n\n| Variable | Default | Purpose |\n|----------|---------|---------|\n| `RATIONALIZE` | 4 patterns | Regex patterns for rationalization detection |\n| `LIBS` | 5 libraries | Files\u002Fdirs to check for today's updates |\n| `COMPLEX_THRESHOLD` | 3 | Edit\u002FWrite calls to classify as complex |\n| `DISK_REMIND_GB` | 50 | Remind below this |\n| `DISK_WARN_GB` | 30 | Warn below this |\n| `DISK_CRIT_GB` | 15 | Block below this |\n\n## Examples\n\n**Simple session — allowed:**\n```\nedit_count=1 (\u003C 3, not complex) → exit 0\n```\n\n**Complex task, learning captured — allowed:**\n```\nedit_count=5 (complex) → checks LIBS → growth-log + 2 others updated today (2 stale) → exit 0\n```\n\n**Complex task, no learning — BLOCKED:**\n```\nedit_count=4 (complex) → checks LIBS → all 5 stale → exit 2\nstderr: \"Blocked: complex task but >=3 learning libs stale.\"\n```\n\n**Low disk space — BLOCKED:**\n```\ndisk_free=12GB \u003C 15GB critical → exit 2\nstderr: \"Blocked: disk space at 12GB (\u003C15GB). Free space before continuing.\"\n```\n\n## Limitations\n\nThe hook enforces the **habit** of touching learning libraries, not the **quality** of what was recorded. On a complex task it passes only when `growth-log` was updated today and at most 2 libraries are stale; updating `output-index.md` alone still blocks. Without a project memory directory there is nothing to check, so it only warns. This is by design: mechanical gates check machine-verifiable facts. For content quality verification, pair with `self-audit`.\n\n## Compatibility\n\n- Python 3.8+ (uses `from __future__ import annotations`)\n- Cross-platform: Windows, macOS, Linux\n- Zero dependencies beyond stdlib\n\n## Quality\n\nThis code went through 4 rounds of automated code review (CodeRabbit + Greptile) with 9 real bugs found and fixed.\n\n## See Also\n\n- `self-audit` — Reasoning quality gate (completeness\u002Fconsistency\u002Fgroundedness\u002Fhonesty)\n- `verification-loop` — Code quality checks (build\u002Ftype\u002Flint\u002Ftest)\n- `gateguard` — PreToolUse safety gate\n",{"name":5,"metadata":44,"description":7},{"origin":45,"version":46},"ECC","1.1.1","main","7092b664627bf326748a6fcbf27fee6a34c4da1d","skills\u002Fstorage\u002Faffaan-m_ECC\u002Fdelivery-gate",0,"https:\u002F\u002Fgithub.com\u002Fmdnaimul22\u002Fhuman-skills","https:\u002F\u002Fgithub.com\u002Fmdnaimul22","AI Agents Workflows Automation | Specializing in Python, FastAPI, MCP Agents & Custom ERP.","2026-11-11 21:16:57",{"source":8,"skillName":5,"commands":56,"prompt":66,"zipAvailable":67},[57,60,63],{"tool":58,"command":59},"npx","npx skills add mdnaimul22\u002Fhuman-skills --skill delivery-gate",{"tool":61,"command":62},"bunx","bunx skills add mdnaimul22\u002Fhuman-skills --skill delivery-gate",{"tool":64,"command":65},"pnpm","pnpm dlx skills add mdnaimul22\u002Fhuman-skills --skill delivery-gate","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmdnaimul22\u002Fhuman-skills\u002Fblob\u002Fmain\u002Fskills\u002Fstorage\u002Faffaan-m_ECC\u002Fdelivery-gate\u002FSKILL.md",true,[69],{"path":70,"resourceType":71,"resourceTypeDesc":72,"sizeBytes":73,"sourceHtmlUrl":74},"hooks\u002Fquality-gate.py","SCRIPT","脚本",8110,"https:\u002F\u002Fgithub.com\u002Fmdnaimul22\u002Fhuman-skills\u002Fblob\u002Fmain\u002Fskills\u002Fstorage\u002Faffaan-m_ECC\u002Fdelivery-gate\u002Fhooks\u002Fquality-gate.py",[76,84,113,135,154,169],{"skillNo":77,"name":78,"nameZh":6,"description":79,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":80,"categories":81,"keywords":82,"publishedAt":83},"01M72JT3YP1SQHD0MANGDXQ4RT","higgsfield-websites","Build, edit, and deploy full-stack websites, apps and games via the Higgsfield CLI (`higgsfield website …`). Each is a React 19 + TanStack Start SSR app in one Cloudflare Worker (D1\u002FR2\u002FKV\u002FDO\u002FContainers). THREE product types, picked via `--type` on create: `website` (standalone, no Higgsfield integration — references\u002Fwebsite-flow.md), `app` (Sign in with Higgsfield + fnf SDK, Quanta — references\u002Fapp-flow.md), `game` (realtime multiplayer rooms — references\u002Fgame-flow.md). Routes to the right flow; each carries its own rules and deploy\u002Fpublish gates.\nUse when: \"build me a website\", \"make a landing page\", \"create a web app\", \"build a SaaS dashboard \u002F portfolio\", \"make me a game\", \"deploy this site\", \"publish\". Also owns GAME ART: \"make a spritesheet\", \"tileable texture\", \"animate a 3D character\", game music\u002FSFX — see the game-* references.\nNOT for: single image\u002Fvideo\u002Faudio generation (higgsfield-generate), product photos (higgsfield-product-photoshoot), marketplace cards (higgsfield-marketplace-cards).","https:\u002F\u002Fgithub.com\u002Fmdnaimul22\u002Fhuman-skills\u002Fblob\u002Fmain\u002Fskills\u002Fstorage\u002Fhiggsfield-ai_skills\u002Fhiggsfield-websites\u002FSKILL.md",[],[],"2026-11-10 22:39:42",{"skillNo":85,"name":86,"nameZh":6,"description":87,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":88,"categories":89,"keywords":106,"publishedAt":39},"01M70JPK8HAXXA85P7Q8NKZZYG","writing-skills","Use when creating new skills, editing existing skills, or verifying skills work before deployment","https:\u002F\u002Fgithub.com\u002Fmdnaimul22\u002Fhuman-skills\u002Fblob\u002Fmain\u002Fskills\u002Fstorage\u002Fobra_superpowers\u002Fwriting-skills\u002FSKILL.md",[90,95,100,103],{"categoryNo":91,"categoryName":92,"taxonomyType":93,"taxonomyTypeDesc":94},"01JBSEEDCAT000000000000018","写作与文案","SCENARIO","使用场景",{"categoryNo":96,"categoryName":97,"taxonomyType":98,"taxonomyTypeDesc":99},"01JBSEEDCAT000000000000036","内容创作者","PROFESSION","适用职业",{"categoryNo":101,"categoryName":102,"taxonomyType":93,"taxonomyTypeDesc":94},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":104,"categoryName":105,"taxonomyType":93,"taxonomyTypeDesc":94},"01JBSEEDCAT000000000000008","测试与质量",[107,108,109,110,23,111,112,37,32],"writing","writing skills","editing","deployment","Existing","new",{"skillNo":114,"name":115,"nameZh":6,"description":116,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":117,"categories":118,"keywords":124,"publishedAt":39},"01M70JP4PHBH1CQVVDWZ94W159","writing-plans","Use when you have a spec or requirements for a multi-step task, before touching code","https:\u002F\u002Fgithub.com\u002Fmdnaimul22\u002Fhuman-skills\u002Fblob\u002Fmain\u002Fskills\u002Fstorage\u002Fobra_superpowers\u002Fwriting-plans\u002FSKILL.md",[119,120,121],{"categoryNo":91,"categoryName":92,"taxonomyType":93,"taxonomyTypeDesc":94},{"categoryNo":96,"categoryName":97,"taxonomyType":98,"taxonomyTypeDesc":99},{"categoryNo":122,"categoryName":123,"taxonomyType":98,"taxonomyTypeDesc":99},"01JBSEEDCAT000000000000030","开发工程师",[107,125,126,127,37,128,129,23,130,131,132,133,134],"writing plans","plans","you","code","for","requirements","task","multi","spec","multi-step task",{"skillNo":136,"name":137,"nameZh":6,"description":138,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":139,"categories":140,"keywords":141,"publishedAt":39},"01M70JNTYVGXFZT8PASZ844TH8","verification-before-completion","Use when about to claim work is complete, fixed, or passing, before committing or creating PRs - requires running verification commands and confirming output before making any success claims; evidence before assertions always","https:\u002F\u002Fgithub.com\u002Fmdnaimul22\u002Fhuman-skills\u002Fblob\u002Fmain\u002Fskills\u002Fstorage\u002Fobra_superpowers\u002Fverification-before-completion\u002FSKILL.md",[],[142,143,144,145,146,147,23,148,149,150,37,151,32,152,153],"verification","verification before completion","complete","about","output","assertions","prs","evidence","claim","claims","commands","running",{"skillNo":155,"name":156,"nameZh":6,"description":157,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":158,"categories":159,"keywords":161,"publishedAt":39},"01M70JNGVSQDESWN0Q5BPJ875V","using-superpowers","Use when starting any conversation - establishes how to find and use skills, requiring skill invocation before ANY response including clarifying questions","https:\u002F\u002Fgithub.com\u002Fmdnaimul22\u002Fhuman-skills\u002Fblob\u002Fmain\u002Fskills\u002Fstorage\u002Fobra_superpowers\u002Fusing-superpowers\u002FSKILL.md",[160],{"categoryNo":101,"categoryName":102,"taxonomyType":93,"taxonomyTypeDesc":94},[162,163,164,165,23,37,166,167,168],"using superpowers","superpowers","conversation","how to","how","find","questions",{"skillNo":170,"name":171,"nameZh":6,"description":172,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":173,"categories":174,"keywords":175,"publishedAt":39},"01M70JN57CE588NPYPYTWH1DWG","using-git-worktrees","Use when starting feature work that needs isolation from current workspace or before executing implementation plans - ensures an isolated workspace exists via native tools or git worktree fallback","https:\u002F\u002Fgithub.com\u002Fmdnaimul22\u002Fhuman-skills\u002Fblob\u002Fmain\u002Fskills\u002Fstorage\u002Fobra_superpowers\u002Fusing-git-worktrees\u002FSKILL.md",[],[176,177,178,179,180,181,37,32,182,183,184,185,186,187,188,126,23,189,190],"using git worktrees","Using git","git","worktrees","git worktrees","implementation","git worktree","worktree","native","Tools","isolation","fallback","feature","via","workspace"]