Compliance Checklist
Purpose
Surface potentially applicable application-compliance obligations for a
project's declared jurisdictions, citing only primary sources, behind a
mandatory disclaimer that this output is not legal advice.
The Skill's contribution is structure, not legal substance. It
ensures that:
- Recurring failure modes (chat features missed under
電気通信事業法, payment flows missed under 特定商取引法 §11, PII
surfaces missed under 改正個人情報保護法 / GDPR Art. 3 / CCPA) are
brought to the surface during release prep, not silently shipped.
- Every applicability claim points the human reviewer at a primary
source they can read themselves.
- The output never asserts non-applicability — only "applies",
"may apply, verify", or "out of scope for declared jurisdictions".
- The output never marks items as "complied with" or
"no further action needed". Compliance status is something only the
human reviewer (and ultimately a qualified attorney) can confirm.
When to invoke
This Skill ships default-off. It is invoked only when both:
.claude/compliance.yml exists and has compliance.enabled: true.
- The CLAUDE.md or sibling config declares
target_jurisdictions:
with at least one of JP, EU, US-CA, platform.
If compliance.enabled is true but target_jurisdictions is missing
or empty, the Skill refuses to run and emits a single-line error
asking the operator to declare jurisdictions. It does not guess.
Typical invocation triggers (called by other agents):
product-manager — when writing acceptance criteria for any
capability listed in triggers.md.
security-reviewer — when reviewing PII-handling, authentication,
or external-data-export surfaces.
technical-writer — when authoring or updating Terms of Service,
Privacy Policy, or refund-policy text.
Do not invoke for:
- Internal CLI tools that never reach end users.
- Test fixtures or seed data work (these paths are explicitly
refused — see Invariant 3).
- Bug fixes that do not change the capability surface.
Invariant Core
The six rules below are inlined here because they are load-bearing for
the Skill's safety profile. Deviation from any of them is a defect,
not a tuning choice.
For full rationale and original-source citations, see ADR-011.
No negative-applicability claims. The Skill must never assert
"this law does not apply" or "you are exempt". Permitted forms:
applies — clear positive applicability.
may apply, verify — likely applicable, requires human
confirmation.
out of scope for declared jurisdictions — neutrally states the
law was not evaluated because it is not in the project's
target_jurisdictions. This is a scope statement, not an
applicability statement.
Primary-source-only citation, with a Tier 1.5 allowance for
issuing-regulator official interpretive guidance. Every
applicability claim must cite a Tier 1 primary source. Tier 1.5
guidance is admissible only paired with a Tier 1 citation on the
same item. Secondary sources are disqualifying. The full tier
structure is fixed by ADR-013 and propagates to the rest of
the verification-layer.
Tier 1 — primary statute and first-party platform spec.
e-Gov 法令検索 for Japanese statutes, EUR-Lex for EU
regulations and directives, California Legislative Information
for CCPA / CPRA, the official Apple App Store Review Guidelines
and Google Play Policy Center for platform rules.
Tier 1.5 — issuing-regulator official interpretive
guidance. Closed allowlist, fixed at the ADR layer (extending
it requires a new ADR, not a Skill body edit):
- EDPB Guidelines, Recommendations, Opinions adopted under
GDPR Art. 70(1)(e).
- 個人情報保護委員会 (PPC) ガイドライン, Q&A, 通達
under 個人情報保護法 §147–§149 delegation.
- California Privacy Protection Agency (CPPA) Regulations
under CCPA §1798.185.
- Apple Privacy Manifest specification and Required
Reasons API documentation under Apple's first-party platform
authority.
- Google Play User Data policy and SDK Index documentation
under Google's first-party platform authority.
Tier 1.5 admits only formal instruments under the regulator's
enabling-statute authority. Excluded as Tier 1.5: regulator
blog posts, press releases, staff op-eds, social-media posts,
FAQ landing pages. A Tier 1.5 citation must always appear
alongside a Tier 1 citation on the same checklist item.
Disqualifying. Blog summaries, Q&A sites, AI summaries,
news articles, law-firm explainers, regulator informal output
(blog posts, press releases). Same rule as the research domain
of ADR-008/010.
PII path refusal. The Skill must refuse to ingest paths likely
to contain test data, seeds, environment files, or database dumps.
The concrete glob list and PII regex masks live in
triggers.md. On refusal, the Skill emits a
single-line message naming the offending path and stops.
Default-off, opt-in per project. The Skill runs only when both
compliance.enabled: true (in .claude/compliance.yml) and a
non-empty target_jurisdictions are declared. Either condition
missing is a hard refusal, not a fallback.
Project-declared jurisdictions, never guessed. The Skill does
not infer jurisdiction from currency, language, domain TLD, or
user-list samples. Jurisdiction is a project assertion. If the
declared list is wrong, that is a project-level configuration
defect surfaced by the Skill's behavior, not a bug for the Skill
to compensate around.
Capability-based triggers only. Trigger detection works on
capabilities (manifest dependencies, AST patterns of HTTP routes,
form-field schemas), not on file or route names. The trigger
rules are in triggers.md. When a dependency
signal is ambiguous, the Skill asks the human a closed-form
question (yes / no / "I don't know — skip and re-run later") and
records the answer in the output's audit trail.
Output contract
Every invocation produces a Markdown report with these sections, in
this order, all required:
# Compliance Checklist — <feature or release name>
## Disclaimer
<contents of disclaimers.md, EN + JA, verbatim — must not be edited
or removed by the Skill>
## Project context
- target_jurisdictions: [<list from CLAUDE.md / compliance.yml>]
- triggered capabilities: [<list from triggers.md detection>]
- ambiguous-trigger answers: [<list of human Q&A, if any>]
- evaluation date: <YYYY-MM-DD>
## Findings per jurisdiction
### JP (if in scope)
- 電気通信事業法 — `applies` | `may apply, verify` | `out of scope ...`
- Citation: <e-Gov URL>
- Reason: <one-line rationale tied to the triggered capability>
- Human action: <what the human reviewer must verify or decide>
- 特定商取引法 §11 — ...
- 改正個人情報保護法 — ...
- 資金決済法 — ...
### EU (if in scope)
- GDPR — ...
### US-CA (if in scope)
- CCPA / CPRA — ...
### platform (if in scope)
- App Store Review Guidelines — ...
- Google Play Policy Center — ...
## Required human follow-up
- [ ] Qualified-attorney review before launch (always, never marked
complete by the Skill).
- [ ] Each `applies` and `may apply, verify` item above resolved by a
human.
- [ ] If Terms of Service / Privacy Policy / refund-policy text was
derived from this checklist, that text reviewed by counsel
before publication.
## Audit trail
- Skill version: <semver from this SKILL.md frontmatter, when
introduced>
- Jurisdiction reference files consulted:
[`JP.md`](./jurisdictions/JP.md), [`EU.md`](./jurisdictions/EU.md),
...
- Operator: <git user.email if available, else "unknown">
The Skill never writes a ## Compliance status section. There is
no field for "complied with" or "verified". The closest the report gets
is the unchecked checkbox under "Required human follow-up". A
human checks those boxes outside the Skill's authoring path.
Override Protocol
Adopting projects can disable individual Invariant rules only
when the rule does not fit their context, and only with an explicit
declaration in the project's own CLAUDE.md:
## Compliance Skill overrides
- Invariant 5 (project-declared jurisdictions): partially overridden.
We auto-derive `target_jurisdictions` from the customer-billing
country code at runtime because we serve >40 jurisdictions and
manual declaration is impractical.
Reason: <why>. Date: <YYYY-MM-DD>. Risk acceptance signed by:
<human name>.
What you cannot override:
- Invariants 1 (no negative-applicability claims), 2 (primary-source
citation), and 3 (PII path refusal). These are safety-critical;
removing them turns the Skill from "useful but limited" into
"actively harmful".
- The mandatory disclaimer block (Invariant — implicit in
disclaimers.md).
- The English-only meta-files of this Skill (this
SKILL.md and
triggers.md are operator-facing references).
If you find yourself overriding two or more invariants, the Skill is
not a fit for your project. Delete the directory; that is also a
supported state.
Skill update cadence
This Skill's jurisdiction reference files (jurisdictions/*.md) cite
laws that change. Re-verification cadence:
- Half-yearly (180 days) for the
JP, EU, and US-CA
jurisdictions, manually, by docs-researcher per the
research-domain protocol of verification-layer (ADR-008/010).
Citations are re-fetched from primary sources only.
- Quarterly (90 days) for the
platform jurisdiction, because
Apple App Store Review Guidelines and Google Play policies change
materially more often than statutory text. The shorter cadence is
reflected in .claude/compliance.yml.example's
reverification_days.platform default.
- On amendment notice, when an operator becomes aware of a law
change in any of
target_jurisdictions. The operator opens an
Issue using the citation as evidence; the next half-yearly pass
picks it up sooner if needed.
If a re-verification finds that a cited statute or platform policy
has changed, the right response is: (1) update the relevant
jurisdictions/<X>.md, (2) record the change in the project
CHANGELOG with the verification date, (3) re-run the Skill on any
recently-shipped capability that depended on the changed citation.
If the cadence is missed for two consecutive intervals (i.e., one
year without re-verification), the Skill's output should include a
prominent staleness warning in the Disclaimer section. Implementation
of that warning is part of disclaimers.md's rendering logic, not
this overview.
Out-of-scope by design
The Skill does not:
- Author Terms of Service, Privacy Policy, refund-policy, or any
other legal document text. It produces the requirements list that
technical-writer uses as input. Document drafting, even derived
from a Skill checklist, has too high a blast radius for LLM-only
output.
- Cover vertical-specific compliance regimes. For healthcare PHI,
point to ECC's
hipaa-compliance and healthcare-phi-compliance
Skills. For financial KYC/AML, point to the operator's specialized
legal counsel — ECC has no equivalent Skill, and this Skill should
not pretend to. The same applies to broadcasting, gambling, gun
sales, alcohol, controlled substances, and any other regime where
a small mistake has large legal consequences.
- Make cross-jurisdictional decisions. If a capability triggers
obligations in JP and EU and US-CA simultaneously, the Skill lists
each independently. Synthesizing "if you do X for JP, you also
satisfy EU" is the kind of cross-regime reasoning that requires a
qualified attorney.
See also
1---2name: compliance-checklist3description: Provides a checklist framework for surfacing potentially applicable application-compliance obligations across declared jurisdictions (Japan / EU / US-CA / platform stores). The Skill is invoked by product-manager, security-reviewer, and technical-writer when a capability that may have legal exposure is added (chat / payments / PII collection / data export). It emits a checklist with primary-source citations and a mandatory disclaimer block; it never marks items as "complied with" — only the human reviewer can. Skill contents (Progressive Disclosure): SKILL.md — overview, six invariant rules, output contract, navigation disclaimers.md — the mandatory disclaimer block, in EN and JA triggers.md — capability-detection rules and PII-path refusal globs jurisdictions/JP.md — Japan: 電気通信事業法 / 特定商取引法 / 改正個人情報保護法 / 資金決済法 jurisdictions/EU.md — GDPR (with Art. 3 extraterritorial scope) jurisdictions/US-CA.md — CCPA / CPRA jurisdictions/platform.md — Apple App Store / Google Play This Skill is bilingual where its output r4---5
6# Compliance Checklist
7
8## Purpose
9
10Surface potentially applicable application-compliance obligations for a
11project's declared jurisdictions, citing only primary sources, behind a
12mandatory disclaimer that this output is not legal advice.
13
14The Skill's contribution is **structure**, not legal substance. It
15ensures that:
16
171. Recurring failure modes (chat features missed under
18 電気通信事業法, payment flows missed under 特定商取引法 §11, PII
19 surfaces missed under 改正個人情報保護法 / GDPR Art. 3 / CCPA) are
20 *brought to the surface* during release prep, not silently shipped.
212. Every applicability claim points the human reviewer at a primary
22 source they can read themselves.
233. The output never asserts non-applicability — only "applies",
24 "may apply, verify", or "out of scope for declared jurisdictions".
254. The output never marks items as "complied with" or
26 "no further action needed". Compliance status is something only the
27 human reviewer (and ultimately a qualified attorney) can confirm.
28
29## When to invoke
30
31This Skill ships **default-off**. It is invoked only when both:
32
33- `.claude/compliance.yml` exists and has `compliance.enabled: true`.
34- The CLAUDE.md or sibling config declares `target_jurisdictions:`
35 with at least one of `JP`, `EU`, `US-CA`, `platform`.
36
37If `compliance.enabled` is true but `target_jurisdictions` is missing
38or empty, the Skill **refuses to run** and emits a single-line error
39asking the operator to declare jurisdictions. It does not guess.
40
41Typical invocation triggers (called by other agents):
42
43- `product-manager` — when writing acceptance criteria for any
44 capability listed in `triggers.md`.
45- `security-reviewer` — when reviewing PII-handling, authentication,
46 or external-data-export surfaces.
47- `technical-writer` — when authoring or updating Terms of Service,
48 Privacy Policy, or refund-policy text.
49
50Do **not** invoke for:
51
52- Internal CLI tools that never reach end users.
53- Test fixtures or seed data work (these paths are explicitly
54 refused — see Invariant 3).
55- Bug fixes that do not change the capability surface.
56
57## Invariant Core
58
59The six rules below are inlined here because they are load-bearing for
60the Skill's safety profile. Deviation from any of them is a defect,
61not a tuning choice.
62
63For full rationale and original-source citations, see [ADR-011].
64
651. **No negative-applicability claims.** The Skill must never assert
66 "this law does not apply" or "you are exempt". Permitted forms:
67 - `applies` — clear positive applicability.
68 - `may apply, verify` — likely applicable, requires human
69 confirmation.
70 - `out of scope for declared jurisdictions` — neutrally states the
71 law was not evaluated because it is not in the project's
72 `target_jurisdictions`. This is a *scope* statement, not an
73 applicability statement.
74
752. **Primary-source-only citation, with a Tier 1.5 allowance for
76 issuing-regulator official interpretive guidance.** Every
77 applicability claim must cite a Tier 1 primary source. Tier 1.5
78 guidance is admissible only paired with a Tier 1 citation on the
79 same item. Secondary sources are disqualifying. The full tier
80 structure is fixed by [ADR-013] and propagates to the rest of
81 the verification-layer.
82
83 - **Tier 1 — primary statute and first-party platform spec.**
84 e-Gov 法令検索 for Japanese statutes, EUR-Lex for EU
85 regulations and directives, California Legislative Information
86 for CCPA / CPRA, the official Apple App Store Review Guidelines
87 and Google Play Policy Center for platform rules.
88 - **Tier 1.5 — issuing-regulator official interpretive
89 guidance.** Closed allowlist, fixed at the ADR layer (extending
90 it requires a new ADR, not a Skill body edit):
91 - **EDPB** Guidelines, Recommendations, Opinions adopted under
92 GDPR Art. 70(1)(e).
93 - **個人情報保護委員会 (PPC)** ガイドライン, Q&A, 通達
94 under 個人情報保護法 §147–§149 delegation.
95 - **California Privacy Protection Agency (CPPA)** Regulations
96 under CCPA §1798.185.
97 - **Apple** Privacy Manifest specification and Required
98 Reasons API documentation under Apple's first-party platform
99 authority.
100 - **Google** Play User Data policy and SDK Index documentation
101 under Google's first-party platform authority.
102
103 Tier 1.5 admits only formal instruments under the regulator's
104 enabling-statute authority. Excluded as Tier 1.5: regulator
105 blog posts, press releases, staff op-eds, social-media posts,
106 FAQ landing pages. A Tier 1.5 citation must always appear
107 alongside a Tier 1 citation on the same checklist item.
108
109 - **Disqualifying.** Blog summaries, Q&A sites, AI summaries,
110 news articles, law-firm explainers, regulator informal output
111 (blog posts, press releases). Same rule as the research domain
112 of ADR-008/010.
113
1143. **PII path refusal.** The Skill must refuse to ingest paths likely
115 to contain test data, seeds, environment files, or database dumps.
116 The concrete glob list and PII regex masks live in
117 [`triggers.md`](./triggers.md). On refusal, the Skill emits a
118 single-line message naming the offending path and stops.
119
1204. **Default-off, opt-in per project.** The Skill runs only when both
121 `compliance.enabled: true` (in `.claude/compliance.yml`) and a
122 non-empty `target_jurisdictions` are declared. Either condition
123 missing is a hard refusal, not a fallback.
124
1255. **Project-declared jurisdictions, never guessed.** The Skill does
126 not infer jurisdiction from currency, language, domain TLD, or
127 user-list samples. Jurisdiction is a project assertion. If the
128 declared list is wrong, that is a project-level configuration
129 defect surfaced by the Skill's behavior, not a bug for the Skill
130 to compensate around.
131
1326. **Capability-based triggers only.** Trigger detection works on
133 capabilities (manifest dependencies, AST patterns of HTTP routes,
134 form-field schemas), not on file or route names. The trigger
135 rules are in [`triggers.md`](./triggers.md). When a dependency
136 signal is ambiguous, the Skill asks the human a closed-form
137 question (yes / no / "I don't know — skip and re-run later") and
138 records the answer in the output's audit trail.
139
140## Output contract
141
142Every invocation produces a Markdown report with these sections, in
143this order, all required:
144
145```markdown
146# Compliance Checklist — <feature or release name>
147
148## Disclaimer
149
150<contents of disclaimers.md, EN + JA, verbatim — must not be edited
151or removed by the Skill>
152
153## Project context
154
155- target_jurisdictions: [<list from CLAUDE.md / compliance.yml>]
156- triggered capabilities: [<list from triggers.md detection>]
157- ambiguous-trigger answers: [<list of human Q&A, if any>]
158- evaluation date: <YYYY-MM-DD>
159
160## Findings per jurisdiction
161
162### JP (if in scope)
163- 電気通信事業法 — `applies` | `may apply, verify` | `out of scope ...`
164 - Citation: <e-Gov URL>
165 - Reason: <one-line rationale tied to the triggered capability>
166 - Human action: <what the human reviewer must verify or decide>
167- 特定商取引法 §11 — ...
168- 改正個人情報保護法 — ...
169- 資金決済法 — ...
170
171### EU (if in scope)
172- GDPR — ...
173
174### US-CA (if in scope)
175- CCPA / CPRA — ...
176
177### platform (if in scope)
178- App Store Review Guidelines — ...
179- Google Play Policy Center — ...
180
181## Required human follow-up
182
183- [ ] Qualified-attorney review before launch (always, never marked
184 complete by the Skill).
185- [ ] Each `applies` and `may apply, verify` item above resolved by a
186 human.
187- [ ] If Terms of Service / Privacy Policy / refund-policy text was
188 derived from this checklist, that text reviewed by counsel
189 before publication.
190
191## Audit trail
192
193- Skill version: <semver from this SKILL.md frontmatter, when
194 introduced>
195- Jurisdiction reference files consulted:
196 [`JP.md`](./jurisdictions/JP.md), [`EU.md`](./jurisdictions/EU.md),
197 ...
198- Operator: <git user.email if available, else "unknown">
199```
200
201The Skill **never** writes a `## Compliance status` section. There is
202no field for "complied with" or "verified". The closest the report gets
203is the unchecked checkbox under "Required human follow-up". A
204human checks those boxes outside the Skill's authoring path.
205
206## Override Protocol
207
208Adopting projects can disable individual Invariant rules **only**
209when the rule does not fit their context, and only with an explicit
210declaration in the project's own `CLAUDE.md`:
211
212```markdown
213## Compliance Skill overrides
214
215- Invariant 5 (project-declared jurisdictions): partially overridden.
216 We auto-derive `target_jurisdictions` from the customer-billing
217 country code at runtime because we serve >40 jurisdictions and
218 manual declaration is impractical.
219 Reason: <why>. Date: <YYYY-MM-DD>. Risk acceptance signed by:
220 <human name>.
221```
222
223What you **cannot** override:
224
225- Invariants 1 (no negative-applicability claims), 2 (primary-source
226 citation), and 3 (PII path refusal). These are safety-critical;
227 removing them turns the Skill from "useful but limited" into
228 "actively harmful".
229- The mandatory disclaimer block (Invariant — implicit in
230 `disclaimers.md`).
231- The English-only meta-files of this Skill (this `SKILL.md` and
232 `triggers.md` are operator-facing references).
233
234If you find yourself overriding two or more invariants, the Skill is
235not a fit for your project. Delete the directory; that is also a
236supported state.
237
238## Skill update cadence
239
240This Skill's jurisdiction reference files (`jurisdictions/*.md`) cite
241laws that change. Re-verification cadence:
242
243- **Half-yearly** (180 days) for the `JP`, `EU`, and `US-CA`
244 jurisdictions, manually, by `docs-researcher` per the
245 research-domain protocol of `verification-layer` (ADR-008/010).
246 Citations are re-fetched from primary sources only.
247- **Quarterly** (90 days) for the `platform` jurisdiction, because
248 Apple App Store Review Guidelines and Google Play policies change
249 materially more often than statutory text. The shorter cadence is
250 reflected in `.claude/compliance.yml.example`'s
251 `reverification_days.platform` default.
252- **On amendment notice**, when an operator becomes aware of a law
253 change in any of `target_jurisdictions`. The operator opens an
254 Issue using the citation as evidence; the next half-yearly pass
255 picks it up sooner if needed.
256
257If a re-verification finds that a cited statute or platform policy
258has changed, the right response is: (1) update the relevant
259`jurisdictions/<X>.md`, (2) record the change in the project
260CHANGELOG with the verification date, (3) re-run the Skill on any
261recently-shipped capability that depended on the changed citation.
262
263If the cadence is missed for two consecutive intervals (i.e., one
264year without re-verification), the Skill's output should include a
265prominent staleness warning in the Disclaimer section. Implementation
266of that warning is part of `disclaimers.md`'s rendering logic, not
267this overview.
268
269## Out-of-scope by design
270
271The Skill does **not**:
272
273- Author Terms of Service, Privacy Policy, refund-policy, or any
274 other legal document text. It produces the *requirements list* that
275 `technical-writer` uses as input. Document drafting, even derived
276 from a Skill checklist, has too high a blast radius for LLM-only
277 output.
278- Cover vertical-specific compliance regimes. For healthcare PHI,
279 point to ECC's `hipaa-compliance` and `healthcare-phi-compliance`
280 Skills. For financial KYC/AML, point to the operator's specialized
281 legal counsel — ECC has no equivalent Skill, and this Skill should
282 not pretend to. The same applies to broadcasting, gambling, gun
283 sales, alcohol, controlled substances, and any other regime where
284 a small mistake has large legal consequences.
285- Make cross-jurisdictional decisions. If a capability triggers
286 obligations in JP and EU and US-CA simultaneously, the Skill lists
287 each independently. Synthesizing "if you do X for JP, you also
288 satisfy EU" is the kind of cross-regime reasoning that requires a
289 qualified attorney.
290
291## See also
292
293- [`disclaimers.md`](./disclaimers.md) — the mandatory disclaimer
294 block, EN and JA.
295- [`triggers.md`](./triggers.md) — capability-detection rules and
296 PII-path refusal globs.
297- [`jurisdictions/JP.md`](./jurisdictions/JP.md),
298 [`jurisdictions/EU.md`](./jurisdictions/EU.md),
299 [`jurisdictions/US-CA.md`](./jurisdictions/US-CA.md),
300 [`jurisdictions/platform.md`](./jurisdictions/platform.md) —
301 per-jurisdiction citation tables.
302- [ADR-011] — design rationale, the six invariants, and the
303 rejected-alternatives table that produced this Skill rather than an
304 agent.
305- [ADR-013] — Invariant 2 source tier model. Defines Tier 1 / Tier 1.5
306 / disqualifying, the closed Tier 1.5 regulator allowlist, the
307 pairing rule, and the verification-layer-wide scope.
308
309[ADR-011]: ../../meta/adr/011-compliance-checklist-skill.md
310[ADR-013]: ../../meta/adr/013-invariant-2-source-tier-model.md