Skip to content

ci: enforce the 'never surveil' brand guardrail as a copy-word CI check #54

Description

@nandal

Background

Our brand guardrail (see CLAUDE.md) is firm: iEye watches over you, never watches you. Copy is always "looking out for / you are seen / never alone" — never "monitor / track / surveil." Today this is enforced by convention only. Per our "enforce structurally, not by convention" principle, let's make it a real CI gate.

The task

Add a small check that scans user-facing copy for a denylist of surveillance words and fails CI on a hit, with an allowlist for legitimate phrases (e.g. "watch over").

  • A node or shell script, exposed as npm run lint:copy in landing/, plus a CI step.
  • Denylist (seed, refine in the PR): monitor, surveil, surveillance, spy, track you, watch you, camera, eavesdrop.
  • Allowlist: watch over, looking out, oversee.
  • Scope to copy, not code: start with landing/src/components/HonestyLine.tsx, landing/src/lib/legalCopy.ts, landing/src/pages/*.tsx, and the app's user-facing strings. Don't scan technical identifiers/comments (a "tracking issue" reference must not trip it).

Acceptance criteria

  • Adding "we monitor you" to a copy file turns CI red; "we watch over you" stays green.
  • npm run lint:copy runs locally and in CI.
  • A one-line note in CONTRIBUTING.md pointing to the check.

Why this is a good first issue

Self-contained, needs no app architecture knowledge, and it directly protects a load-bearing guardrail. Pointers: CLAUDE.md, docs/standards/.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestgood first issueGood for newcomersjavascriptPull requests that update javascript code

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions