From company-profile
Scan the working tree for company-profile invariant violations (banned terms, hardcoded hex, physical CSS, em dashes, in-memory rate limiting).
How this command is triggered — by the user, by Claude, or both
Slash command
/company-profile:invariant-check optional path to scan defaults to src + content + messagesFiles this command reads when invoked
This command is limited to the following tools:
The summary Claude sees in its command listing — used to decide when to auto-load this command
Scan this project for mechanical invariant violations. Background and rationale
are in the `company-profile-website` skill's
`references/invariants-and-guardrails.md`.
First, load the banned/required terms: read `INVARIANTS.md` at the project root
if it exists, else `hooks/invariants.json` from the company-profile plugin, else
use the default banned standalone term `Pharma` (the word alone; the phrase
"Pharmaceuticals and Medical Devices" is allowed).
Scan path: ${ARGUMENTS:-src content messages}. Run these checks and report a
table of `Check | Count | Sample locations | Verdict`:
1. **E...Scan this project for mechanical invariant violations. Background and rationale
are in the company-profile-website skill's
references/invariants-and-guardrails.md.
First, load the banned/required terms: read INVARIANTS.md at the project root
if it exists, else hooks/invariants.json from the company-profile plugin, else
use the default banned standalone term Pharma (the word alone; the phrase
"Pharmaceuticals and Medical Devices" is allowed).
Scan path: ${ARGUMENTS:-src content messages}. Run these checks and report a
table of Check | Count | Sample locations | Verdict:
grep -rn "—" <path>.grep -rniE "\\b<term>\\b" <path> then manually
exclude the allowed phrase from the hits.grep -rnE "#[0-9a-fA-F]{3,8}\\b" src/components (allow none; tokens live in
globals.css / the Tailwind config only).grep -rnE "\\b(ml|mr|pl|pr)-[0-9]" src/components and
grep -rnE "\\b(left|right|text-left|text-right)\\b" src/components. Logical
equivalents are ms/me/ps/pe/text-start/text-end.grep -rnE "new Map\\(|in-memory|setInterval" src/lib near any ratelimit
module; confirm the limiter imports @upstash/ratelimit.For each hit, decide if it is a true violation or an allowed exception (e.g. a
hex inside globals.css is fine; a right inside a comment is fine). Report
only true violations as failures, with the exact file:line. If a check is
clean, say so explicitly. End with an overall PASS/FAIL and the one or two most
important fixes.
npx claudepluginhub omaression/company-profile-plugin --plugin company-profile