From 898b52edcb47bcb3e9d6106e74ca73e74ea01e70 Mon Sep 17 00:00:00 2001 From: sillylaird Date: Thu, 3 Sep 2026 00:33:59 +0000 Subject: import live www.sillylaird.ca webroot --- .agents/skills/openclaw-ghsa-maintainer/SKILL.md | 87 ++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 .agents/skills/openclaw-ghsa-maintainer/SKILL.md (limited to '.agents/skills/openclaw-ghsa-maintainer') diff --git a/.agents/skills/openclaw-ghsa-maintainer/SKILL.md b/.agents/skills/openclaw-ghsa-maintainer/SKILL.md new file mode 100644 index 0000000..4458197 --- /dev/null +++ b/.agents/skills/openclaw-ghsa-maintainer/SKILL.md @@ -0,0 +1,87 @@ +--- +name: openclaw-ghsa-maintainer +description: Maintainer workflow for OpenClaw GitHub Security Advisories (GHSA). Use when Codex needs to inspect, patch, validate, or publish a repo advisory, verify private-fork state, prepare advisory Markdown or JSON payloads safely, handle GHSA API-specific publish constraints, or confirm advisory publish success. +--- + +# OpenClaw GHSA Maintainer + +Use this skill for repo security advisory workflow only. Keep general release work in `openclaw-release-maintainer`. + +## Respect advisory guardrails + +- Before reviewing or publishing a repo advisory, read `SECURITY.md`. +- Ask permission before any publish action. +- Treat this skill as GHSA-only. Do not use it for stable or beta release work. + +## Fetch and inspect advisory state + +Fetch the current advisory and the latest published npm version: + +```bash +gh api /repos/openclaw/openclaw/security-advisories/ +npm view openclaw version --userconfig "$(mktemp)" +``` + +Use the fetch output to confirm the advisory state, linked private fork, and vulnerability payload shape before patching. + +## Verify private fork PRs are closed + +Before publishing, verify that the advisory's private fork has no open PRs: + +```bash +fork=$(gh api /repos/openclaw/openclaw/security-advisories/ | jq -r .private_fork.full_name) +gh pr list -R "$fork" --state open +``` + +The PR list must be empty before publish. + +## Prepare advisory Markdown and JSON safely + +- Write advisory Markdown via heredoc to a temp file. Do not use escaped `\n` strings. +- Build PATCH payload JSON with `jq`, not hand-escaped shell JSON. + +Example pattern: + +```bash +cat > /tmp/ghsa.desc.md <<'EOF' + +EOF + +jq -n --rawfile desc /tmp/ghsa.desc.md \ + '{summary,severity,description:$desc,vulnerabilities:[...]}' \ + > /tmp/ghsa.patch.json +``` + +## Apply PATCH calls in the correct sequence + +- Do not set `severity` and `cvss_vector_string` in the same PATCH call. +- Use separate calls when the advisory requires both fields. +- Publish by PATCHing the advisory and setting `"state":"published"`. There is no separate `/publish` endpoint. + +Example shape: + +```bash +gh api -X PATCH /repos/openclaw/openclaw/security-advisories/ \ + --input /tmp/ghsa.patch.json +``` + +## Publish and verify success + +After publish, re-fetch the advisory and confirm: + +- `state=published` +- `published_at` is set +- the description does not contain literal escaped `\\n` + +Verification pattern: + +```bash +gh api /repos/openclaw/openclaw/security-advisories/ +jq -r .description < /tmp/ghsa.refetch.json | rg '\\\\n' +``` + +## Common GHSA footguns + +- Publishing fails with HTTP 422 if required fields are missing or the private fork still has open PRs. +- A payload that looks correct in shell can still be wrong if Markdown was assembled with escaped newline strings. +- Advisory PATCH sequencing matters; separate field updates when GHSA API constraints require it. -- cgit v1.2.3