jamiedavenport/policystack/policystack-audit
Claude Code and agent skill by jamiedavenport/policystack
- community
Checking that the SKILL.md file is still in the repository.
Audit a policystack.ts config: run `policystack validate --json`, explain each issue code, propose a minimal config fix, then re-validate until clean. Use when a PolicyStack config has validation errors or warnings.
Install
npx vskill@latest install jamiedavenport/policystack/policystack-auditSKILL.md
policystack-audit
Close the validate → explain → fix → re-validate loop on a PolicyStack config.
1. Validate
--json writes exactly one object to stdout and nothing else:
Branch on the exit code (or ok). loadError (missing file, TS syntax error, no default export) is always ok: false and means fix the load error first — there are no issues to triage yet. Pass a path or --cwd if the config is not at the default location.
2. Explain each code
level is what validate() emits; the @policystack/vite plugin may promote/suppress downstream, but errors block a valid config. Every code and its durable meaning (the frozen 1.0 diagnostic surface — §6):
automated-decision-making— warning — Under GDPR/UK-GDPRautomatedDecisionMakingis not declared (Art. 13(2)(f) / Art. 22) — set[]for none or list each activity.children-under-age-invalid— error —children.underAgemust be a positive number.company-address-required— error —company.addressis required.company-contact-phone-recommended— warning — With a California (us-ca) jurisdiction,company.contact.phoneis absent — CCPA §1798.130(a)(1) expects a toll-free number unless you operate exclusively online.company-contact-required— error —company.contact.emailis required.company-dpo-undeclared— warning — Under GDPR/UK-GDPRcompany.dpois not declared (Art. 13(1)(b)) — set it, or{ required: false }to declare none.company-legal-name-required— error —company.legalNameis required.company-name-required— error —company.nameis required.consent-banner-required— warning — A cookie category is consent-gated butconsentMechanism.hasBanneris false — a banner is needed to collect affirmative consent.consent-mechanism-undeclared— warning — No enabled cookie category is consent-gated, so no consent mechanism is generated (correct for strictly-necessary cookies only).consent-preference-panel-required— warning —consentMechanism.canWithdrawis true buthasPreferencePanelis false — withdrawal has no preference panel in the wired runtime.consent-withdrawal-required— warning — Under GDPR/UK-GDPR users must be able to withdraw cookie consent — setconsentMechanism.canWithdraw.cookie-lawful-basis-missing— error — An enabled cookie category is missing its Article 6lawfulBasisincookies.context.cookies-empty— error — No cookie category is enabled incookies.used.data-collected-empty— warning —data.collectedhas no entries — the privacy policy will state that no personal data is collected.data-context-missing— error — A collected category has no matchingdata.contextentry (purpose, lawful basis, retention, provision).data-context-orphan— error — Adata.contextentry has no matching category indata.collected.data-missing— error —datais required when a privacy policy is emitted — use an emptydata.collectedfor a site that collects nothing.data-purpose-empty— error — Adata.contextpurposeis present but blank.data-purpose-missing— error — Adata.contextentry is missing its processingpurpose(GDPR Art. 13(1)(c)).effective-date-required— error —effectiveDateis required.jurisdiction-generic-policy-text— warning — A declared jurisdiction is supported only at the "equivalent" tier (posture-correct + parent text), not hand-authored "specific" text.jurisdiction-unknown— error — A declared jurisdiction code is not a recognisedJurisdictionId.jurisdictions-required— error —jurisdictionsmust list at least one jurisdiction id.lawful-basis-incomplete— error — Under GDPR/UK-GDPR a collected category is missing its Article 6lawfulBasis(Art. 13(1)(c)).locale-unknown— error —localeis not one of the supportedLOCALES.policy-cookie-empty— error —policiesincludes "cookie" but nocookiesblock is set.policy-empty— error — The config produces no policy — add data-handling fields (data,children) or acookiesblock.retention-incomplete— error — A collected category is missing aretentionperiod.statutory-contractual-obligation— error — Under GDPR/UK-GDPR a category is missing the Art. 13(2)(e)provision(statutory / contractual / contract-prerequisite / voluntary) or its consequences.
3. Propose a minimal fix
For each issue, change only what the code requires in policystack.ts — do not restyle or expand the config. errors must be resolved; warnings should be resolved or consciously accepted (e.g. data-collected-empty is correct for a brochure site). Never invent compliance facts (a lawful basis, a DPO) — surface the decision to the user. Many data/cookie issues are better fixed at the source with policystack-instrument than hand-written.
4. Re-validate
Re-run step 1. Repeat until ok: true (exit 0). Report the remaining accepted warnings, if any.
Security
- Security scanPassed, 93 of 100Pattern checks on the skill's files.
- Model reviewNot runA model review is scheduled for the next rescan.
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingplugin/skills/policystack-audit/SKILL.md
Popularity
- Repository stars
- 151
- Repository forks
- 6
- 7-day trend score
- 25
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/jamiedavenport/policystack/policystack-audit)