[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71FXPWW498T78TAMJY3A7F0":3,"skill-same:01M71FXPWW498T78TAMJY3A7F0":89},{"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":26,"publishedAt":47,"linkOnly":48,"markdownContent":49,"markdownBody":50,"frontMatter":51,"refName":53,"commitSha":54,"skillDirectory":55,"forksCount":14,"repositoryHtmlUrl":56,"repositoryHomepageUrl":6,"ownerHtmlUrl":57,"ownerBlogUrl":58,"ownerDescription":59,"updatedAt":60,"install":61,"resources":74},"01M71FXPWW498T78TAMJY3A7F0","inspect-github-actions",null,"ALWAYS invoke this skill when the user asks about CI failures, workflow logs, GitHub Actions status, pipeline issues, or troubleshooting failed builds. NEVER attempt CI workflow investigation through ad hoc gh CLI calls without this skill.","outcomeeng\u002Fplugins","outcomeeng","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F257335685?v=4","01M71FRVRF36XYR3HRSCGFHK2R","Outcome Engineering","01M71FRVS4BZG17DWANFJ7EPNY",1,"MIT","https:\u002F\u002Fgithub.com\u002Foutcomeeng\u002Fplugins\u002Fblob\u002Fmain\u002Fsrc\u002Fplugins\u002Fproduct-tree\u002Fskills\u002Finspect-github-actions\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000011","运维与部署","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46],"actions","github actions","github","inspect github actions","inspect","rev","gh","calls","issues","ci","gh pr","tool","pipeline","parse","view","pr","never","python3","show","branch","2026-11-10 10:12:30",false,"---\nname: inspect-github-actions\ndescription: >-\n  ALWAYS invoke this skill when the user asks about CI failures, workflow logs, GitHub Actions status, pipeline issues, or troubleshooting failed builds. NEVER attempt CI workflow investigation through ad hoc gh CLI calls without this skill.\nallowed-tools: Bash(python3 \"${CLAUDE_SKILL_DIR}\u002Fscripts\u002Fgh_access.py\":*), Bash(git branch --show-current), Bash(git rev-parse:*), Bash(gh run view:*), Bash(gh run list:*), Bash(gh pr view:*), Bash(gh pr checks:*), Read, Grep, {{! tool('ask_user') !}}\n---\n\n\u003Cobjective>\n\nA GitHub Actions workflow-run diagnosis that names the selected run by its identifying tuple, reports the literal status and conclusion, and surfaces the failing job, failing step, and error excerpt.\n\n\u003C\u002Fobjective>\n\n\u003Cworkflow>\n\n\u003Cstep name=\"orient\">\n\nResolve repository identity, host, and gh authentication state in one call. The helper parses `git remote get-url origin`, extracts `owner_repo` and `host`, probes repo access with the active gh account, lists available authenticated accounts for that host, and reports whether the session is TTY-attached:\n\n```bash\npython3 \"${CLAUDE_SKILL_DIR}\u002Fscripts\u002Fgh_access.py\"\n```\n\nThe output is a JSON object with these fields:\n\n| Field                | Meaning                                                                      |\n| -------------------- | ---------------------------------------------------------------------------- |\n| `schema_version`     | Helper schema version (currently `1`)                                        |\n| `owner_repo`         | `owner\u002Frepo` derived from the git remote, or `null` if not derivable         |\n| `host`               | Hostname from the remote (e.g., `github.com`); `null` if not derivable       |\n| `current_account`    | Active gh account, or `null` if `gh` is not authenticated                    |\n| `has_access`         | `true` if the active account can read the repository                         |\n| `available_accounts` | Authenticated gh accounts for `host`                                         |\n| `is_tty`             | `true` only when both stdin and stdout are TTYs                              |\n| `error`              | Non-null when identity could not be resolved (no GitHub remote, parse error) |\n\nIf `error` is non-null or `host` is `null`, stop and report. Otherwise continue; the helper supports `github.com` and GitHub Enterprise hostnames.\n\nIf `has_access` is `false`, `is_tty` is `true`, and `available_accounts` is non-empty, ask the user via `{{! tool('ask_user') !}}` which account to switch to. Calling `gh auth switch --hostname \u003Chost> -u \u003Caccount>` is permitted only after the user has answered — that answer is the explicit instruction the safety rule requires.\n\nIf `has_access` is `false`, `is_tty` is `true`, and `available_accounts` is empty, report the active account, the access failure, and the manual remediation commands. Do not ask for an account switch when no account is available.\n\nIf `has_access` is `false` and `is_tty` is `false` (CI, scripts, batch), report the active account, the access failure, and the manual remediation commands. Do not attempt a switch.\n\nWhen downstream steps need the active branch or HEAD commit, run them just-in-time:\n\n```bash\nBRANCH=$(git branch --show-current)\nHEAD_SHA=$(git rev-parse HEAD)\n```\n\n\u003C\u002Fstep>\n\n\u003Cstep name=\"select_run\">\n\nPick the run by the most-specific identifier the user named. If they named nothing, default to the most recent run on the active branch with `$HEAD_SHA` as the commit. Always name the selection rule in the output so the run is traceable.\n\n```bash\n# By run id (most specific)\ngh run view \"$RUN_ID\" --json databaseId,status,conclusion,workflowName,headBranch,headSha\n\n# By pull request\ngh pr view \"$PR_NUMBER\" --json statusCheckRollup,headRefName\n\n# By commit SHA\ngh run list --commit \"$HEAD_SHA\" --limit 5 \\\n    --json databaseId,status,conclusion,workflowName,headBranch,createdAt\n\n# By branch (default rule when no identifier given)\ngh run list --branch \"$BRANCH\" --limit 5 \\\n    --json databaseId,status,conclusion,workflowName,headSha,createdAt\n```\n\n\u003C\u002Fstep>\n\n\u003Cstep name=\"report_status\">\n\nFor a status request, name these fields in this order before any narrative:\n\n1. repository (`$OWNER_REPO`)\n2. branch\n3. run id\n4. workflow name\n5. status\n6. conclusion\n7. commit SHA\n\nUse only the literal `conclusion` value returned by `gh run view --json conclusion`: `success`, `failure`, `cancelled`, `skipped`, `timed_out`, `action_required`, `neutral`, `stale`, or `startup_failure`. Do not derive states (\"looks failed\", \"probably passing\").\n\n\u003C\u002Fstep>\n\n\u003Cstep name=\"triage_failure\">\n\nFor a failure triage request, retrieve only the failed-step logs first:\n\n```bash\ngh run view \"$RUN_ID\" --log-failed\n```\n\nFrom that output, surface the failing job, the failing step, and at least one error excerpt before any other log retrieval. Request full logs (`gh run view \"$RUN_ID\" --log`) only if `--log-failed` is empty or the user explicitly asks.\n\nWhen listing jobs to find a specific failure point:\n\n```bash\ngh run view \"$RUN_ID\" --json jobs \\\n    --jq '.jobs[] | {id: .databaseId, name: .name, status: .status, conclusion: .conclusion}'\ngh run view \"$RUN_ID\" --job \"$JOB_ID\" --log\n```\n\n\u003C\u002Fstep>\n\n\u003Cstep name=\"check_for_followups\">\n\nIf the run is still in progress (`status` ∈ {`queued`, `in_progress`, `waiting`, `requested`, `pending`}) and the user wants to know when it finishes:\n\n- When the run belongs to a pull request and the PR number is known, run the sanctioned PR-check wait:\n\n  ```bash\n  gh pr checks \u003Cpr-number> --watch --fail-fast --interval 30\n  ```\n\n  The command exits when all PR checks finish, and `--fail-fast` exits when any check fails. After it exits, re-run the selection\u002Fstatus step and report the terminal state.\n\n- When only a run ID, commit SHA, or branch is known, report the current run state and say the sanctioned wait form requires a PR number. Do not create a runtime timer.\n\n\u003C\u002Fstep>\n\n\u003C\u002Fworkflow>\n\n\u003Csafety_rules>\n\n- NEVER invoke `gh run watch`. Unreaped subprocess trees from `gh run watch` exhaust the workstation when the harness fails to reap them across turns.\n- NEVER write `until \u003Ccheck>; do sleep N; done` or `while ! \u003Ccheck>; do sleep N; done`. Per-iteration process trees from these constructs accumulate until the host is exhausted.\n- NEVER call any state-changing `gh` subcommand without an explicit user instruction in the same turn. The user's answer to `{{! tool('ask_user') !}}` is explicit instruction. The full list — also enforced programmatically by `${CLAUDE_SKILL_DIR}\u002Fscripts\u002Fmutation_gate.py` — is `gh auth login`, `gh auth switch`, `gh auth refresh`, `gh auth logout`, `gh run rerun`, `gh run cancel`, `gh run delete`, `gh workflow run`, `gh workflow enable`, and `gh workflow disable`.\n\n\u003C\u002Fsafety_rules>\n\n\u003Cfailure_modes>\n\n**Failure 1: Claude assigned to a variable named `status`.** Claude parsed gh JSON output into a shell variable named `status`, which is read-only under zsh and fails with `read-only variable: status` at the first assignment. Name the variable `run_status` or similar.\n\n**Failure 2: Claude assumed `gh` was authenticated inside a CI runner.** Claude ran `gh` commands in a GitHub Actions job, where default runners do not authenticate `gh`, and the commands failed. When the skill runs inside a CI job, surface \"gh is not authenticated\" and the standard remediation: pipe `${{ secrets.GITHUB_TOKEN }}` into `gh auth login --with-token`. Do not attempt account switching in CI — switching requires a TTY which CI does not have.\n\n**Failure 3: Claude led a status report with narrative.** Claude wrote \"the workflow failed\" before naming the run id, branch, and commit SHA, which left the user unable to verify which run. Lead with the identifying tuple in the order listed in `\u003Cstep name=\"report_status\">`.\n\n\u003C\u002Ffailure_modes>\n\n\u003Csuccess_criteria>\n\n- A status request reports repository, branch, run id, workflow name, status, conclusion, and commit SHA before any narrative.\n- A failure triage request runs `gh run view --log-failed` first and surfaces failing job, failing step, and at least one error excerpt before any other log retrieval.\n- Auth-failure handling matches the TTY\u002Fnon-TTY split: prompt-and-switch on TTY, manual remediation on non-TTY.\n- Conclusion field carries the literal value returned by `gh run view --json conclusion`, never a derivation.\n- In-progress PR-check waiting uses exactly `gh pr checks \u003Cpr-number> --watch --fail-fast --interval 30`; run-only in-progress status is reported without a watcher or runtime timer.\n- No `gh run watch` invocation. No polling loops. No credential or workflow mutation outside an explicit user instruction.\n\n\u003C\u002Fsuccess_criteria>\n\n\u003Cscript_test_record>\n\nEach script is tested with the standard library only; the tests that run offline replace the script's `gh` runner with recorded replies.\n\n- `scripts\u002Fgh_access.py` — remote parsing of SCP-form, URL-form, and malformed remotes; an enterprise host reaching every API call; account filtering by host; a run outside a git checkout; an unreachable repository; and a live run against real `gh` credentials.\n- `scripts\u002Fmutation_gate.py` — a gated command refused without `--user-instructed` and, with it, allowed and logged; an ungated command passed through; a blocked command writing only to stderr.\n- `scripts\u002Fworkflow_inspect.py` — every subcommand against recorded `gh` replies; log truncation at, below, and above `--max-bytes`, including inside a multibyte character; invalid run ids and PR numbers, dash-led tokens such as `--5` and `-abc` included, and invalid `--limit` and `--max-bytes` rejected before any `gh` call; `gh` failures, timeouts, non-JSON output, and wrong-shape JSON, each reported as `\u003Csubcommand> \u003Cargument>: \u003Ccause>. Next: \u003Caction>.` with exit 1; and one live run against real `gh` credentials.\n- All three — standard-library imports only, `capture_output=True` on every `subprocess.run`, no `subprocess.Popen`, no `gh run watch`, and no `time.sleep`.\n\n\u003C\u002Fscript_test_record>\n","\u003Cobjective>\n\nA GitHub Actions workflow-run diagnosis that names the selected run by its identifying tuple, reports the literal status and conclusion, and surfaces the failing job, failing step, and error excerpt.\n\n\u003C\u002Fobjective>\n\n\u003Cworkflow>\n\n\u003Cstep name=\"orient\">\n\nResolve repository identity, host, and gh authentication state in one call. The helper parses `git remote get-url origin`, extracts `owner_repo` and `host`, probes repo access with the active gh account, lists available authenticated accounts for that host, and reports whether the session is TTY-attached:\n\n```bash\npython3 \"${CLAUDE_SKILL_DIR}\u002Fscripts\u002Fgh_access.py\"\n```\n\nThe output is a JSON object with these fields:\n\n| Field                | Meaning                                                                      |\n| -------------------- | ---------------------------------------------------------------------------- |\n| `schema_version`     | Helper schema version (currently `1`)                                        |\n| `owner_repo`         | `owner\u002Frepo` derived from the git remote, or `null` if not derivable         |\n| `host`               | Hostname from the remote (e.g., `github.com`); `null` if not derivable       |\n| `current_account`    | Active gh account, or `null` if `gh` is not authenticated                    |\n| `has_access`         | `true` if the active account can read the repository                         |\n| `available_accounts` | Authenticated gh accounts for `host`                                         |\n| `is_tty`             | `true` only when both stdin and stdout are TTYs                              |\n| `error`              | Non-null when identity could not be resolved (no GitHub remote, parse error) |\n\nIf `error` is non-null or `host` is `null`, stop and report. Otherwise continue; the helper supports `github.com` and GitHub Enterprise hostnames.\n\nIf `has_access` is `false`, `is_tty` is `true`, and `available_accounts` is non-empty, ask the user via `{{! tool('ask_user') !}}` which account to switch to. Calling `gh auth switch --hostname \u003Chost> -u \u003Caccount>` is permitted only after the user has answered — that answer is the explicit instruction the safety rule requires.\n\nIf `has_access` is `false`, `is_tty` is `true`, and `available_accounts` is empty, report the active account, the access failure, and the manual remediation commands. Do not ask for an account switch when no account is available.\n\nIf `has_access` is `false` and `is_tty` is `false` (CI, scripts, batch), report the active account, the access failure, and the manual remediation commands. Do not attempt a switch.\n\nWhen downstream steps need the active branch or HEAD commit, run them just-in-time:\n\n```bash\nBRANCH=$(git branch --show-current)\nHEAD_SHA=$(git rev-parse HEAD)\n```\n\n\u003C\u002Fstep>\n\n\u003Cstep name=\"select_run\">\n\nPick the run by the most-specific identifier the user named. If they named nothing, default to the most recent run on the active branch with `$HEAD_SHA` as the commit. Always name the selection rule in the output so the run is traceable.\n\n```bash\n# By run id (most specific)\ngh run view \"$RUN_ID\" --json databaseId,status,conclusion,workflowName,headBranch,headSha\n\n# By pull request\ngh pr view \"$PR_NUMBER\" --json statusCheckRollup,headRefName\n\n# By commit SHA\ngh run list --commit \"$HEAD_SHA\" --limit 5 \\\n    --json databaseId,status,conclusion,workflowName,headBranch,createdAt\n\n# By branch (default rule when no identifier given)\ngh run list --branch \"$BRANCH\" --limit 5 \\\n    --json databaseId,status,conclusion,workflowName,headSha,createdAt\n```\n\n\u003C\u002Fstep>\n\n\u003Cstep name=\"report_status\">\n\nFor a status request, name these fields in this order before any narrative:\n\n1. repository (`$OWNER_REPO`)\n2. branch\n3. run id\n4. workflow name\n5. status\n6. conclusion\n7. commit SHA\n\nUse only the literal `conclusion` value returned by `gh run view --json conclusion`: `success`, `failure`, `cancelled`, `skipped`, `timed_out`, `action_required`, `neutral`, `stale`, or `startup_failure`. Do not derive states (\"looks failed\", \"probably passing\").\n\n\u003C\u002Fstep>\n\n\u003Cstep name=\"triage_failure\">\n\nFor a failure triage request, retrieve only the failed-step logs first:\n\n```bash\ngh run view \"$RUN_ID\" --log-failed\n```\n\nFrom that output, surface the failing job, the failing step, and at least one error excerpt before any other log retrieval. Request full logs (`gh run view \"$RUN_ID\" --log`) only if `--log-failed` is empty or the user explicitly asks.\n\nWhen listing jobs to find a specific failure point:\n\n```bash\ngh run view \"$RUN_ID\" --json jobs \\\n    --jq '.jobs[] | {id: .databaseId, name: .name, status: .status, conclusion: .conclusion}'\ngh run view \"$RUN_ID\" --job \"$JOB_ID\" --log\n```\n\n\u003C\u002Fstep>\n\n\u003Cstep name=\"check_for_followups\">\n\nIf the run is still in progress (`status` ∈ {`queued`, `in_progress`, `waiting`, `requested`, `pending`}) and the user wants to know when it finishes:\n\n- When the run belongs to a pull request and the PR number is known, run the sanctioned PR-check wait:\n\n  ```bash\n  gh pr checks \u003Cpr-number> --watch --fail-fast --interval 30\n  ```\n\n  The command exits when all PR checks finish, and `--fail-fast` exits when any check fails. After it exits, re-run the selection\u002Fstatus step and report the terminal state.\n\n- When only a run ID, commit SHA, or branch is known, report the current run state and say the sanctioned wait form requires a PR number. Do not create a runtime timer.\n\n\u003C\u002Fstep>\n\n\u003C\u002Fworkflow>\n\n\u003Csafety_rules>\n\n- NEVER invoke `gh run watch`. Unreaped subprocess trees from `gh run watch` exhaust the workstation when the harness fails to reap them across turns.\n- NEVER write `until \u003Ccheck>; do sleep N; done` or `while ! \u003Ccheck>; do sleep N; done`. Per-iteration process trees from these constructs accumulate until the host is exhausted.\n- NEVER call any state-changing `gh` subcommand without an explicit user instruction in the same turn. The user's answer to `{{! tool('ask_user') !}}` is explicit instruction. The full list — also enforced programmatically by `${CLAUDE_SKILL_DIR}\u002Fscripts\u002Fmutation_gate.py` — is `gh auth login`, `gh auth switch`, `gh auth refresh`, `gh auth logout`, `gh run rerun`, `gh run cancel`, `gh run delete`, `gh workflow run`, `gh workflow enable`, and `gh workflow disable`.\n\n\u003C\u002Fsafety_rules>\n\n\u003Cfailure_modes>\n\n**Failure 1: Claude assigned to a variable named `status`.** Claude parsed gh JSON output into a shell variable named `status`, which is read-only under zsh and fails with `read-only variable: status` at the first assignment. Name the variable `run_status` or similar.\n\n**Failure 2: Claude assumed `gh` was authenticated inside a CI runner.** Claude ran `gh` commands in a GitHub Actions job, where default runners do not authenticate `gh`, and the commands failed. When the skill runs inside a CI job, surface \"gh is not authenticated\" and the standard remediation: pipe `${{ secrets.GITHUB_TOKEN }}` into `gh auth login --with-token`. Do not attempt account switching in CI — switching requires a TTY which CI does not have.\n\n**Failure 3: Claude led a status report with narrative.** Claude wrote \"the workflow failed\" before naming the run id, branch, and commit SHA, which left the user unable to verify which run. Lead with the identifying tuple in the order listed in `\u003Cstep name=\"report_status\">`.\n\n\u003C\u002Ffailure_modes>\n\n\u003Csuccess_criteria>\n\n- A status request reports repository, branch, run id, workflow name, status, conclusion, and commit SHA before any narrative.\n- A failure triage request runs `gh run view --log-failed` first and surfaces failing job, failing step, and at least one error excerpt before any other log retrieval.\n- Auth-failure handling matches the TTY\u002Fnon-TTY split: prompt-and-switch on TTY, manual remediation on non-TTY.\n- Conclusion field carries the literal value returned by `gh run view --json conclusion`, never a derivation.\n- In-progress PR-check waiting uses exactly `gh pr checks \u003Cpr-number> --watch --fail-fast --interval 30`; run-only in-progress status is reported without a watcher or runtime timer.\n- No `gh run watch` invocation. No polling loops. No credential or workflow mutation outside an explicit user instruction.\n\n\u003C\u002Fsuccess_criteria>\n\n\u003Cscript_test_record>\n\nEach script is tested with the standard library only; the tests that run offline replace the script's `gh` runner with recorded replies.\n\n- `scripts\u002Fgh_access.py` — remote parsing of SCP-form, URL-form, and malformed remotes; an enterprise host reaching every API call; account filtering by host; a run outside a git checkout; an unreachable repository; and a live run against real `gh` credentials.\n- `scripts\u002Fmutation_gate.py` — a gated command refused without `--user-instructed` and, with it, allowed and logged; an ungated command passed through; a blocked command writing only to stderr.\n- `scripts\u002Fworkflow_inspect.py` — every subcommand against recorded `gh` replies; log truncation at, below, and above `--max-bytes`, including inside a multibyte character; invalid run ids and PR numbers, dash-led tokens such as `--5` and `-abc` included, and invalid `--limit` and `--max-bytes` rejected before any `gh` call; `gh` failures, timeouts, non-JSON output, and wrong-shape JSON, each reported as `\u003Csubcommand> \u003Cargument>: \u003Ccause>. Next: \u003Caction>.` with exit 1; and one live run against real `gh` credentials.\n- All three — standard-library imports only, `capture_output=True` on every `subprocess.run`, no `subprocess.Popen`, no `gh run watch`, and no `time.sleep`.\n\n\u003C\u002Fscript_test_record>\n",{"name":5,"description":7,"allowed-tools":52},"Bash(python3 \"${CLAUDE_SKILL_DIR}\u002Fscripts\u002Fgh_access.py\":*), Bash(git branch --show-current), Bash(git rev-parse:*), Bash(gh run view:*), Bash(gh run list:*), Bash(gh pr view:*), Bash(gh pr checks:*), Read, Grep, {{! tool('ask_user') !}}","main","978d51c51d68c99cffb2ba48f7cad9d2f07e5738","src\u002Fplugins\u002Fproduct-tree\u002Fskills\u002Finspect-github-actions","https:\u002F\u002Fgithub.com\u002Foutcomeeng\u002Fplugins","https:\u002F\u002Fgithub.com\u002Foutcomeeng","https:\u002F\u002Foutcome.engineering","Spec-driven development for AI-assisted engineering","2026-11-12 11:34:11",{"source":8,"skillName":5,"commands":62,"prompt":72,"zipAvailable":73},[63,66,69],{"tool":64,"command":65},"npx","npx skills add outcomeeng\u002Fplugins --skill inspect-github-actions",{"tool":67,"command":68},"bunx","bunx skills add outcomeeng\u002Fplugins --skill inspect-github-actions",{"tool":70,"command":71},"pnpm","pnpm dlx skills add outcomeeng\u002Fplugins --skill inspect-github-actions","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Foutcomeeng\u002Fplugins\u002Fblob\u002Fmain\u002Fsrc\u002Fplugins\u002Fproduct-tree\u002Fskills\u002Finspect-github-actions\u002FSKILL.md",true,[75,81,85],{"path":76,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":79,"sourceHtmlUrl":80},"scripts\u002Fgh_access.py","SCRIPT","脚本",8966,"https:\u002F\u002Fgithub.com\u002Foutcomeeng\u002Fplugins\u002Fblob\u002Fmain\u002Fsrc\u002Fplugins\u002Fproduct-tree\u002Fskills\u002Finspect-github-actions\u002Fscripts\u002Fgh_access.py",{"path":82,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":83,"sourceHtmlUrl":84},"scripts\u002Fmutation_gate.py",7605,"https:\u002F\u002Fgithub.com\u002Foutcomeeng\u002Fplugins\u002Fblob\u002Fmain\u002Fsrc\u002Fplugins\u002Fproduct-tree\u002Fskills\u002Finspect-github-actions\u002Fscripts\u002Fmutation_gate.py",{"path":86,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":87,"sourceHtmlUrl":88},"scripts\u002Fworkflow_inspect.py",18069,"https:\u002F\u002Fgithub.com\u002Foutcomeeng\u002Fplugins\u002Fblob\u002Fmain\u002Fsrc\u002Fplugins\u002Fproduct-tree\u002Fskills\u002Finspect-github-actions\u002Fscripts\u002Fworkflow_inspect.py",[90,96,130,146,163,176],{"skillNo":91,"name":92,"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":93,"categories":94,"keywords":95,"publishedAt":47},"01M71G25RZTPQG9KJ00JCHC1F7","plugin","https:\u002F\u002Fgithub.com\u002Foutcomeeng\u002Fplugins\u002Fblob\u002Fmain\u002Fsrc\u002Ftemplates\u002Fplugin\u002FSKILL.md",[],[92],{"skillNo":97,"name":98,"nameZh":6,"description":99,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":100,"categories":101,"keywords":110,"publishedAt":47},"01M71G23DCX3SV60H63HBBKQ6J","sanitize-powerpoint","ALWAYS invoke this skill when sanitizing, cleaning up, auditing, or aligning a PowerPoint (.pptx) deck — slide-master and layout structure, layout type attributes, stray fonts, non-theme colors, or layout naming. NEVER hand-edit pptx XML without this skill.","https:\u002F\u002Fgithub.com\u002Foutcomeeng\u002Fplugins\u002Fblob\u002Fmain\u002Fsrc\u002Fplugins\u002Fwork\u002Fskills\u002Fsanitize-powerpoint\u002FSKILL.md",[102,105],{"categoryNo":103,"categoryName":104,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000003","演示文稿",{"categoryNo":106,"categoryName":107,"taxonomyType":108,"taxonomyTypeDesc":109},"01JBSEEDCAT000000000000034","行政与办公人员","PROFESSION","适用职业",[111,112,113,114,115,116,117,43,118,119,120,121,122,123,124,125,126,127,128,129],"sanitize powerpoint","powerpoint","sanitize","fonts","type","cleaning","structure","attributes","theme","pptx","naming","layout","deck","up","edit","xml","master","invoke","when",{"skillNo":131,"name":132,"nameZh":6,"description":133,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":134,"categories":135,"keywords":136,"publishedAt":47},"01M71G21PQKBCDECHGVYSKPJW5","draw-excalidraw","ALWAYS invoke this skill when creating Excalidraw diagrams, visualizing workflows, architectures, or concepts. NEVER generate Excalidraw JSON without this skill.","https:\u002F\u002Fgithub.com\u002Foutcomeeng\u002Fplugins\u002Fblob\u002Fmain\u002Fsrc\u002Fplugins\u002Fwork\u002Fskills\u002Fdraw-excalidraw\u002FSKILL.md",[],[137,138,139,140,141,43,128,142,143,129,144,145],"draw excalidraw","excalidraw","draw","diagrams","architectures","generate","workflows","concepts","json",{"skillNo":147,"name":148,"nameZh":6,"description":149,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":150,"categories":151,"keywords":155,"publishedAt":47},"01M71G1ZMNGFD37RZYM620XM2C","typescript-test-standards","TypeScript test standards enforced across all skills. Loaded by other skills, not invoked directly.","https:\u002F\u002Fgithub.com\u002Foutcomeeng\u002Fplugins\u002Fblob\u002Fmain\u002Fsrc\u002Fplugins\u002Ftypescript\u002Fskills\u002Ftypescript-test-standards\u002FSKILL.md",[152],{"categoryNo":153,"categoryName":154,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量",[156,157,158,159,160,161,162],"typescript","typescript test standards","test","standards","false","read","across",{"skillNo":164,"name":165,"nameZh":6,"description":166,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":167,"categories":168,"keywords":172,"publishedAt":47},"01M71G1XBH0X1VCTR7269MDGSY","typescript-code-standards","TypeScript code standards enforced across all skills. Loaded by other skills, not invoked directly.","https:\u002F\u002Fgithub.com\u002Foutcomeeng\u002Fplugins\u002Fblob\u002Fmain\u002Fsrc\u002Fplugins\u002Ftypescript\u002Fskills\u002Ftypescript-code-standards\u002FSKILL.md",[169],{"categoryNo":170,"categoryName":171,"taxonomyType":108,"taxonomyTypeDesc":109},"01JBSEEDCAT000000000000030","开发工程师",[156,173,174,175,159,160,161,162],"code","typescript code standards","code standards",{"skillNo":177,"name":178,"nameZh":6,"description":179,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":180,"categories":181,"keywords":182,"publishedAt":47},"01M71G1TQ3VN45SJ75DFMJDB9W","typescript-architecture-standards","TypeScript ADR conventions enforced across architect and auditor skills. Loaded by other skills, not invoked directly.","https:\u002F\u002Fgithub.com\u002Foutcomeeng\u002Fplugins\u002Fblob\u002Fmain\u002Fsrc\u002Fplugins\u002Ftypescript\u002Fskills\u002Ftypescript-architecture-standards\u002FSKILL.md",[],[183,159,184,185,156,186,187,162,161,188,160,189],"architecture standards","typescript architecture standards","architecture","adr","architect","auditor","conventions"]