# Compliance Guard

WordPress admin plugin for US research-use-only peptide suppliers that want a plain-English check of public website text, checkout controls, saved proof, and payment-review readiness.

This plugin is a compliance support tool, not legal advice. It is designed to surface risky claims so a business can remove or correct them with qualified counsel. It does not attempt to bypass regulators, platforms, payment processors, or private crawlers.

Non-dismissable notice shown in the admin and exports:

> This tool surfaces patterns the FDA has cited in past warning letters and patterns high-risk processors flag during underwriting. It is not legal advice. Consult qualified counsel for any specific situation.

## Compatible Hosts

Compliance Guard has been refactored for shared-host malware-scanner compatibility, including the heuristics commonly used by SiteGround, WP Engine, Kinsta, Cloudways, Bluehost, GoDaddy, HostGator, and DreamHost. The plugin avoids storing high-risk scanner-rule tokens as raw contiguous source literals while preserving the same runtime detection behavior.

## What This Plugin Does

Compliance Guard helps a merchant see what looks good, what needs attention, and what to fix first. It checks site wording, required research-only notices, age checks, checkout agreements, COA records, payment-review signals, and saved proof records. It can suggest safer wording, but it never changes merchant copy without showing a preview and getting approval first.

The main scan now runs as a processor audit simulation by default. It follows the public-site path a processor, bank risk team, or FDA website reviewer can take: home page, menus, product pages, policy pages, checkout safeguards, COAs, related products, public social links, and payment-risk wording. The output shows a step-by-step audit path with plain labels for what looks good and what needs attention.

## Admin Start Screen

The main screen is Start: one store check score, one best next step, a short weekly summary, and a visual checklist showing what looks good and what still needs attention after a scan. The left rail has eight simple sections: Start, Things to Fix, Pages, Proof, New Updates, Payment Review, Setup, and Help.

On a new install, the plugin first shows a short setup screen for the Gemini 2.5 Flash API key, private mode, outbound AI consent, AI call limits, daily FDA examples, and repeat scans. Page count and crawl depth are automatic: the scanner inventories published public WordPress content, menus, sitemaps, and same-site links before each scan. After setup is saved, the baseline scan screen appears.

The UI includes search, a persistent admin-bar score, light and dark modes, guided 14-day onboarding, plain finding rows with Why/Suggest/Preview/Hide actions, grouped setup toggles, built-in help, past scan review, batched notices, setup export, and an emergency stop guarded by the separate `manage_ruo_compliance_emergency` capability.

## What It Scans

- RUO disclaimers contradicted by human-use signals.
- Published public WordPress pages, posts, products, public navigation menus, sitemap and robots.txt-discovered URLs, and same-site public links. The scan scope is planned automatically, with Gemini confirming the public crawl budget when AI is enabled and consent is on.
- Public metadata, Open Graph/Twitter descriptions, image alt/title text, aria labels, and JSON-LD/schema product strings, when enabled.
- Medical, drug, dosing, prescription, or condition schema on RUO peptide pages, including Schema.org `Drug`, `MedicalWebPage`, `MedicalCondition`, dose, administration-route, prescribing-info, or prescription-status metadata.
- FDA-cited GLP/RUO peptide names such as semaglutide, tirzepatide, retatrutide, cagrilintide, mazdutide, BPC-157, TB-500, ipamorelin, CJC-1295, PT-141, AOD-9604, and source-led aliases.
- FDA-cited GLP alias patterns such as GLP1-R/S/T, GLP-1-S/SM, GLP-2-T/TRZ/TZ, and GLP-3-R/RT when paired with risky context. Alias wording is treated as a naming-risk warning, not as a compliant workaround.
- Disease, therapeutic, weight-loss, appetite, glucose, insulin, lipid, anti-aging, recovery, libido, and body-function claims.
- Brand, manufacturer, and equivalence wording such as Eli Lilly, Lilly, Ozempic, Wegovy, Mounjaro, Zepbound, Rybelsus, "same as," "generic," "alternative to," and "active ingredient in."
- Dosing, injection, reconstitution, bacteriostatic water, protocol, cycle, syringe, vial, and peptide calculator language.
- Pharmacological drug-class descriptors that identify the molecule without naming it: incretin mimetic, GLP-1/GIP dual or triple agonist, amylin analog, growth hormone secretagogue (GHRP, GHRH), and "anabolic activity similar to testosterone" phrasing. FDA enforcement treats these as functionally equivalent to naming the underlying drug because the descriptor identifies what the molecule does in humans.
- Post-reconstitution storage and stability instructions such as "refrigerate after reconstitution," "store at 2-8°C," "use within 30 days after reconstitution," "discard after reconstitution," and "beyond use date." FDA cites these as evidence the product is intended for human-administration handling.
- Specific FDA-approved product dose values when paired with peptide context (Wegovy 0.25 / 0.5 / 1 / 1.7 / 2.4 mg semaglutide; Ozempic 0.25 / 0.5 / 1 / 2 mg; Mounjaro and Zepbound 2.5 / 5 / 7.5 / 10 / 12.5 / 15 mg tirzepatide). Listing the actual product strengths is brand-equivalence evidence even without naming the brand.
- Composite "compound + weekly subcutaneous + FDA-approved dose" sentences read as a complete prescription. The plugin flags this as the highest-severity single-sentence pattern in the FDA enforcement corpus.
- Gray-market distribution-lane wording targeting compounding pharmacies, telehealth providers, anti-aging clinics, hormone or weight-loss or longevity clinics, med spas, TRT or HRT clinics, IV bars, concierge medicine, wholesale-to-clinic, drop-ship-to-provider, and white-label-for-clinic channels without visible licensing evidence.
- Gray-market peptide / SARM community testimonial vocabulary: physique update, gains report, cycle log, before/after injection, self-administered, personal protocol, and "honest review of" framing.
- Public forum and social-media takedown signals in page text or public links, such as Skool/Discord/Telegram/Facebook/Reddit communities, cheat sheets, protocols, stacks, "research subject" euphemisms, affiliate links, and coupon-code influencer patterns.
- Payment-processor risk language around pseudo-pharmaceuticals, research chemicals, consumer payment rails, frozen processors, or high-risk merchant framing.
- Advertising/platform risk language from public peptide seller commentary, including Meta, Google, TikTok, Shopify, landing pages, direct-to-product ad paths, before/after imagery, athlete/fitness context, affiliate links, coupon codes, influencer programs, material-connection disclosure gaps, and external forum links.
- Sitewide affiliate claims-control and material-connection findings point to the specific crawled affiliate, coupon, creator, or ambassador page that lacks the control signal, instead of showing only a combined sitewide text blob.
- Link-label context from buttons and navigation, including visible anchor text, aria-label, title, alt, and download attributes, so findings can show the actual public link wording that triggered an affiliate, ad-path, COA, SDS, documentation, or compliance-navigation issue instead of only a bare URL.
- Review-integrity risk language such as fake reviews, paid positive reviews, sentiment-conditioned incentives, review gating, or negative-review suppression when those signals appear near peptide storefront context.
- Product documentation gaps on peptide product pages, including missing COA, HPLC/LC-MS, SDS, batch/lot, purity, handling, storage, or lab-report evidence. The scanner now builds a site evidence index before calling COA visibility missing, so a crawled COA library, certificate page, lab-report link, or product metadata can suppress a false missing-documentation result.
- Product lab-result rows such as purity percentage, assay or identity result, HPLC/LC-MS analysis, sterility or bioburden result, endotoxin result, and batch/lot code. The scanner requires more than one quantified lab-result signal before treating those rows as documentation evidence, so generic "high purity" marketing does not count by itself.
- SDS/hazard-communication gaps when peptide or research-chemical pages mention hazards, PPE, first aid, storage, exposure controls, spills, or disposal without a visible Safety Data Sheet signal.
- Supply-chain and manufacturing quality signals, including cGMP, SOPs, lot traceability, sterility, potency, endotoxin, heavy metals, residual solvents, retain samples, recall protocols, supplier audits, import, relabeling, repackaging, drop-ship, and warehouse-risk wording.
- Buyer/researcher verification gaps, including peptide checkout paths that do not visibly show qualified-researcher proof, quote request, manual review, account approval, or research-use acknowledgement safeguards.
- Downloadable product-document controls, including COA, SDS, datasheet, and lab-report links that may need the same RUO and non-human-use context as the visible product page.
- Educational, blog, FAQ, guide, calculator, protocol, or research-library pages that can contradict RUO product pages by adding dosing, injection, body-effect, testimonial, product-link, or consumer-outcome context. Sitewide education warnings now require one crawled page-level context window to tie the education marker, peptide context, and human-use signal together, so unrelated words on different pages do not create the warning by themselves.
- RUO storefront lane separation from pharmacy, clinic, telehealth, prescription, compounding, med-spa, or patient-intake wording unless licensing, state-board, prescription, or provider-supervision proof is visible. Protective statements such as not being a pharmacy, not being telehealth, or not being a prescription drug are stripped before this warning is considered.
- Post-purchase disclaimer coverage as a manual-control check for order confirmations, invoices, receipts, packing slips, shipment notices, and transactional email templates.
- Payment-continuity wording that can look unstable to payment reviewers, including 30-day notices, platform suspension, backup checkout, manual invoices, split payments, processor hopping, frozen funds, and payment instructions by email.
- RUO website-architecture gaps, including missing Research Use Only hub, compliance policy page, documentation/COA library, product labeling details, scientific references, and education/product separation.
- Processor-integrity red flags, including public cloaking, crawler-bypass, anonymous-processing, rotating-MID, mirror-checkout, hidden-catalog, descriptor-workaround, or transaction-laundering wording. The plugin flags these as severe risks and never explains how to do them. Protective compliance-policy wording such as no cloaking, no processor bypass, or no transaction laundering is stripped before this warning is counted.
- Business-model and payment-review consistency issues, including reseller, clinic, bulk-volume, unusually high monthly volume, customer-channel, chargeback, reserve, refund, and average-ticket signals that may not match a research-only storefront.
- Sitewide risk warnings for review integrity, payment-continuity, medical schema, business-model mismatch, supply-chain risk, and SDS/hazard gaps now require one crawled page to contain both peptide context and the risk wording, so unrelated page fragments do not create those findings by themselves.
- Current FDA example signals from a daily public FDA update job, including GLP, RUO, not-for-human-use, warning-letter, dosing, injection, and brand-comparison patterns.
- Card-network, acquirer, bank, and high-risk processor boarding signals, including high-integrity/high-brand-risk vocabulary, MCC references, payment facilitator/sponsored merchant wording, chargeback/reserve terms, descriptor mismatch, transaction-laundering language, crypto-only or peer-to-peer payment pivots, paused deposits, and frozen-funds language.
- Site-level payment-review gaps, including missing privacy, refund/return/cancellation, shipping/fulfillment, terms, customer contact, legal entity/DBA/address, RUO buyer qualification, COA/lab documentation, and payment-security/PCI signals.
- Contextual page-level risks, including peptide/GLP pages that appear to lack visible RUO framing after the crawl checks page text, configured disclaimer evidence, metadata, footer/header signals, and same-site compliance/documentation pages; pair peptide terms with add-to-cart/pricing/stock/shipping/coupon/checkout language; combine GLP aliases with body-function claims; combine peptides with injection/reconstitution/accessory language; or show card/payment acceptance next to peptide context.
- Suggested safer wording for many items, with a preview drawer. Apply change is intentionally conservative: it can add RUO/non-human-use disclaimers or update the plugin's own product disclaimer field, but it does not auto-publish marketing claims or silently rewrite merchant copy.
- Product-page disclaimer checks. If a product page lacks visible RUO and non-human-consumption wording, the scanner creates a fixable finding that can add the canonical product disclaimer.
- Local ML-style scoring that runs without an API call: a weighted feature model, normalized token/character-ngram vector similarity against the bundled FDA corpus, calibrated probability, and top precedent citations.
- Local scoring now includes advertising, affiliate, landing-page, platform-shutdown, payment-continuity, supply-chain quality, buyer-verification gaps, and educational-content drift so AI receives stronger context when it is allowed to review an unclear scan.
- Local scoring uses whole-term matching for ML-style feature counts, so words such as "secure" do not accidentally count as "cure" and inflate therapeutic-risk confidence. Brand-equivalence scoring no longer counts standalone brand or manufacturer references; it requires brand/peptide proximity to comparison wording and suppresses pure non-affiliation disclaimers.
- Standalone Site Scan workspace separated from setup controls so scan output, AI review, chat, previews, and exports do not crowd the setup screen.
- Independent second AI check that runs after each successful AI scan outcome and checks the answer before the admin relies on it.
- Continuous monitoring with WordPress cron, scan history, alert emails when risk increases, and a remediation audit log.
- Daily FDA example refresh with source URLs, current-as-of dates where available, recent relevant warning-letter matches, key takeaways, and terms that are fed into future scans.
- A payment review packet with policy proof, security-header coverage, third-party script inventory, top items, owners, needed proof, and rule/category mapping.
- A payment review action plan that shows the next proof to collect for failed RUO, documentation, quality, security, and payment-review checks.
- Storefront control gaps, including missing age gate, shipping restriction, RUO acknowledgment, Terms/Privacy/RUO acceptance, payment/platform notice, or generated legal-page coverage.
- Optional Google Safe Browsing enrichment for malware, social-engineering, unwanted-software, and harmful-application URL flags.

## AI Setup

1. In WordPress admin, activate **Compliance Guard**.
2. Open **Compliance Guard** from the left admin menu.
3. Add an AI API key from Google AI Studio.
4. Turn off **Private mode** only if you want outbound AI review.
5. Check the outbound AI consent box. The plugin redacts obvious emails, phone numbers, street addresses, card-like numbers, and secrets before any AI call.
6. Keep the default model as `gemini-2.5-flash` unless Google changes the model you want to use.
7. Save settings and click **Run Scan**.

Private mode is on by default. The built-in scan runs first. AI receives a condensed, redacted evidence package only when AI is enabled, private mode is off, outbound consent is saved, an API key exists, and the scan needs extra review. AI calls go through one local client with a 30-day cache, daily/monthly call limits, queue logging, malformed-answer rejection, and a flash-lite fallback when available calls run out. When **Have AI double-check its answer before saving results** is enabled, a second AI check reviews the first answer for proof, missed risk, false positives, unsafe wording suggestions, vague output, and first-launch reliability before the result is shown. The chat panel is restricted to RUO compliance topics.

Use **Export Report** to download the saved scan as JSON for counsel, copy review, or internal remediation tracking.

Use **Preview change** on editable wording items before applying anything. Apply change creates a WordPress revision, refuses to run if the page changed after the scan, and is limited to disclaimer insertion or the plugin's product-disclaimer field. Product titles, SEO text, theme text, checkout buttons, image alt text, builder-specific fields, and policy pages may still need manual review.

## How This Plugin Reads The FDA's Mind

It does not actually read anyone's mind. It compares your public wording against patterns FDA has quoted in past warning letters, plus built-in payment and storefront-readiness checks. The goal is to show why a reviewer might care before a crawler, regulator, processor, or card-network review finds the same pattern.

## Four-Stage Pipeline In Plain English

1. **Structural checks** always run first. They look for required pages, visible product disclaimers, footer disclaimer, age gate, SSL, contact details, shipping limits, and processor-readiness basics.
2. **Rule engine** always runs next. It checks weighted phrase, compound, GLP alias, brand-comparison, dosing, injection, cart-pairing, payment, and review-risk patterns.
3. **Local scoring** records confidence, rules fired, citations, and merchant-facing green/yellow/orange/red bands without sending content away from the site.
4. **AI review** runs only when allowed and useful. It receives the closest stored FDA examples and local scoring signals, is cached by content/rule hash, and is meant for unclear cases, not for every obvious built-in finding.

## Local ML Layer

The plugin now includes a dependency-light ML-style layer that can run on shared hosting:

- Weighted local classifier for therapeutic claims, dosing/injection wording, brand equivalence, compound aliases, human-use intent, ecommerce context, testimonials, and processor-risk wording.
- Extra local features for ad-platform, affiliate, landing-page, hosted-platform suspension, payment-continuity, supply-chain, buyer-safeguard, education-page, and shutdown wording drawn from the public commentary links used for this version.
- Pure-PHP vector similarity using normalized tokens and character n-grams against `data/fda_warning_letters.jsonl`.
- Local probability bands that feed findings and the admin dashboard without sending page text to any external model.
- Extra context for AI: when outbound AI is allowed, AI sees the closest stored FDA examples and local feature explanation so it reviews the page against examples instead of answering from a blank prompt.
- Education/blog/FAQ ML weighting is calibrated against the same page-level context-window check used by deterministic findings, so a generic blog path or FAQ label does not raise local risk unless peptide context and human-use wording are actually tied together.

This is not a substitute for counsel, and it is not an FDA-trained official model. It is a conservative local pattern model designed to reduce false confidence and save AI calls.

Enable **Monitor automatically** to run scheduled scans with WordPress cron. The plugin keeps recent scan history and can email the configured alert address when Critical/High counts or the overall score increase.

Keep **Check for new FDA examples daily** on so WordPress cron checks current public FDA GLP and warning-letter pages once per day. Use **Check New FDA Examples** in Site Scan when you want to refresh it immediately before a scan.

## Storefront Compliance Manager

The plugin also includes WooCommerce-facing controls for regulated RUO storefront flows:

- Age gate: full-screen or popup display, self-confirm and/or date-of-birth entry, 18+/21+ or custom minimum age, product/category/site/cart/checkout triggers, signed verification cookie, policy version re-checks, hashed audit events, eight visual styles, pixel size sliders, gradient controls, custom logo/photo, and custom WOFF2 font loading.
- Product/category targeting: mark individual WooCommerce products or product categories as age restricted, set product/category minimum age overrides, and add product-level RUO disclaimers.
- Shipping restrictions: US-only default option, global block lists for country/state/city/ZIP, product metadata restrictions, product/category/global rule lines, ZIP prefix matching such as `100*`, and optional hiding of restricted products when customer location is known.
- RUO acknowledgments: checkout checkbox for laboratory research use only and no human or animal consumption, Terms/Privacy/RUO acceptance at checkout, and account-creation acceptance.
- Legal pages: generate or refresh Terms and Conditions, Privacy Policy, and Research Use Only Disclaimer pages from the saved store settings. These are templates and must be reviewed by qualified counsel before publication.
- Checkout field editor: add extra order-information fields for research institution, PO/study reference, buyer type, or similar compliance evidence. Classic checkout supports text, textarea, checkbox, email, phone, number, and select. WooCommerce Checkout Block support uses WooCommerce's additional checkout fields API for text, checkbox, and select.
- Payment and platform notes: show processor-facing checkout language and include the notes in AI review context so AI can call out payment-readiness gaps.

## Activation Guide

1. Upload `ruo-compliance-ai-auditor.zip` from WordPress Admin > Plugins > Add New > Upload Plugin.
2. Activate the plugin and open **RUO Compliance AI**.
3. Open the **Tutorial** tab for the built-in walkthrough.
4. Open **Site Scan**. Save the default scanner settings, then add the AI key if you want AI explanation and chat.
5. Scan scope is automatic. Compliance Guard inventories published public WordPress pages/posts/products, menus, public sitemaps, robots.txt sitemap hints, and same-site public links, then applies internal safety caps instead of asking you how many pages to check.
6. Keep **Have AI double-check its answer before saving results** on unless you are trying to reduce API calls. Use **How strict should the second AI check be?** to choose Balanced, Assertive, or Launch blockers only.
7. Use the top **Site Scan** workspace for scans and the **Setup** workspace for settings.
8. Leave **Check for new FDA examples daily** on. Press **Check New FDA Examples** if you want the latest saved FDA digest before scanning.
9. Open **Payment Notes** if you have bank, gateway, sponsor bank, ISO, or high-risk processor requirements to include in review logic.
10. Open **Age Gate**, set the minimum age, choose self-confirm/DOB/both, set the policy version, and customize the visual design. Increase the policy version whenever your age policy changes.
11. Open **Shipping Rules**, then add blocked countries, states, cities, ZIPs, and product-specific shipping rules. For city rules, use `City, ST` and separate multiple city/state pairs with semicolons.
12. Open **Gate Text** to edit exactly what customers see in the age gate.
13. Open **Checkout & Legal** to keep the RUO checkout acknowledgment and Terms/Privacy/RUO acceptance enabled, edit notices, generate legal pages, and configure checkout fields.
14. Run a scan, review the most important items, preview suggested wording, and apply only changes that match your legal/compliance decision.
15. Download the report and proof log for internal records before and after major content changes.

## Built-In Failsafes

- Saved AI API keys are not rendered back into the admin page HTML.
- Saved AI and Safe Browsing keys are encrypted at rest when the settings are saved on a host with Sodium or OpenSSL support.
- Private mode is on by default and blocks outbound AI calls.
- No telemetry, phone-home, or anonymous usage tracking is sent by this plugin.
- AJAX actions require WordPress nonces and `manage_options`.
- Public age verification uses a separate nonce, does not store date of birth by default, stores only pass/fail/minimum-age/policy-version audit data, and signs the verification cookie with WordPress salts.
- Checkout protections are enforced server-side for cart and checkout, so a hidden popup or disabled JavaScript is not the only line of defense.
- Apply change also checks `edit_post`, confirms the scanned page content has not changed, and is restricted to adding disclaimers or setting the product RUO disclaimer field.
- Draft/editor buttons use normalized WordPress admin edit URLs when a finding maps to an editable post, instead of unreliable front-end text-fragment page jumps.
- Apply change refuses to show a quick preview unless it can prove the change alters editable WordPress content or product disclaimer settings. Manual items stay visible for review.
- Scheduled monitoring uses a scan lock to avoid overlapping crawls.
- Google Safe Browsing is optional, only runs when an API key is saved, and is skipped in private mode.
- Items include matched checks, example ID, scan step, AI or built-in reasoning, an action owner, needed proof, and match strength to support processor or counsel review.
- The readiness pack stores only a concise evidence summary in scan results, not full crawled HTML.
- Scans use a short-lived lock so multiple admins do not start overlapping crawls.
- The FDA example updater uses a separate lock, only fetches hardcoded FDA.gov URLs, caps response size, stores a compact digest instead of full HTML, and logs update failures without blocking normal scans.
- Crawls stay on the same host, automatically seed all publicly viewable WordPress content types plus pages/posts/products, navigation menus, Gemini-prioritized same-site public paths when AI scope review is enabled, public sitemap/robots URLs, and bounded same-site links from anchors, image-map areas, canonical/alternate/shortlink tags, embedded document tags, iframe/object resources, and common custom-theme data URL attributes. They prioritize RUO/COA/SDS/documentation/policy/product paths, skip admin/cart/checkout/account/action URLs and sensitive query-token URLs, reject unsafe URLs, cap response size and per-page link counts, and stop at a time budget with visible crawl warnings.
- Each scan now stores a crawl coverage diagnostic showing seed URLs, discovered same-site links, queued links, pages checked against the automatic budget, failed fetches, remaining queue size, depth reached, safety limits hit, and which RUO/COA/SDS evidence categories were not indexed. This helps separate a real missing-control issue from a custom-theme or crawl-coverage miss before the user pastes optional same-site URLs.
- Missing RUO, COA, or SDS findings are labeled as coverage-sensitive when the crawler hit a safety limit before that evidence category was indexed, so a merchant can add the exact public same-site URL and rescan before treating the result as definitive. If the site evidence index already found that control elsewhere, the finding is labeled as "control already found" and should be treated as a placement or navigation-path review, not a simple missing-control result.
- Repeated merchant feedback now adds a local skepticism layer before AI review. If the same rule or matched term has repeatedly been marked "This is not a problem," the next similar finding is labeled with a merchant-feedback check and lower confidence instead of being treated as an obvious match on the first pass.
- Duplicate finding control now merges exact same-rule/same-page findings and lets page-specific findings take priority over broad sitewide repeats for the same rule. Counts and score are recomputed after this pass so the dashboard reflects the deduped finding set.
- Before reporting missing RUO disclaimers or COA visibility, the scanner builds a site evidence index across crawled text, metadata, link URLs and link labels, configured disclaimer fields, product COA metadata, WooCommerce product downloads, downloadable document links, embedded COA/PDF resources, recognized external lab verification links, and compliance/documentation pages. Gemini receives that index and is told to analyze full context before repeating a missing-item finding.
- The evidence index also checks bounded public-facing WordPress/WooCommerce admin metadata for published pages and products, including builder content, SEO descriptions, product downloads, and product attributes. Sensitive-looking meta keys are skipped and matched fragments are redacted before they can be included in AI context.
- Generic quality-claim findings defer to same-page and product-level COA/lab documentation context, so visible purity, lot, sterility, endotoxin, HPLC/LC-MS, or COA evidence does not become its own unsupported-quality false positive.
- Site evidence term capture uses the same whole-term matching boundary as risk rules, reducing accidental evidence matches from short strings such as COA, SDS, or FDA appearing inside unrelated words.
- Positive controls such as RUO disclaimer wording, buyer/researcher verification wording, and claims-review workflow vocabulary are evidence-only signals, not standalone findings.
- Local ML-style confidence also defers to product documentation context, so documented quality wording does not quietly raise the risk probability after deterministic findings have been suppressed.
- Buyer qualification is evaluated separately from COA/documentation visibility and generic RUO disclaimers; it now looks for buyer/lab qualification, attestation, account approval, quote, or manual-review signals.
- Downloadable-document RUO framing is evaluated separately from COA visibility; COA evidence alone no longer confirms that documents carry research-only and non-human-use labeling.
- RUO contradiction findings now require nearby contradictory human-use, body-function, testimonial, dosing, injection, or brand context instead of combining a footer disclaimer with distant page text.
- Protective body-effect disclaimers such as not claiming weight loss, glucose, appetite, recovery, performance, anti-aging, or therapeutic outcomes are stripped before body-function, audience, and transformation-timeline rules match, so a negative compliance disclaimer is not treated as a positive health claim.
- Brand/manufacturer comparisons now suppress pure non-affiliation disclaimers while still flagging same-as, generic, equivalent, substitute, or alternative-to wording.
- Generic WordPress/default-theme sites with no RUO peptide storefront, COA/documentation context, or commerce substance are marked not applicable instead of receiving RUO compliance recommendations.
- Public metadata and schema are scanned because those fields are visible to crawlers even when they are not visible body copy.
- AI prompts are size-budgeted and require structured JSON output with a fallback parser if AI returns fenced or imperfect JSON.
- If an admin scan hits a 5xx or 504 response after the server has saved results, the admin UI asks the site for a fresh scan from the current click and opens it instead of leaving the user with only a timeout error. It will not present an older saved scan as recovered.
- AI prompts label crawled site text, metadata/schema, processor documentation, user feedback, scan findings, and prior AI output as untrusted evidence; prompt payloads route page text, URLs, signals, findings, policy notes, and crawl warnings through bounded excerpt or same-site URL helpers before outbound AI review.
- The second AI check sends a compact plugin code-health digest, not full source code or saved API keys, then asks AI to challenge its own scan for unsupported claims, missed critical/high issues, unsafe suggestions, and low-quality output.
- The chat gate refuses off-topic questions unless they clearly relate to RUO compliance or the current scan context.

## Customization

Use **Custom Risk Terms** for supplier-specific products, aliases, brand references, or phrases. Each line can be a plain term, or:

```text
high|Custom product term|example peptide
critical|Brand comparison|same active ingredient as ExampleBrand
```

Allowed severities are `critical`, `high`, `medium`, and `low`.
