Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use when naming Notion integrations or designing Notion database properties: tokens are {team}-{env}-{purpose} lowercase and properties follow fixed naming rules the base would not guess.
.claude/skills/notion-policy-guardrails/SKILL.md| Model | Eval pass | Runs |
|---|---|---|
| gemini-3.6-flashlowest | 89% | 19 |
| gemini-3.1-pro-preview | 100% | 1 |
| Model | Lift | Δ tokens | Δ turns | Cases | Verified |
|---|---|---|---|---|---|
| gemini-3.5-flashbest | +92% | — | 0% | 24 | 86d ago |
| gemini-3.6-flash | +35% | +75% | 0% | 23 | 54d ago |
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-09 | ✗→✓ | ▲ Improved | — | — |
| case-19 | ✗→✓ | ▲ Improved | — | — |
| case-03 | ✗→✓ | ▲ Improved | — | — |
| case-04 | ✗→✓ | ▲ Improved | — | — |
| case-20 | ✗→✓ | ▲ Improved | — | — |
Enforces the governance conventions for Notion integrations: integration/token names, token rotation windows, database property naming, and access-audit thresholds. Apply whenever you name a Notion integration token, design or review a Notion database's properties, or write a Notion access-audit script. These are fixed organizational choices — do not substitute your own sensible-looking defaults.
{team}-{env}-{purpose}: three lowercase ASCII segmentsjoined by single hyphens, matching ^[a-z]+-[a-z]+-[a-z]+$.
dev,staging, prod. Never development, production, test, qa, stage, prd, stg.
eng-prod-sync, marketing-staging-cms, data-prod-etl,design-dev-prototype.
rotateBy to exactlythe creation date plus 90 days.
WARNING when fewer than 14 days remain before rotateBy.EXPIRED once rotateBy has passed.Name, Title, Published Date).Status, Stage, orState. Never Deal Stage, Pipeline Status, Phase, Progress, Workflow.
Date or At (e.g. Due Date,Created At, Last Modified At). A bare Deadline, Created, or Updated is non-compliant.
Related or Parent (e.g. Parent Project, Related Docs).
s(e.g. Categories, Labels, Tags).
Data, Info, Stuff, Other,Misc, Notes2. Replace with a descriptive name.
narrowing the sharing scope.
public_url as publicly shared.search calls, sleep 350ms to respect rate limits.Each pair shows the base model's likely default (BEFORE) and the conforming form (AFTER).
Integration name — production sync for engineering
EngProdSync or eng_production_synceng-prod-syncIntegration name — environment placement
eng-sync-prod (env pushed to the last segment)eng-prod-sync (env is the middle segment)Integration name — environment vocabulary
eng-production-sync (production is not an allowed env word)eng-prod-syncIntegration name — non-standard environment
qa-team-bot for a QA/pre-release connectorqa-staging-cms — QA maps onto the allowed env staging; never inventqa or test as the middle segment.
Token rotation entry — created today
rotateBy = createdDate + 90 days; begin emitting WARNING once fewerthan 14 days remain.
Status property
Deal Stage (select) on a sales databaseStage (select) — the status-type property must be exactly Status,Stage, or State.
Date property
Deadline (date)Review Deadline Date (date) — must end with Date or At.Last-modified timestamp
Modified (date)Last Modified At (date).Multi-select property
Category (multi_select)Categories (multi_select) — plural, ending in s.Relation property
Project (relation) linking a subtask to its projectParent Project (relation) — must start with Parent or Related .Relation to reference docs
Docs (relation)Related Docs (relation).Banned generic name
Info to hold "miscellaneous details"Contact Notes or Account Summary; Info,Data, Stuff, Misc, Other, Notes2 are all banned.
Access audit threshold
scope.
Audit pagination throttle
while (has_more) loop with no delaysleep(350ms) between successive search calls.closest allowed value (staging for QA/UAT/pre-release, dev for local scratch work). Never widen the env vocabulary.
with no separator (dataeng-prod-etl, not data-eng-prod-etl) — the regex permits only three segments.
PascalCase rule; the Date/At suffix rule applies to non-title date properties.
status vs select Notion type: the name rule (Status/Stage/State)applies regardless of whether the underlying Notion type is select or the native status type.
explicit exceptions list and a migration deadline — new names never get a pass.
object_not_found mid-audit (a page was unshared since the last run) isexpected: log and continue, do not abort the audit.
production/development/test/qa as the env segment. DO useexactly dev, staging, or prod.
Deal Stage or Pipeline Status. DO name itexactly Status, Stage, or State.
Deadline/Created. DO suffix it withDate or At.
Project, Docs). DOprefix it with Parent or Related .
Category). DO pluralize it(Categories).
Info/Data/Misc/Notes2. DO require adescriptive name.
eng-production-sync) — the base prefers fullwords; the policy requires the short forms dev/staging/prod.
engProdSync) insteadof lowercase-hyphenated.
eng-sync-prod).Deal Stage or Pipeline Status because itreads naturally — the vocabulary is fixed to Status/Stage/State.
Deadline, Created) without the Date/At suffix.Tag, Label).Info, Notes2) instead of a specific name.^[a-z]+-[a-z]+-[a-z]+$, env in the middle.dev, staging, or prod.rotateBy = created + 90 days; warn under 14 days.Status/Stage/State.Date or At.Parent or Related .s).public_url; 350ms between searches.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-16 | pass→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-09 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-13 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-22 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-21 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-12 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-15 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-19 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-03 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-11 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-04 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-18 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-02 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-01 | pass→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-08 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-17 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-20 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-23 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-05 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-10 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-06 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-14 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-07 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
DecimalAI ran this skill against gemini-3.5-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted. The headline lift of +35 percentage points is the difference between those two pass rates over the 23 comparable cases.
The per-case answers from this run were removed by the retention sweep, so the case table below shows the verdicts without the text either arm produced. The counts above were recorded at the time and are unaffected. Answers are now kept for 180 days.
| Model | Method | Date | Lift |
|---|---|---|---|
| gemini-3.5-flash | verified | 6/27/2026 | +92% |
Other measured skills in the registry, with their headline benchmark lift.