[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71K2TJNXHSQPKC3TNHJS2EV":3,"skill-same:01M71K2TJNXHSQPKC3TNHJS2EV":78},{"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":29,"publishedAt":50,"linkOnly":51,"markdownContent":52,"markdownBody":53,"frontMatter":54,"refName":55,"commitSha":56,"skillDirectory":57,"forksCount":58,"repositoryHtmlUrl":59,"repositoryHomepageUrl":60,"ownerHtmlUrl":61,"ownerBlogUrl":62,"ownerDescription":6,"updatedAt":63,"install":64,"resources":77},"01M71K2TJNXHSQPKC3TNHJS2EV","smoke-test",null,"Post-deploy health-check against a live URL. Validates HTTP status, response content, and critical endpoints. Runnable standalone OR as the final step of the deploy skill.","danielvm-git\u002Fbigpowers","danielvm-git","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F1020864?v=4","01M71H1N1CTQ529S0KN7KETVG6","Daniel V M","01M71H1N218Y3S8WHCJ58NPRSW",289,"MIT","https:\u002F\u002Fgithub.com\u002Fdanielvm-git\u002Fbigpowers\u002Fblob\u002Fmain\u002F.trae\u002Fskills\u002Fsmoke-test\u002FSKILL.md",[18,23,26],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000011","运维与部署",{"categoryNo":27,"categoryName":28,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49],"smoke test","test","smoke","content","deploy","deploy skill","endpoints","post","health","check","http","as","sonnet","live","status","health-check","URL","critical","http status","standalone","2026-11-10 10:12:30",false,"---\nname: smoke-test\nmodel: sonnet\ndescription: \"Post-deploy health-check against a live URL. Validates HTTP status, response content, and critical endpoints. Runnable standalone OR as the final step of the deploy skill.\"\n---\n\n# Smoke Test\n\n> **HARD GATE** — Do NOT run smoke-test against a URL that hasn't been deployed yet. Always run `deploy` first, then `smoke-test`.\n>\n> **HARD GATE** — A failed smoke test means the deployment is broken. Do NOT mark a deploy as successful until all smoke checks pass.\n\nValidate a deployed application is healthy by running HTTP checks against live URLs. Each check asserts HTTP status, optional body signal (regex), and optional response-time threshold.\n\n## Configuration\n\nSmoke checks live in `smoke-checks.yaml` at the project root:\n\n```yaml\nbase_url: \"https:\u002F\u002Fexample.com\"\nchecks:\n  - name: \"Homepage\"\n    path: \"\u002F\"\n    expected_status: 200\n    content_signal: \"welcome|ok\"\n    max_response_time_ms: 3000\n```\n\n| Field | Required | Default | Description |\n|-------|----------|---------|-------------|\n| `name` | Yes | — | Human-readable check name |\n| `path` | Yes | `\u002F` | URL path relative to base_url |\n| `method` | No | `GET` | HTTP method |\n| `expected_status` | No | `200` | Expected HTTP status code |\n| `content_signal` | No | — | Regex or string in response body |\n| `max_response_time_ms` | No | — | Fail if slower than threshold (ms) |\n\nAd-hoc single-URL mode: `DEPLOY_URL=https:\u002F\u002Fhost bash scripts\u002Frun-smoke.sh`\n\n## Process\n\n### 1. Load checks\n\n```bash\nSMOKE_CHECKS_FILE=\"${SMOKE_CHECKS_FILE:-smoke-checks.yaml}\"\nBASE_URL=\"${DEPLOY_URL:-$BASE_URL}\"\ntest -f \"$SMOKE_CHECKS_FILE\" || test -n \"$BASE_URL\" || { echo \"ERROR: no checks file or URL\"; exit 1; }\n```\n\n### 2. Run each check\n\n```bash\nbash scripts\u002Frun-smoke.sh \"${DEPLOY_URL:-}\" \"${SMOKE_CHECKS_FILE:-smoke-checks.yaml}\"\n```\n\nThe runner performs curl requests per check, records pass\u002Ffail per assertion, and prints a summary.\n\n### 3. Assert results\n\n- Any HTTP status mismatch → FAIL\n- Missing `content_signal` when configured → FAIL\n- Response time over `max_response_time_ms` → FAIL\n- Exit code non-zero → deployment not healthy\n\n### 4. Generate report\n\nCapture stdout from `run-smoke.sh` as evidence. Persist to `specs\u002Fverifications\u002Fsmoke-\u003Cdate>.log` for release-branch.\n\n## Integration with deploy skill\n\n```bash\nDEPLOY_URL=\"$DEPLOY_URL\" bash scripts\u002Frun-smoke.sh\n```\n\n## Verify arc\n\nPart of **★ VERIFY ★**: `verify-work` → `validate-contracts` → `smoke-test` → `run-evals` → `audit-code`\n\n## Verify\n\n→ verify: `test -x scripts\u002Frun-smoke.sh && grep -q 'run-smoke.sh' skills\u002Fsmoke-test\u002FSKILL.md && ! grep -q 'See \\[REFERENCE.md\\](REFERENCE.md)$' skills\u002Fsmoke-test\u002FSKILL.md && echo OK`\n\n---\n\n# Smoke Test — Reference\n\n## Navigation\n\n| Lines | Section |\n|-------|---------|\n| 1 | Title |\n| 3–17 | Navigation |\n| 18–34 | Runner script |\n| 35–46 | Configuration reference |\n| 47–55 | Verification |\n| 56–89 | Reference block 1 |\n| 90–107 | Reference block 2 |\n| 108–122 | Reference block 3 |\n| 123–159 | Reference block 4 |\n| 160–177 | Reference block 5 |\n\n## Runner script\n\nA ready-to-use runner is provided for standalone operation:\n\n```bash\nbash scripts\u002Frun-smoke.sh [url] [smoke-checks-file]\n```\n\nThe runner:\n1. Uses `$DEPLOY_URL`, `$SMOKE_CHECKS_FILE`, or CLI arguments\n2. Runs all defined checks\n3. Prints a pass\u002Ffail summary\n4. Exits 0 on all pass, non-zero on any failure\n\n\n---\n\n## Configuration reference\n\n| Variable | Default | Description |\n|----------|---------|-------------|\n| `SMOKE_CHECKS_FILE` | `smoke-checks.yaml` | Path to smoke checks YAML |\n| `DEPLOY_URL` \u002F `BASE_URL` | *(required)* | Base URL for all checks |\n| `SMOKE_TIMEOUT` | `30` | Per-check timeout (seconds) |\n| `SMOKE_RETRIES` | `0` | Number of retries on failure |\n\n\n---\n\n## Verification\n\n→ verify: `test -f smoke-test\u002FSKILL.md && grep -q 'name: smoke-test' smoke-test\u002FSKILL.md && echo OK`\n→ verify: `grep -qi 'smoke.checks.yaml\\|checklist\\|expected_status\\|content_signal' smoke-test\u002FSKILL.md && echo OK`\n→ verify: `grep -ci 'pass\\|fail\\|summary\\|report' smoke-test\u002FSKILL.md | awk '{if($1>=2) print \"OK\"; else print \"FAIL\"}'`\n→ verify: `grep -q 'smoke-test' SKILL-INDEX.md && echo OK`\n\n---\n\n## Reference block 1\n\n```yaml\n# smoke-checks.yaml — auto-loaded if present at project root\nbase_url: \"https:\u002F\u002Fexample.com\"\nchecks:\n  - name: \"Homepage\"\n    path: \"\u002F\"\n    method: GET\n    expected_status: 200\n    content_signal: \"bigpowers\"\n    max_response_time_ms: 3000\n\n  - name: \"API Health\"\n    path: \"\u002Fapi\u002Fhealth\"\n    method: GET\n    expected_status: 200\n    content_signal: \"ok|healthy\"\n\n  - name: \"API Jogos\"\n    path: \"\u002Fapi\u002Fjogos\"\n    method: GET\n    expected_status: 200\n    content_signal: \"jogos|games\"\n\n  - name: \"Not Found handling\"\n    path: \"\u002Fnonexistent\"\n    method: GET\n    expected_status: 404\n    content_signal: \"not found|404\"\n```\n\n---\n\n## Reference block 2\n\n```bash\nSMOKE_CHECKS_FILE=\"${SMOKE_CHECKS_FILE:-smoke-checks.yaml}\"\nBASE_URL=\"${DEPLOY_URL:-$BASE_URL}\"\n\nif [ -f \"$SMOKE_CHECKS_FILE\" ]; then\n  echo \"Loaded smoke checks from $SMOKE_CHECKS_FILE\"\nelif [ -n \"$BASE_URL\" ]; then\n  echo \"No smoke-checks.yaml found. Using single URL check against $BASE_URL\"\nelse\n  echo \"ERROR: No smoke-checks.yaml found and no DEPLOY_URL\u002FBASE_URL set.\"\n  exit 1\nfi\n```\n\n---\n\n## Reference block 3\n\n```bash\nurl=\"${BASE_URL}${path}\"\nstart_time=$(python3 -c 'import time; print(int(time.time() * 1000))')\n\n# Perform the HTTP request\nresponse=$(curl -s -o \u002Ftmp\u002Fsmoke_body.txt -w \"%{http_code}\" \"$url\")\nresponse_time=$(( $(python3 -c 'import time; print(int(time.time() * 1000))') - start_time ))\nstatus=$response\nbody=$(cat \u002Ftmp\u002Fsmoke_body.txt)\n```\n\n---\n\n## Reference block 4\n\n```bash\nchecks_passed=0\nchecks_failed=0\nfailures=\"\"\n\n# Assert status code\nif [ \"$status\" -ne \"${expected_status:-200}\" ]; then\n  echo \"  FAIL: expected status ${expected_status} but got $status\"\n  checks_failed=$((checks_failed + 1))\n  failures=\"${failures}  - $name: HTTP $status (expected ${expected_status})\\n\"\nelse\n  echo \"  PASS: HTTP $status\"\nfi\n\n# Assert content signal\nif [ -n \"$content_signal\" ]; then\n  if echo \"$body\" | grep -qiE \"$content_signal\"; then\n    echo \"  PASS: body contains \\\"$content_signal\\\"\"\n  else\n    echo \"  FAIL: body does not contain \\\"$content_signal\\\"\"\n    checks_failed=$((checks_failed + 1))\n    failures=\"${failures}  - $name: missing content signal \\\"$content_signal\\\"\\n\"\n  fi\nfi\n\n# Assert response time\nif [ -n \"$max_response_time_ms\" ] && [ \"$response_time\" -gt \"$max_response_time_ms\" ]; then\n  echo \"  FAIL: response time ${response_time}ms exceeds ${max_response_time_ms}ms\"\n  checks_failed=$((checks_failed + 1))\n  failures=\"${failures}  - $name: response time ${response_time}ms (max ${max_response_time_ms}ms)\\n\"\nfi\n```\n\n---\n\n## Reference block 5\n\n```bash\ntotal=$((checks_passed + checks_failed))\necho \"\"\necho \"=== Smoke Test Summary ===\"\necho \"Total: $total | Passed: $checks_passed | Failed: $checks_failed\"\n\nif [ \"$checks_failed\" -gt 0 ]; then\n  echo \"\"\n  echo \"Failures:\"\n  echo -e \"$failures\"\n  exit 1\nelse\n  echo \"All checks passed.\"\n  exit 0\nfi\n```\n","# Smoke Test\n\n> **HARD GATE** — Do NOT run smoke-test against a URL that hasn't been deployed yet. Always run `deploy` first, then `smoke-test`.\n>\n> **HARD GATE** — A failed smoke test means the deployment is broken. Do NOT mark a deploy as successful until all smoke checks pass.\n\nValidate a deployed application is healthy by running HTTP checks against live URLs. Each check asserts HTTP status, optional body signal (regex), and optional response-time threshold.\n\n## Configuration\n\nSmoke checks live in `smoke-checks.yaml` at the project root:\n\n```yaml\nbase_url: \"https:\u002F\u002Fexample.com\"\nchecks:\n  - name: \"Homepage\"\n    path: \"\u002F\"\n    expected_status: 200\n    content_signal: \"welcome|ok\"\n    max_response_time_ms: 3000\n```\n\n| Field | Required | Default | Description |\n|-------|----------|---------|-------------|\n| `name` | Yes | — | Human-readable check name |\n| `path` | Yes | `\u002F` | URL path relative to base_url |\n| `method` | No | `GET` | HTTP method |\n| `expected_status` | No | `200` | Expected HTTP status code |\n| `content_signal` | No | — | Regex or string in response body |\n| `max_response_time_ms` | No | — | Fail if slower than threshold (ms) |\n\nAd-hoc single-URL mode: `DEPLOY_URL=https:\u002F\u002Fhost bash scripts\u002Frun-smoke.sh`\n\n## Process\n\n### 1. Load checks\n\n```bash\nSMOKE_CHECKS_FILE=\"${SMOKE_CHECKS_FILE:-smoke-checks.yaml}\"\nBASE_URL=\"${DEPLOY_URL:-$BASE_URL}\"\ntest -f \"$SMOKE_CHECKS_FILE\" || test -n \"$BASE_URL\" || { echo \"ERROR: no checks file or URL\"; exit 1; }\n```\n\n### 2. Run each check\n\n```bash\nbash scripts\u002Frun-smoke.sh \"${DEPLOY_URL:-}\" \"${SMOKE_CHECKS_FILE:-smoke-checks.yaml}\"\n```\n\nThe runner performs curl requests per check, records pass\u002Ffail per assertion, and prints a summary.\n\n### 3. Assert results\n\n- Any HTTP status mismatch → FAIL\n- Missing `content_signal` when configured → FAIL\n- Response time over `max_response_time_ms` → FAIL\n- Exit code non-zero → deployment not healthy\n\n### 4. Generate report\n\nCapture stdout from `run-smoke.sh` as evidence. Persist to `specs\u002Fverifications\u002Fsmoke-\u003Cdate>.log` for release-branch.\n\n## Integration with deploy skill\n\n```bash\nDEPLOY_URL=\"$DEPLOY_URL\" bash scripts\u002Frun-smoke.sh\n```\n\n## Verify arc\n\nPart of **★ VERIFY ★**: `verify-work` → `validate-contracts` → `smoke-test` → `run-evals` → `audit-code`\n\n## Verify\n\n→ verify: `test -x scripts\u002Frun-smoke.sh && grep -q 'run-smoke.sh' skills\u002Fsmoke-test\u002FSKILL.md && ! grep -q 'See \\[REFERENCE.md\\](REFERENCE.md)$' skills\u002Fsmoke-test\u002FSKILL.md && echo OK`\n\n---\n\n# Smoke Test — Reference\n\n## Navigation\n\n| Lines | Section |\n|-------|---------|\n| 1 | Title |\n| 3–17 | Navigation |\n| 18–34 | Runner script |\n| 35–46 | Configuration reference |\n| 47–55 | Verification |\n| 56–89 | Reference block 1 |\n| 90–107 | Reference block 2 |\n| 108–122 | Reference block 3 |\n| 123–159 | Reference block 4 |\n| 160–177 | Reference block 5 |\n\n## Runner script\n\nA ready-to-use runner is provided for standalone operation:\n\n```bash\nbash scripts\u002Frun-smoke.sh [url] [smoke-checks-file]\n```\n\nThe runner:\n1. Uses `$DEPLOY_URL`, `$SMOKE_CHECKS_FILE`, or CLI arguments\n2. Runs all defined checks\n3. Prints a pass\u002Ffail summary\n4. Exits 0 on all pass, non-zero on any failure\n\n\n---\n\n## Configuration reference\n\n| Variable | Default | Description |\n|----------|---------|-------------|\n| `SMOKE_CHECKS_FILE` | `smoke-checks.yaml` | Path to smoke checks YAML |\n| `DEPLOY_URL` \u002F `BASE_URL` | *(required)* | Base URL for all checks |\n| `SMOKE_TIMEOUT` | `30` | Per-check timeout (seconds) |\n| `SMOKE_RETRIES` | `0` | Number of retries on failure |\n\n\n---\n\n## Verification\n\n→ verify: `test -f smoke-test\u002FSKILL.md && grep -q 'name: smoke-test' smoke-test\u002FSKILL.md && echo OK`\n→ verify: `grep -qi 'smoke.checks.yaml\\|checklist\\|expected_status\\|content_signal' smoke-test\u002FSKILL.md && echo OK`\n→ verify: `grep -ci 'pass\\|fail\\|summary\\|report' smoke-test\u002FSKILL.md | awk '{if($1>=2) print \"OK\"; else print \"FAIL\"}'`\n→ verify: `grep -q 'smoke-test' SKILL-INDEX.md && echo OK`\n\n---\n\n## Reference block 1\n\n```yaml\n# smoke-checks.yaml — auto-loaded if present at project root\nbase_url: \"https:\u002F\u002Fexample.com\"\nchecks:\n  - name: \"Homepage\"\n    path: \"\u002F\"\n    method: GET\n    expected_status: 200\n    content_signal: \"bigpowers\"\n    max_response_time_ms: 3000\n\n  - name: \"API Health\"\n    path: \"\u002Fapi\u002Fhealth\"\n    method: GET\n    expected_status: 200\n    content_signal: \"ok|healthy\"\n\n  - name: \"API Jogos\"\n    path: \"\u002Fapi\u002Fjogos\"\n    method: GET\n    expected_status: 200\n    content_signal: \"jogos|games\"\n\n  - name: \"Not Found handling\"\n    path: \"\u002Fnonexistent\"\n    method: GET\n    expected_status: 404\n    content_signal: \"not found|404\"\n```\n\n---\n\n## Reference block 2\n\n```bash\nSMOKE_CHECKS_FILE=\"${SMOKE_CHECKS_FILE:-smoke-checks.yaml}\"\nBASE_URL=\"${DEPLOY_URL:-$BASE_URL}\"\n\nif [ -f \"$SMOKE_CHECKS_FILE\" ]; then\n  echo \"Loaded smoke checks from $SMOKE_CHECKS_FILE\"\nelif [ -n \"$BASE_URL\" ]; then\n  echo \"No smoke-checks.yaml found. Using single URL check against $BASE_URL\"\nelse\n  echo \"ERROR: No smoke-checks.yaml found and no DEPLOY_URL\u002FBASE_URL set.\"\n  exit 1\nfi\n```\n\n---\n\n## Reference block 3\n\n```bash\nurl=\"${BASE_URL}${path}\"\nstart_time=$(python3 -c 'import time; print(int(time.time() * 1000))')\n\n# Perform the HTTP request\nresponse=$(curl -s -o \u002Ftmp\u002Fsmoke_body.txt -w \"%{http_code}\" \"$url\")\nresponse_time=$(( $(python3 -c 'import time; print(int(time.time() * 1000))') - start_time ))\nstatus=$response\nbody=$(cat \u002Ftmp\u002Fsmoke_body.txt)\n```\n\n---\n\n## Reference block 4\n\n```bash\nchecks_passed=0\nchecks_failed=0\nfailures=\"\"\n\n# Assert status code\nif [ \"$status\" -ne \"${expected_status:-200}\" ]; then\n  echo \"  FAIL: expected status ${expected_status} but got $status\"\n  checks_failed=$((checks_failed + 1))\n  failures=\"${failures}  - $name: HTTP $status (expected ${expected_status})\\n\"\nelse\n  echo \"  PASS: HTTP $status\"\nfi\n\n# Assert content signal\nif [ -n \"$content_signal\" ]; then\n  if echo \"$body\" | grep -qiE \"$content_signal\"; then\n    echo \"  PASS: body contains \\\"$content_signal\\\"\"\n  else\n    echo \"  FAIL: body does not contain \\\"$content_signal\\\"\"\n    checks_failed=$((checks_failed + 1))\n    failures=\"${failures}  - $name: missing content signal \\\"$content_signal\\\"\\n\"\n  fi\nfi\n\n# Assert response time\nif [ -n \"$max_response_time_ms\" ] && [ \"$response_time\" -gt \"$max_response_time_ms\" ]; then\n  echo \"  FAIL: response time ${response_time}ms exceeds ${max_response_time_ms}ms\"\n  checks_failed=$((checks_failed + 1))\n  failures=\"${failures}  - $name: response time ${response_time}ms (max ${max_response_time_ms}ms)\\n\"\nfi\n```\n\n---\n\n## Reference block 5\n\n```bash\ntotal=$((checks_passed + checks_failed))\necho \"\"\necho \"=== Smoke Test Summary ===\"\necho \"Total: $total | Passed: $checks_passed | Failed: $checks_failed\"\n\nif [ \"$checks_failed\" -gt 0 ]; then\n  echo \"\"\n  echo \"Failures:\"\n  echo -e \"$failures\"\n  exit 1\nelse\n  echo \"All checks passed.\"\n  exit 0\nfi\n```\n",{"name":5,"model":42,"description":7},"main","72f5e4c8b43f60cf86b37078ad8cd7e22daf67aa",".trae\u002Fskills\u002Fsmoke-test",24,"https:\u002F\u002Fgithub.com\u002Fdanielvm-git\u002Fbigpowers","https:\u002F\u002Fdanielvm-git.github.io\u002Fbigpowers\u002F","https:\u002F\u002Fgithub.com\u002Fdanielvm-git","danielvm.net","2026-11-10 01:18:54",{"source":8,"skillName":5,"commands":65,"prompt":75,"zipAvailable":76},[66,69,72],{"tool":67,"command":68},"npx","npx skills add danielvm-git\u002Fbigpowers --skill smoke-test",{"tool":70,"command":71},"bunx","bunx skills add danielvm-git\u002Fbigpowers --skill smoke-test",{"tool":73,"command":74},"pnpm","pnpm dlx skills add danielvm-git\u002Fbigpowers --skill smoke-test","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fdanielvm-git\u002Fbigpowers\u002Fblob\u002Fmain\u002F.trae\u002Fskills\u002Fsmoke-test\u002FSKILL.md",true,[],[79,96,103,132,154,175],{"skillNo":80,"name":81,"nameZh":6,"description":82,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":83,"categories":84,"keywords":86,"publishedAt":50},"01M71KBG9F8X644MJB16H4V8M7","skill-verify-fail-open-fixture","Negative-path fixture for run-skill-verify.sh — must never PASS.","https:\u002F\u002Fgithub.com\u002Fdanielvm-git\u002Fbigpowers\u002Fblob\u002Fmain\u002Fspecs\u002Fverifications\u002Ffixtures\u002Fskill-verify-fail-open\u002FSKILL.md",[85],{"categoryNo":27,"categoryName":28,"taxonomyType":21,"taxonomyTypeDesc":22},[87,88,89,90,91,92,93,94,95],"fixture","open","verify","skill verify fail open fixture","skill verify","path","run","for","never",{"skillNo":97,"name":98,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":99,"categories":100,"keywords":101,"publishedAt":50},"01M71KBE3BKEMKNE0C5DGVDWZH","negative-path","https:\u002F\u002Fgithub.com\u002Fdanielvm-git\u002Fbigpowers\u002Fblob\u002Fmain\u002Fspecs\u002Fverifications\u002Ffixtures\u002Fnegative-path\u002FSKILL.md",[],[102,92],"negative path",{"skillNo":104,"name":105,"nameZh":6,"description":106,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":107,"categories":108,"keywords":112,"publishedAt":50},"01M71KBBGF7Y4EB4AMHBZ8CJFC","write-document","Write, organize, and sync high-integrity technical documents using the BMAD methodology. Ensures every document is Bold, Minimal, Actionable, and Durable. Use when creating architectural docs, technical guides, or organizing the specs\u002F directory.","https:\u002F\u002Fgithub.com\u002Fdanielvm-git\u002Fbigpowers\u002Fblob\u002Fmain\u002Fskills\u002Fwrite-document\u002FSKILL.md",[109],{"categoryNo":110,"categoryName":111,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000002","文档处理",[113,114,115,116,117,118,119,120,121,122,123,124,125,126,42,127,128,129,130,131],"write","write document","document","documents","actionable","technical","methodology","high","bmad","standard","use","when","minimal","bold","integrity","organize","sync","directory","guides",{"skillNo":133,"name":134,"nameZh":6,"description":135,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":136,"categories":137,"keywords":138,"publishedAt":50},"01M71KB8TM089JJD5AY5KAFSDM","wire-observability","Add structured JSON logging, observability commands, and idempotent setup scripts to a project. Use when a project needs production-readiness instrumentation, when user wants structured logging, or as a production-readiness gate at any phase of development.","https:\u002F\u002Fgithub.com\u002Fdanielvm-git\u002Fbigpowers\u002Fblob\u002Fmain\u002Fskills\u002Fwire-observability\u002FSKILL.md",[],[139,140,141,122,142,123,143,41,144,145,42,146,147,148,149,150,151,124,152,153],"observability","wire observability","readiness","commands","development","logging","add","instrumentation","at","structured logging","production-readiness","idempotent","phase","project","scripts",{"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":160,"publishedAt":50},"01M71KB6CNRANP449DQA3NJZ96","wire-ci","CI pipeline setup with bundled, forge-neutral templates and local validation. Detects the forge from the git remote, generates workflows for supported forges, and skips honestly for the rest. The CI equivalent of wire-observability.","https:\u002F\u002Fgithub.com\u002Fdanielvm-git\u002Fbigpowers\u002Fblob\u002Fmain\u002Fskills\u002Fwire-ci\u002FSKILL.md",[],[161,162,163,164,165,166,167,168,169,170,171,122,172,94,139,42,173,174],"wire ci","ci","remote","local","pipeline","forge","validation","setup","templates","REST","with","ci pipeline setup","git","workflows",{"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":192,"publishedAt":50},"01M71KB2ZV98P03X88QR8MT9F1","visual-dashboard","Start a browser-based dashboard that visualizes architecture, implementation plans, and project status. Persists artifacts in .bigpowers\u002Fdashboard\u002F. Reads specs\u002Fstate.yaml, release-plan.yaml, epics, and planning-status via HTTP API or opencode panel.","https:\u002F\u002Fgithub.com\u002Fdanielvm-git\u002Fbigpowers\u002Fblob\u002Fmain\u002Fskills\u002Fvisual-dashboard\u002FSKILL.md",[181,184,189],{"categoryNo":182,"categoryName":183,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000013","分析与可视化",{"categoryNo":185,"categoryName":186,"taxonomyType":187,"taxonomyTypeDesc":188},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",{"categoryNo":190,"categoryName":191,"taxonomyType":187,"taxonomyTypeDesc":188},"01JBSEEDCAT000000000000033","数据分析师",[193,194,195,44,196,40,197,198,199,42,200,201,202,203,204,205,206,152,207,208],"dashboard","visual","visual dashboard","artifacts","plans","planning","panel","start","release","opencode","plan","browser","api","architecture","project status","http api"]