gdpr — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited gdpr (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Practical GDPR/privacy for my B2C PWAs — not legal advice, an engineering checklist. First classify the app's data posture, then run the decision gates, then apply the guidance for the gaps. Security controls (RLS, secrets, open-write) live in security-bar — referenced, not restated. This skill owns privacy/compliance: lawful basis, minimization, retention, data-subject rights, processors, transfers, the privacy notice, and analytics.
My fleet splits three ways; the posture decides how much applies:
Privacy by architecture. GDPR surface ≈ minimal; the win is _stating_ it (a "runs on your device, we collect nothing" notice = trust + the easy compliance win).
data of users _and third parties_ (e.g. friends added to an event who never interacted with me). This is the real surface: lawful basis, minimization, retention, DSR, RLS.
Google/Azure) — heaviest: multiple processors, international transfer (US), and possibly special-category content. Controller/processor split depends on BYO-key vs hosted — decide it explicitly.
Run these on the data path (adapted from ECC's HIPAA gates):
expense tied to a named person, voice). If no → stop, nothing here applies.
in a shared event = legitimate interest; document it).
any analytics tool, any AI API.) International transfer covered (SCCs / adequacy / DPF)?
"delete the event" _is_ the erasure path — make it real and reachable.
references/privacy-notice.md. Disclose every processor (Supabase, analytics, AI APIs) and any transfer.
de-facto retention — document them as the policy.
COMMENT ON COLUMN events.participant_name IS 'PII: name';— makes personal-data columns explicit for audits and future migrations.
eskills:security-bar. Note:EventSplit's open-write RLS means anyone can read/delete personal data → that's a privacy exposure, fix per security-bar.
No tracking ⇒ no cookie banner. Don't add one you don't need. To get metrics _and_ keep that win:
(cookieless). No cookie/localStorage identifier, no cross-site → no consent required.
consent + a banner (the bloat we avoid).
the analytics tool as a processor; mintza already ships to AI, so cookieless analytics adds negligible marginal exposure.
Never put personal data in: logs, analytics events, crash/error reports, LLM prompts, URLs/query strings, `localStorage`/`sessionStorage`, or screenshots. Prefer opaque IDs over names/email. Never ship the service_role key client-side (→ security-bar).
// BAD — leaks PII into the error (and the error tracker)
throw new Error(
`No member ${member.name} <${member.email}> in event ${event.title}`,
);
// GOOD — generic message; details logged server-side with opaque IDs only
logger.error("member lookup failed", { memberId: member.id, eventId });
throw new Error("Member not found");For the AI-processor posture (mintza): send the model the minimum content needed, never attach identifiers you don't have to, and disclose the provider + transfer in the notice.
facility-RLS machinery — disproportionate for no-login B2C PWAs and fights minimization + the egress limit. Audit only where proportionate.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.