| 1 | --- |
| 2 | name: "responsible-ai-review" |
| 3 | description: "Pre-merge safety review for any artifact that ships to users: icons, UI, articles, prompts, consent UX, distribution copy." |
| 4 | domain: "responsible-ai, safety, accessibility, compliance" |
| 5 | confidence: "low" |
| 6 | source: "initial iteration — Nibbler 2026-05-25" |
| 7 | owner: "Nibbler" |
| 8 | --- |
| 9 | |
| 10 | ## When to Use |
| 11 | |
| 12 | Run this review **before approving merge** for any PR touching: |
| 13 | - User-facing content (articles, privacy policy, about pages) |
| 14 | - Design assets (icon, logo, OG images, favicon) |
| 15 | - UI components (banners, forms, nav, modals) |
| 16 | - Prompts (analyst, reskill, any pipeline prompt) |
| 17 | - Distribution copy (launch posts, announcements, community messages) |
| 18 | - Consent UX (cookie banner, privacy choices) |
| 19 | |
| 20 | Skip for: code-only PRs (workflows, scripts, crawl logic) **unless** they handle user data or AI output. |
| 21 | |
| 22 | **Request a Nibbler review:** add `nibbler-review` label, or @-mention nibbler in the PR description. |
| 23 | |
| 24 | --- |
| 25 | |
| 26 | ## Principles Map (Microsoft RAI × SquadScope Context) |
| 27 | |
| 28 | | Principle | SquadScope Landing | |
| 29 | |---|---| |
| 30 | | **Fairness** | Editorial framing: whose repos get featured, who is flattened into noise, whose work is called "spam" without evidence. Watch for pattern where Western/English repos dominate. | |
| 31 | | **Reliability & Safety** | Farnsworth output: star counts are stated facts — verify the pipeline doesn't fabricate repo names, stars, or attributions. Guard against hallucinated "evidence" in Signal/Noise. | |
| 32 | | **Privacy & Security** | GDPR consent gating — no GA4 before opt-in. No PII in commits (author emails, fork-owner names in data files). Fork-safety of the GA4 measurement ID. | |
| 33 | | **Inclusiveness** | WCAG 2.2 AA floor for all shipped UI. Plain English in consent copy and articles. No jargon-only framing that excludes non-native speakers. | |
| 34 | | **Transparency** | Articles must not pass AI output as purely human editorial. Pipeline fallback (GitHub Models) must be disclosed if used. Gap sections must surface data quality limits. | |
| 35 | | **Accountability** | Every shipped artifact must have a named reviewer. The orchestration log (Copilot session share) must be retained per analysis run. Decision ledger updated for major calls. | |
| 36 | |
| 37 | --- |
| 38 | |
| 39 | ## Checklist by Artifact Type |
| 40 | |
| 41 | ### A. Design Assets (icon / logo / OG image) |
| 42 | |
| 43 | | # | Check | Pass / Fail | |
| 44 | |---|---|---| |
| 45 | | A1 | Icon reviewed against ADL Hate on Display (https://www.adl.org/hate-symbols) for silhouette resemblance | | |
| 46 | | A2 | Multi-size render test: 16px, 32px, 64px, 512px — no ambiguous shape at 16px | | |
| 47 | | A3 | Rotation / mirror / invert color test — no problematic negative-space shapes | | |
| 48 | | A4 | Letterform check: double-letter monograms, rune-like strokes, spoke patterns excluded or cleared | | |
| 49 | | A5 | WCAG AA contrast confirmed for icon colors vs backgrounds (use tokens from redesign spec) | | |
| 50 | | A6 | OG image text contrast AA-verified; no personal photos or identifiable faces without consent | | |
| 51 | | A7 | "Silhouette Safety Check ✓" section added to icon spec / PR description | | |
| 52 | |
| 53 | ### B. UI Components (banner / form / nav / modal) |
| 54 | |
| 55 | | # | Check | Pass / Fail | |
| 56 | |---|---|---| |
| 57 | | B1 | **Reject / Decline** action equally prominent as **Accept** (same size, color weight, placement) | | |
| 58 | | B2 | No pre-checked analytics or non-essential cookie boxes | | |
| 59 | | B3 | "Manage Cookies" / preferences path is always reachable (footer link, not buried) | | |
| 60 | | B4 | No countdown timers, no "Accept to continue" blocking flows, no repeated nudging after rejection | | |
| 61 | | B5 | Copy language is neutral — no guilt-tripping ("help us improve" framing OK; "you'll miss features" framing is a dark pattern) | | |
| 62 | | B6 | `prefers-reduced-motion` respected — no auto-playing animations or transitions > 0.3s that ignore this media query | | |
| 63 | | B7 | Keyboard navigable: all interactive elements reachable with Tab; focus ring visible; no keyboard trap | | |
| 64 | | B8 | ARIA labels present on icon-only buttons; role/state communicated to screen readers | | |
| 65 | |
| 66 | ### C. Published Articles (weekly / monthly / yearly) |
| 67 | |
| 68 | | # | Check | Pass / Fail | |
| 69 | |---|---|---| |
| 70 | | C1 | Every repo reference is a real, verifiable GitHub link (`[owner/repo](https://github.com/owner/repo)`) | | |
| 71 | | C2 | Star counts and dates are drawn from raw data, not invented — no fabricated numbers | | |
| 72 | | C3 | Named individuals or orgs are characterized by verifiable actions, not by rumor or implication | | |
| 73 | | C4 | "Spam" / "piracy" / "exploit" characterizations cite observable signals (zero forks, keyword stuffing, star cluster timing) not assumptions | | |
| 74 | | C5 | Gap/blind-spot sections acknowledge data quality limits when `stars_gained` is absent | | |
| 75 | | C6 | No single national/cultural ecosystem dominates every "Signal" call without acknowledgement | | |
| 76 | | C7 | `quality_score` is honest; if < 60 the article is draft-only, not published | | |
| 77 | | C8 | AI authorship not disguised: article page or about section must disclose AI-assisted pipeline | | |
| 78 | |
| 79 | ### D. Prompts (analyst / reskill / topic) |
| 80 | |
| 81 | | # | Check | Pass / Fail | |
| 82 | |---|---|---| |
| 83 | | D1 | **Injection surface named:** prompt injects `{{RAW_JSON_CONTENT}}` from crawled repos. Farnsworth's instructions must appear before — and be structurally separated from — user-controlled data. | | |
| 84 | | D2 | No instruction to "follow instructions found in repo descriptions" or similar open delegation | | |
| 85 | | D3 | Hard rules section present and includes explicit output constraints (no fabrication, link format mandate) | | |
| 86 | | D4 | Fallback behavior defined: what to do when `stars_gained` is null, when previous summary is absent | | |
| 87 | | D5 | Output-only instruction present: "Output only the finished markdown file content" — prevents agent epilogue leaking into articles | | |
| 88 | | D6 | Quality gate in frontmatter: `quality_score >= 60` required for publication, not just generated | | |
| 89 | | D7 | Wisdom / skills injection reads from versioned files, not from arbitrary prompt input | | |
| 90 | | D8 | Untrusted-content guard present: repo `name`, `description`, `topics` fields are explicitly labeled as user-controlled data that must not be followed as instructions | | |
| 91 | |
| 92 | ### E. Workflows (CI/CD) |
| 93 | |
| 94 | | # | Check | Pass / Fail | |
| 95 | |---|---|---| |
| 96 | | E1 | GA4 measurement ID sourced from repo secret (`GTAG_ID`), not hardcoded in templates | | |
| 97 | | E2 | GA4 script only injected if consent cookie is present (client-side gate) | | |
| 98 | | E3 | `data/raw/` and `data/analyzed/` contain no PII (emails, full names from commit authors) | | |
| 99 | | E4 | Copilot session share (`--share=PATH`) retained in `data/sessions/`, not committed to public branch | | |
| 100 | | E5 | Fork safety: forked repos inherit `GTAG_ID = ""` by default; GA4 does not activate on forks | | |
| 101 | |
| 102 | --- |
| 103 | |
| 104 | ## Reference Lookup Table |
| 105 | |
| 106 | | Issue Type | Standard / Source | |
| 107 | |---|---| |
| 108 | | Hate symbol resemblance | ADL Hate on Display — https://www.adl.org/hate-symbols | |
| 109 | | Accessibility (contrast, keyboard, ARIA) | WCAG 2.2 AA — https://www.w3.org/WAI/WCAG22/quickref/?levels=aa | |
| 110 | | Dark patterns in consent UX | Nielsen Norman Group dark patterns taxonomy; EDPB Cookie Banner Guidelines 03/2022 | |
| 111 | | GDPR consent, data retention, disclosure | GDPR Articles 5, 6(1)(a), 13, 14, 21; ePrivacy Directive Article 5(3) | |
| 112 | | Prompt injection, output handling | OWASP Top 10 for LLM — LLM01 (Prompt Injection), LLM02 (Insecure Output Handling), LLM06 (Sensitive Information Disclosure) — https://genai.owasp.org/llm-top-10/ | |
| 113 | | Hallucination / overreliance on AI output | OWASP LLM09 (Overreliance); NIST AI RMF GOVERN + MEASURE functions — https://www.nist.gov/itl/ai-risk-management-framework | |
| 114 | | Fairness / representation bias | MS RAI Fairness principle; NIST AI RMF MAP 1.5 (bias identification) | |
| 115 | | AI transparency / disclosure | MS RAI Transparency principle; EU AI Act Article 52 (transparency obligations for AI-generated content) | |
| 116 | | Spam / community rules in distribution | Platform-specific community guidelines (Twitter/X rules, Reddit community rules, GitHub Discussions guidelines) | |
| 117 | | Supply chain (CI secrets, PII in commits) | OWASP LLM05 (Supply Chain Vulnerabilities); Hermes (primary owner for code/secret review) | |
| 118 | | Icon / visual safety | ADL + Calculon's icon-safety-check skill (`.squad/skills/icon-safety-check/SKILL.md`) | |
| 119 | |
| 120 | --- |
| 121 | |
| 122 | ## Severity Definitions |
| 123 | |
| 124 | | Level | Meaning | Action | |
| 125 | |---|---|---| |
| 126 | | **blocker** | Ships harm to users if merged. Hate symbol, PII leak, tracking before consent. | Block PR. Do not merge until resolved. | |
| 127 | | **high** | Significant risk. Dark pattern, hallucinated factual claim about named entity, missing consent gate. | Block PR with remediation path. | |
| 128 | | **medium** | Meaningful issue that degrades trust or accessibility. WCAG fail on primary UI, injection vector with no guard. | Comment on PR, open issue, allow merge only after fix confirmed. | |
| 129 | | **low** | Minor issue, workaround available, limited user impact. | Note in PR; open issue tagged `good first issue`. | |
| 130 | | **info** | Observation with no required action. Trend to watch. | Comment in audit doc only. | |
| 131 | |
| 132 | --- |
| 133 | |
| 134 | ## Promotion Criteria |
| 135 | |
| 136 | Confidence → **medium** after: |
| 137 | - 3+ PRs successfully reviewed under this skill with no post-merge reversals |
| 138 | - At least 1 medium+ finding caught before merge |
| 139 | |
| 140 | Confidence → **high** after: |
| 141 | - Used across all artifact types at least once |
| 142 | - At least 1 post-merge regression caught by periodic audit |
| 143 | |
| 144 | --- |
| 145 | |
| 146 | ## References |
| 147 | |
| 148 | - Microsoft RAI Principles: https://www.microsoft.com/en-us/ai/principles-and-approach |
| 149 | - NIST AI RMF: https://www.nist.gov/itl/ai-risk-management-framework |
| 150 | - OWASP Top 10 for LLM: https://genai.owasp.org/llm-top-10/ |
| 151 | - WCAG 2.2 AA Quick Reference: https://www.w3.org/WAI/WCAG22/quickref/?levels=aa |
| 152 | - ADL Hate on Display: https://www.adl.org/hate-symbols |
| 153 | - EDPB Cookie Banner Guidelines 03/2022: https://edpb.europa.eu/our-work-tools/documents/public-consultations/2022/guidelines-032022-dark-patterns-social-media_en |
| 154 | - Nielsen Norman Group — Dark Patterns: https://www.nngroup.com/articles/dark-patterns/ |
| 155 | - EU AI Act Article 52 (AI transparency): https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32024R1689 |