chore(process): codify Nibbler review gate (#204)

Closes #193 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Juan Manuel Servera committed May 25, 2026 at 23:10 UTC bcc2099dd8be0ac783bb77061c2c61d2c528da60
4 files changed +21 -65
.github/pull_request_template.md new
+3
@@ -0,0 +1,3 @@
1 +## External-facing changes
2 +
3 +- [ ] If this PR ships copy or graphics that will appear OUTSIDE this repo (social posts, launch blog, announcements, press), I tagged @squad:nibbler for an RAI sign-off before merge.
.squad/decisions.md
+12
@@ -1142,3 +1142,15 @@ This restores/regenerates from existing data without polluting the archive.
1142 - `format_divergences(reader_mode=False)` — new kwarg. Replaces instruction bullets with reader-friendly narrative
1143 - `analyze_fallback._strip_ai_instructions(content)` — new helper. Applied in no-AI path to post-process rendered content
1144 - **Consequences:** AI prompt path unchanged (full instructions + list continue to model); no-AI fallback now produces clean reader output. 16 new tests cover truncation, sorting, instruction stripping, narrative injection. All 498 tests passing. PR #135 merged.
1145 +
1146 +## Nibbler Review Gate for External-Facing Artifacts (2026-05-25)
1147 +
1148 +**Source:** Nibbler audit recommendation
1149 +**Adopted by:** Leela
1150 +**Status:** Adopted
1151 +
1152 +External-facing launch and announcement artifacts require Nibbler review before publication or merge. This includes Hacker News posts, LinkedIn announcements, Bluesky threads, Reddit posts, launch blogs, press copy, launch graphics, and similar materials that will appear outside this repository.
1153 +
1154 +PRs that ship this copy or graphics must tag `@squad:nibbler` for RAI sign-off and use the [Responsible AI checklist](skills/responsible-ai-review/SKILL.md) (`.squad/skills/responsible-ai-review/SKILL.md`) before merge.
1155 +
1156 +**Rationale:** Distribution copy can create reputational, safety, accessibility, or policy risk even when the underlying code is unchanged. Nibbler provides the hostile-reader and responsible-AI perspective before users encounter the material.
.squad/decisions/inbox/nibbler-review-gate.md deleted
-65
@@ -1,65 +0,0 @@
1 -# Decision: Nibbler Review Gate
2 -
3 -**Date:** 2026-05-25
4 -**Author:** Nibbler (Responsible AI / Safety Reviewer)
5 -**Status:** Proposed — pending team adoption
6 -**Depends on:** Nibbler charter (`.squad/agents/nibbler/charter.md`)
7 -
8 ----
9 -
10 -## Decision
11 -
12 -**Nibbler review is required before approval/merge** for any PR that touches:
13 -
14 -- **User-facing content** — weekly articles, privacy policy, about page, error pages
15 -- **Design assets** — icon, logo, OG images, favicon, safari-pinned-tab
16 -- **Prompts** — any file under `prompts/` that feeds the Farnsworth pipeline
17 -- **Distribution copy** — launch posts, announcement drafts, community messages
18 -- **Consent UX** — cookie banner, privacy choices, cookie configuration (`data/cookieconsent.json`)
19 -- **Analytics integration** — GA4 tags, any tracking pixel or beacon
20 -
21 -**Skip Nibbler review for:**
22 -
23 -- Code-only PRs: workflow YAML, scripts, crawler logic, Hugo templates with no user-visible text changes — **unless** they handle user data or AI output
24 -- Dependency bumps, lock file updates, CI config changes
25 -- Content under `data/raw/` or `data/analyzed/` (Farnsworth's working files, not shipped to users)
26 -
27 -When in doubt: add the `nibbler-review` label and Nibbler will triage within the SLA below.
28 -
29 ----
30 -
31 -## How to Request Review
32 -
33 -1. Add the **`nibbler-review`** label to the PR, **or**
34 -2. @-mention nibbler in the PR description or a comment
35 -
36 -Nibbler will:
37 -- Run the applicable checklist from `.squad/skills/responsible-ai-review/SKILL.md`
38 -- Comment with pass/fail per checklist section
39 -- Block merge (reviewer lock) on blocker/high findings until resolved
40 -- Approve with notes on medium/low findings (tracked as follow-up issues, not blockers)
41 -
42 ----
43 -
44 -## SLA
45 -
46 -**Initial review:** within one working day of label/mention (human-driven workflow).
47 -**Re-review after fix:** within one working day of fix confirmation.
48 -**Periodic audit:** once per month against merged content (catch regressions).
49 -
50 ----
51 -
52 -## Rationale
53 -
54 -The SS-icon near-miss (caught by jmservera, not by any agent) established the failure mode: makers focused on craft miss adversarial misreading. Nibbler exists to institutionalize the "hostile reader" perspective before users encounter it. The review gate makes this catch systematic, not accidental.
55 -
56 -This gate is lightweight by design. Blocker/high findings are rare; most reviews will be one-line approvals. The cost of the gate is low; the cost of a missed hate-symbol, dark-pattern consent UX, or hallucinated factual claim is not.
57 -
58 ----
59 -
60 -## References
61 -
62 -- RAI skill: `.squad/skills/responsible-ai-review/SKILL.md`
63 -- Nibbler charter: `.squad/agents/nibbler/charter.md`
64 -- Initial audit: `docs/responsible-ai/2026-05-25-initial-audit.md`
65 -- Icon safety incident: `.squad/decisions/inbox/copilot-directive-icon-ss-association.md` (if present)
.squad/templates/issue-lifecycle.md
+6
@@ -337,6 +337,12 @@ Scan → Categorize → Dispatch → Watch → Report → Loop
337
338 See `.squad/templates/ralph-reference.md` for Ralph's full lifecycle.
339
340 +## External-Facing Artifact Review Gate
341 +
342 +External-facing artifacts require Nibbler review before publication or merge. This includes social posts, launch blog copy, announcements, press materials, launch graphics, and other copy or graphics intended to appear outside this repository.
343 +
344 +To request sign-off, tag `@squad:nibbler` on the PR and use the [Responsible AI checklist](../skills/responsible-ai-review/SKILL.md) (`.squad/skills/responsible-ai-review/SKILL.md`).
345 +
346 ## PR Review Handling
347
348 ### Automated Approval (CI-only projects)