[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6DRWJ3KV02MBH62FYAXRE61":3,"skill-same:01M6DRWJ3KV02MBH62FYAXRE61":42},{"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":17,"linkOnly":18,"markdownContent":19,"markdownBody":19,"frontMatter":20,"refName":21,"commitSha":22,"skillDirectory":23,"forksCount":24,"repositoryHtmlUrl":25,"repositoryHomepageUrl":6,"ownerHtmlUrl":26,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":27,"install":28,"resources":41},"01M6DRWJ3KV02MBH62FYAXRE61","healthcheck",null,"AntifragileTech\u002Fantifragile-claude-code","AntifragileTech","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F174357194?v=4","01M6DQCYMK4CDSQQAN0ZC72NTV","01M6DQCYS9YPW1WKMQ5TJMPQ43",9,"MIT","https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fdevops\u002Fhealthcheck\u002FSKILL.md",[],[5],"2026-11-10 10:12:30",false,"# Production Health Check\n\nRun a comprehensive health check on the production server:\n\n1. SSH into server, check all Docker containers are running\n2. Verify all public URLs return 200 (marketing, web, admin, API)\n3. Check SSL cert expiry dates (warn if \u003C30 days)\n4. Query Postgres: check table row counts, recent errors (use sent_at for email_logs, started_at for incidents)\n5. Check Redis connectivity and BullMQ queue status\n6. Check disk usage, memory, CPU load\n7. Check Docker image disk usage and reclaimable space\n8. Summarize findings in a table with status icons\n\n## CRITICAL RULES\n- Run ALL checks from INSIDE containers using `docker exec`, NOT from localhost\n- For database queries, ALWAYS check column names first with `\\d table_name` before writing any SELECT queries\n- Known schema gotchas: `email_logs` uses `sent_at` not `created_at`, `incidents` uses `started_at` not `created_at`\n- Use actual public domains for URL checks, never localhost\n\n## Check Sequence\n\n### 1. Docker Containers\n- Run `docker ps --format 'table {{.Names}}\\t{{.Status}}\\t{{.Ports}}'`\n- Flag any container not \"Up\" or with restart loops\n\n### 2. Public URL Verification\n- Hit every public-facing endpoint (marketing site, web app, admin, API \u002Fhealth)\n- Verify HTTP 200 status codes\n- Note response times for any slow endpoints (>2s)\n\n### 3. SSL Certificates\n- Check certificate expiry for all domains:\n  `echo | openssl s_client -servername DOMAIN -connect DOMAIN:443 2>\u002Fdev\u002Fnull | openssl x509 -noout -enddate`\n- Flag any certificates expiring within 30 days\n\n### 4. Database (Postgres)\n- Connect via `docker exec`\n- Check table schemas FIRST with `\\d table_name` before any data queries\n- Verify recent activity on key tables (users, email_logs, incidents, domains)\n\n### 5. Redis & BullMQ\n- Verify Redis connectivity via `docker exec` with `redis-cli ping`\n- Check queue depths (pending, active, failed jobs)\n- Flag any queues with >0 failed jobs\n\n### 6. Disk & Resources\n- Docker disk usage: `docker system df`\n- System disk: `df -h`\n- Memory and load averages\n- If Docker reclaimable space exceeds 5GB, suggest `docker system prune -f`\n\n### 7. Recent Error Logs\n- Check last 50 lines of each API\u002Fworker container logs\n- Flag any repeated errors or stack traces\n\n## Output Format\nSummarize all findings in a table with status indicators:\n- PASS\n- WARNING (needs attention soon)\n- FAIL (needs immediate action)\n\nEnd with a health score out of 100 and prioritized action items.\n",{},"master","c73386b305dec167db7654e0e6feacb462d4f9dc","assets\u002Fskills\u002Fdevops\u002Fhealthcheck",1,"https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code","https:\u002F\u002Fgithub.com\u002FAntifragileTech","2026-10-02 14:22:14",{"source":7,"skillName":5,"commands":29,"prompt":39,"zipAvailable":40},[30,33,36],{"tool":31,"command":32},"npx","npx skills add AntifragileTech\u002Fantifragile-claude-code --skill healthcheck",{"tool":34,"command":35},"bunx","bunx skills add AntifragileTech\u002Fantifragile-claude-code --skill healthcheck",{"tool":37,"command":38},"pnpm","pnpm dlx skills add AntifragileTech\u002Fantifragile-claude-code --skill healthcheck","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fdevops\u002Fhealthcheck\u002FSKILL.md",true,[],[43,69,84,99,112,125],{"skillNo":44,"name":45,"nameZh":6,"description":46,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":47,"categories":48,"keywords":62,"publishedAt":17},"01M6DT9Q6VYA615SCXR757TZZ7","writing-skills","Use when creating new skills, editing existing skills, or verifying skills work before deployment","https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fthinking\u002Fwriting-skills\u002FSKILL.md",[49,54,57],{"categoryNo":50,"categoryName":51,"taxonomyType":52,"taxonomyTypeDesc":53},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":55,"categoryName":56,"taxonomyType":52,"taxonomyTypeDesc":53},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":58,"categoryName":59,"taxonomyType":60,"taxonomyTypeDesc":61},"01JBSEEDCAT000000000000036","内容创作者","PROFESSION","适用职业",[63,64,65,66,67,68],"writing skills","writing","use","editing","work","deployment",{"skillNo":70,"name":71,"nameZh":6,"description":72,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":73,"categories":74,"keywords":77,"publishedAt":17},"01M6DT9GFHDNY90P41WGAE1TV0","writing-plans","Use when you have a spec or requirements for a multi-step task, before touching code","https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fthinking\u002Fwriting-plans\u002FSKILL.md",[75,76],{"categoryNo":55,"categoryName":56,"taxonomyType":52,"taxonomyTypeDesc":53},{"categoryNo":58,"categoryName":59,"taxonomyType":60,"taxonomyTypeDesc":61},[78,79,64,80,81,65,82,83],"plans","writing plans","requirements","task","code","spec",{"skillNo":85,"name":86,"nameZh":6,"description":87,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":88,"categories":89,"keywords":92,"publishedAt":17},"01M6DT9C6PFGD86WS3HY7YE3XG","docs:write-concisely","Apply writing rules to any documentation that humans will read. Makes your writing clearer, stronger, and more professional.","https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fthinking\u002Fwrite-concisely\u002FSKILL.md",[90,91],{"categoryNo":55,"categoryName":56,"taxonomyType":52,"taxonomyTypeDesc":53},{"categoryNo":58,"categoryName":59,"taxonomyType":60,"taxonomyTypeDesc":61},[93,94,95,96,97,98,64],"docs:write concisely","write","docs","read","Rules","documentation",{"skillNo":100,"name":101,"nameZh":6,"description":102,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":103,"categories":104,"keywords":105,"publishedAt":17},"01M6DT98AWQ27P0N1CG97WAG66","kaizen:why","Iterative Five Whys root cause analysis drilling from symptoms to fundamentals","https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fthinking\u002Fwhy\u002FSKILL.md",[],[101,106,107,108,109,110,111],"why","kaizen","issue","five whys","analysis","root cause analysis",{"skillNo":113,"name":114,"nameZh":6,"description":115,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":116,"categories":117,"keywords":118,"publishedAt":17},"01M6DT93EH25NAX19R3WGE1P53","verification-loop","A comprehensive verification system for Claude Code sessions.","https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fthinking\u002Fverification-loop\u002FSKILL.md",[],[119,120,121,122,82,123,124],"verification loop","verification","loop","sessions","claude code sessions","system",{"skillNo":126,"name":127,"nameZh":6,"description":128,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":129,"categories":130,"keywords":131,"publishedAt":17},"01M6DT90GW7Z7VCN98P9DVYSNC","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\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fthinking\u002Fverification-before-completion\u002FSKILL.md",[],[132,120,133,67,65,134,135,136],"verification before completion","commands","evidence","claim","complete"]