[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6N9TZDEV26RZ7W34HEFPQE9":3,"skill-same:01M6N9TZDEV26RZ7W34HEFPQE9":69},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":43,"linkOnly":44,"markdownContent":45,"markdownBody":46,"frontMatter":47,"refName":48,"commitSha":49,"skillDirectory":50,"forksCount":51,"repositoryHtmlUrl":52,"repositoryHomepageUrl":6,"ownerHtmlUrl":53,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":54,"install":55,"resources":68},"01M6N9TZDEV26RZ7W34HEFPQE9","smackerel-no-defaults",null,"Enforce Smackerel's NO-DEFAULTS \u002F fail-loud SST policy. Use when editing config, Docker Compose, deploy adapters, docs, instructions, skills, env handling, host bind addresses, or any runtime value that could be hidden by fallback syntax.","pkirsanov\u002Fsmackerel","pkirsanov","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F138962?v=4","01M6N8NAPD2KXMVC17X6GJ0WZ5","01M6N8NATQ9SAZ00H9D61R0TPV",1,"MIT","https:\u002F\u002Fgithub.com\u002Fpkirsanov\u002Fsmackerel\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fsmackerel-no-defaults\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000011","运维与部署","SCENARIO","使用场景",[23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],"smackerel no defaults","enforce","value","addresses","sst","Adapters","host","env","bind","runtime","docker","compose","use","instructions","editing","syntax","docker compose","deploy","config","policy","2026-11-10 10:12:30",false,"---\nname: smackerel-no-defaults\ndescription: Enforce Smackerel's NO-DEFAULTS \u002F fail-loud SST policy. Use when editing config, Docker Compose, deploy adapters, docs, instructions, skills, env handling, host bind addresses, or any runtime value that could be hidden by fallback syntax.\n---\n\n# Smackerel NO-DEFAULTS Guard\n\n## Goal\n\nPrevent silent runtime fallback config. Smackerel must fail loudly when required config is missing so agents and operators cannot accidentally ship hidden defaults.\n\nThis skill covers Smackerel's generic repo-owned configuration and deployment\ncontracts. Final host configuration for a concrete self-hosted, cloud VM, or other\ndeployment target belongs in an operator-private deploy-adapter overlay, not in\nthis repo.\n\n## Use This Skill When\n\n- Editing `config\u002Fsmackerel.yaml`, `scripts\u002Fcommands\u002Fconfig.sh`, `docker-compose.yml`, `deploy\u002Fcompose.deploy.yml`, or deploy adapter logic.\n- Changing docs, instructions, or skills that describe config, env vars, ports, host bind addresses, or deployment.\n- Reviewing any use of shell\u002FCompose interpolation, `os.getenv`, `process.env`, or config helper defaults.\n- Touching `HOST_BIND_ADDRESS`, port mappings, env files, or Build-Once Deploy-Many config bundles.\n\n## Blocking Rules\n\n- No `${VAR:-default}` or `${VAR-default}` for SST-managed runtime values.\n- No language-level fallback for required config (`os.getenv(\"KEY\", \"default\")`, `process.env.KEY || \"default\"`, `unwrap_or(...)`).\n- No docs language that implies an implicit fallback (`safe-by-default`, `loopback default`, `preserves loopback`).\n- No generated config edits by hand.\n- No deploy adapter may rely on Compose to invent missing values.\n\n## Required Patterns\n\n| Surface | Required Pattern |\n|---------|------------------|\n| Compose \u002F shell required value | `${VAR:?clear error message}` |\n| Go required env | `os.Getenv(\"KEY\")` plus explicit empty-value error |\n| Python required env | `os.environ[\"KEY\"]` or explicit empty-value error |\n| TypeScript required env | `process.env.KEY` plus explicit missing-value throw |\n| Loopback bind | Explicit `HOST_BIND_ADDRESS=127.0.0.1` in generated\u002Fapply-time env, never a Compose fallback |\n\n## HOST_BIND_ADDRESS Contract\n\nThe live deploy bind-address contract is:\n\n```yaml\nports:\n  - \"${HOST_BIND_ADDRESS:?HOST_BIND_ADDRESS must be set by deploy adapter}:${CORE_HOST_PORT}:${CORE_CONTAINER_PORT}\"\n```\n\nThe deploy adapter must write `HOST_BIND_ADDRESS` explicitly into `app.env` before Compose starts. If it cannot determine the bind address, it must fail before `docker compose up`. `127.0.0.1` is valid only as an explicit configured value.\n\n## Review Checklist\n\n```\n[ ] Touched files contain no hidden fallback for required runtime config.\n[ ] Any mention of `${VAR:-default}` labels it as forbidden, not recommended.\n[ ] `HOST_BIND_ADDRESS` docs say adapter-set explicit value + fail-loud Compose.\n[ ] `deploy\u002Fcompose.deploy.yml` and `internal\u002Fdeploy\u002Fcompose_contract_test.go` match.\n[ ] Validation evidence uses repo-standard commands from `.github\u002Fcopilot-instructions.md`.\n```\n\n## Anti-Patterns\n\n| Anti-Pattern | Why It Blocks | Fix |\n|--------------|---------------|-----|\n| `${HOST_BIND_ADDRESS:-127.0.0.1}` in live Compose | Missing adapter config silently becomes loopback | `${HOST_BIND_ADDRESS:?HOST_BIND_ADDRESS must be set by deploy adapter}` |\n| \"loopback default\" in docs | Teaches agents to rely on fallback behavior | \"explicit loopback value\" |\n| `os.getenv(\"SMACKEREL_AUTH_TOKEN\", \"\")` for required config | Auth misconfig becomes empty string | Required env read plus explicit empty check |\n| Adapter omits `HOST_BIND_ADDRESS` because Compose has a fallback | Adapter contract is incomplete | Adapter writes the value or fails before Compose |\n","# Smackerel NO-DEFAULTS Guard\n\n## Goal\n\nPrevent silent runtime fallback config. Smackerel must fail loudly when required config is missing so agents and operators cannot accidentally ship hidden defaults.\n\nThis skill covers Smackerel's generic repo-owned configuration and deployment\ncontracts. Final host configuration for a concrete self-hosted, cloud VM, or other\ndeployment target belongs in an operator-private deploy-adapter overlay, not in\nthis repo.\n\n## Use This Skill When\n\n- Editing `config\u002Fsmackerel.yaml`, `scripts\u002Fcommands\u002Fconfig.sh`, `docker-compose.yml`, `deploy\u002Fcompose.deploy.yml`, or deploy adapter logic.\n- Changing docs, instructions, or skills that describe config, env vars, ports, host bind addresses, or deployment.\n- Reviewing any use of shell\u002FCompose interpolation, `os.getenv`, `process.env`, or config helper defaults.\n- Touching `HOST_BIND_ADDRESS`, port mappings, env files, or Build-Once Deploy-Many config bundles.\n\n## Blocking Rules\n\n- No `${VAR:-default}` or `${VAR-default}` for SST-managed runtime values.\n- No language-level fallback for required config (`os.getenv(\"KEY\", \"default\")`, `process.env.KEY || \"default\"`, `unwrap_or(...)`).\n- No docs language that implies an implicit fallback (`safe-by-default`, `loopback default`, `preserves loopback`).\n- No generated config edits by hand.\n- No deploy adapter may rely on Compose to invent missing values.\n\n## Required Patterns\n\n| Surface | Required Pattern |\n|---------|------------------|\n| Compose \u002F shell required value | `${VAR:?clear error message}` |\n| Go required env | `os.Getenv(\"KEY\")` plus explicit empty-value error |\n| Python required env | `os.environ[\"KEY\"]` or explicit empty-value error |\n| TypeScript required env | `process.env.KEY` plus explicit missing-value throw |\n| Loopback bind | Explicit `HOST_BIND_ADDRESS=127.0.0.1` in generated\u002Fapply-time env, never a Compose fallback |\n\n## HOST_BIND_ADDRESS Contract\n\nThe live deploy bind-address contract is:\n\n```yaml\nports:\n  - \"${HOST_BIND_ADDRESS:?HOST_BIND_ADDRESS must be set by deploy adapter}:${CORE_HOST_PORT}:${CORE_CONTAINER_PORT}\"\n```\n\nThe deploy adapter must write `HOST_BIND_ADDRESS` explicitly into `app.env` before Compose starts. If it cannot determine the bind address, it must fail before `docker compose up`. `127.0.0.1` is valid only as an explicit configured value.\n\n## Review Checklist\n\n```\n[ ] Touched files contain no hidden fallback for required runtime config.\n[ ] Any mention of `${VAR:-default}` labels it as forbidden, not recommended.\n[ ] `HOST_BIND_ADDRESS` docs say adapter-set explicit value + fail-loud Compose.\n[ ] `deploy\u002Fcompose.deploy.yml` and `internal\u002Fdeploy\u002Fcompose_contract_test.go` match.\n[ ] Validation evidence uses repo-standard commands from `.github\u002Fcopilot-instructions.md`.\n```\n\n## Anti-Patterns\n\n| Anti-Pattern | Why It Blocks | Fix |\n|--------------|---------------|-----|\n| `${HOST_BIND_ADDRESS:-127.0.0.1}` in live Compose | Missing adapter config silently becomes loopback | `${HOST_BIND_ADDRESS:?HOST_BIND_ADDRESS must be set by deploy adapter}` |\n| \"loopback default\" in docs | Teaches agents to rely on fallback behavior | \"explicit loopback value\" |\n| `os.getenv(\"SMACKEREL_AUTH_TOKEN\", \"\")` for required config | Auth misconfig becomes empty string | Required env read plus explicit empty check |\n| Adapter omits `HOST_BIND_ADDRESS` because Compose has a fallback | Adapter contract is incomplete | Adapter writes the value or fails before Compose |\n",{"name":5,"description":7},"main","ed893cc338281a0bb9bb9ecf3415716cb242bb3f",".github\u002Fskills\u002Fsmackerel-no-defaults",0,"https:\u002F\u002Fgithub.com\u002Fpkirsanov\u002Fsmackerel","https:\u002F\u002Fgithub.com\u002Fpkirsanov","2026-11-07 02:54:37",{"source":8,"skillName":5,"commands":56,"prompt":66,"zipAvailable":67},[57,60,63],{"tool":58,"command":59},"npx","npx skills add pkirsanov\u002Fsmackerel --skill smackerel-no-defaults",{"tool":61,"command":62},"bunx","bunx skills add pkirsanov\u002Fsmackerel --skill smackerel-no-defaults",{"tool":64,"command":65},"pnpm","pnpm dlx skills add pkirsanov\u002Fsmackerel --skill smackerel-no-defaults","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fpkirsanov\u002Fsmackerel\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fsmackerel-no-defaults\u002FSKILL.md",true,[],[70,98,126,147,175,201],{"skillNo":71,"name":72,"nameZh":6,"description":73,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":74,"categories":75,"keywords":79,"publishedAt":43},"01M6N9V5TBHQT20V5SCCJ1VRBC","smackerel-trace-capture","Wire Smackerel's concrete validate-plane stack into the framework trace-driven defect-discovery method. Use when running live-category tests (integration\u002Fe2e\u002Fe2e-ui\u002Fstress) against the ephemeral test stack; capturing SLO or trace evidence; hunting latency\u002Ferror\u002Fperf bugs from spans; querying the test-stack Jaeger or Prometheus; or touching `.specify\u002Fruntime\u002Fobservability`. Concrete smackerel endpoints + the exact `capture-slo.sh` command; do NOT duplicate `bubbles-observability-adapter` — this only adds the wiring.","https:\u002F\u002Fgithub.com\u002Fpkirsanov\u002Fsmackerel\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fsmackerel-trace-capture\u002FSKILL.md",[76],{"categoryNo":77,"categoryName":78,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000008","测试与质量",[80,81,82,83,84,85,86,87,88,35,89,90,91,92,93,32,94,95,96,97],"trace","capture","smackerel trace capture","perf","observability","prometheus","specify","e2e","discovery","slo","only","evidence","do","latency","tests","adapter","error","bugs",{"skillNo":99,"name":100,"nameZh":6,"description":101,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":102,"categories":103,"keywords":107,"publishedAt":43},"01M6N9TJRS5PF83JH2W4614D4W","bubbles-workflow-mode-resolution","Resolve a Bubbles workflow mode against `bubbles\u002Fworkflows.yaml`, including template inheritance, status ceilings, gate wiring, and decision policy. Use when picking a mode for a request, when a guard reports a mode-related failure, or when extending workflows.yaml with a new mode or template. Covers natural-language intent routing and the workflow registry consistency rules.","https:\u002F\u002Fgithub.com\u002Fpkirsanov\u002Fsmackerel\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fbubbles-workflow-mode-resolution\u002FSKILL.md",[104],{"categoryNo":105,"categoryName":106,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发",[108,109,110,111,42,112,113,114,115,116,117,35,118,119,120,121,122,123,124,125],"workflow","resolution","mode","bubbles workflow mode resolution","workflows","routing","guard","template","decision","Rules","reports","intent","inheritance","with","consistency","natural-language","for","wiring",{"skillNo":127,"name":128,"nameZh":6,"description":129,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":130,"categories":131,"keywords":133,"publishedAt":43},"01M6N9TC98D6DJR0D64SSN0SN3","bubbles-workflow-execution-loops","Run per-round synchronous workflow execution loops correctly. Use when orchestrating a multi-round workflow, dispatching specialist subagents, handling round-based remediation, or interpreting a workflow mode's execution policy. Covers authorized direct execution, dispatch-and-wait, batch-then-summarize prohibition, and mapped-mode execution.","https:\u002F\u002Fgithub.com\u002Fpkirsanov\u002Fsmackerel\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fbubbles-workflow-execution-loops\u002FSKILL.md",[132],{"categoryNo":105,"categoryName":106,"taxonomyType":20,"taxonomyTypeDesc":21},[108,134,135,136,137,42,138,139,140,141,142,35,143,144,145,146,110],"execution","loops","bubbles workflow execution loops","summarize","run","batch","remediation","direct","subagents","dispatch","wait","multi","multi-round",{"skillNo":148,"name":149,"nameZh":6,"description":150,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":151,"categories":152,"keywords":157,"publishedAt":43},"01M6N9SYXQNJDQ1T1YT81JH2BG","bubbles-vscode-agent-constraints","Design agents that fit the VS Code Copilot Chat runtime instead of fighting it. Use when authoring or editing any `*.agent.md`; when adding `tools:`, `agents:`, `handoffs:`, `model:`, `user-invocable:`, or `disable-model-invocation:` frontmatter; when designing an orchestrator that dispatches specialists; when a design implies agent-calls-agent-calls-agent chaining; when a subagent dispatch silently no-ops or an agent cannot be selected in the dropdown; or when writing a governance rule about delegation that the runtime cannot actually enforce. Prevents multi-level-subagent designs, prose-only dispatch laws, and frontmatter\u002Fbody contradictions.","https:\u002F\u002Fgithub.com\u002Fpkirsanov\u002Fsmackerel\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fbubbles-vscode-agent-constraints\u002FSKILL.md",[153,156],{"categoryNo":154,"categoryName":155,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":105,"categoryName":106,"taxonomyType":20,"taxonomyTypeDesc":21},[158,159,160,161,162,163,164,165,166,167,168,169,37,170,90,32,171,172,173,174],"vscode","constraints","bubbles vscode agent constraints","design","writing","copilot","code","delegation","Tools","subagent","model","chaining","orchestrator","authoring","fit","subagent dispatch","frontmatter",{"skillNo":176,"name":177,"nameZh":6,"description":178,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":179,"categories":180,"keywords":181,"publishedAt":43},"01M6N9SD78SK12PRT9KBRZ6TB3","bubbles-upkeep-cadence","How to schedule, dispatch, and record recurring operational upkeep tasks (backup, restore-drill, BCDR-drill, patch-cycle, secret-rotation, flag-cleanup, compliance-sweep). Use when authoring or modifying `config\u002Fupkeep-calendar.yaml`, when investigating a missed task, when reading the upkeep ledger, or when adding a new task type.","https:\u002F\u002Fgithub.com\u002Fpkirsanov\u002Fsmackerel\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fbubbles-upkeep-cadence\u002FSKILL.md",[],[182,183,184,185,186,187,188,189,35,190,191,192,193,194,195,196,197,198,199,200],"cadence","bubbles upkeep cadence","tasks","cleanup","backup","sweep","schedule","recurring","patch","restore","task","cycle","record","missed","type","drill","how to","new task","rotation",{"skillNo":202,"name":203,"nameZh":6,"description":204,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":205,"categories":206,"keywords":216,"publishedAt":43},"01M6N9S702HVT41PJYVG5F4WCF","bubbles-test-integrity","Enforce real, specification-driven test quality during any test work. Use when writing tests, implementing scope test plans, reviewing test coverage, or validating DoD test items. Triggers include writing tests, adding test coverage, implementing scope tests, reviewing test plans, marking test DoD items, and verifying Gherkin scenario coverage.","https:\u002F\u002Fgithub.com\u002Fpkirsanov\u002Fsmackerel\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fbubbles-test-integrity\u002FSKILL.md",[207,208,211],{"categoryNo":77,"categoryName":78,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":209,"categoryName":210,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":212,"categoryName":213,"taxonomyType":214,"taxonomyTypeDesc":215},"01JBSEEDCAT000000000000036","内容创作者","PROFESSION","适用职业",[217,218,219,162,220,221,222,223,35,224,225,24,94,226,227,228,229,230,231,232],"test","integrity","bubbles test integrity","writing tests","quality","work","coverage","test coverage","specification","plans","scenario","triggers","driven","dod","scope","implementing"]