platform-rules · v1.0.0 · 2026-10-28 · sha256 0fa0872dc3c6ced2
platform-rules v1.0.0A
Immutable. This exact content never changes and is served at /api/v1/blob/0fa0872dc3c6ced2.
---
name: platform-rules
description: "Use this skill to keep the platform rules that Coupler.io skills state as fact current: budget flexibility, deliverability thresholds, attribution windows, published benchmarks, plan limits, sale dates. Triggers include: 'refresh the platform rules', 'check the Google Ads rules', 'is the Klaviyo benchmark still current', 'a platform changed its budget rules', 'add this rule to the registry'. Works from registry.md, a catalog of every rule, its source, when it was checked and which skills use it, so a refresh checks the sources instead of rereading every skill."
metadata:
version: 1.0.0
category: utilities
sources: []
---
# Platform Rules
Skills in this repo state platform rules as fact: Google may spend 2× a daily budget, Klaviyo's spam
band ends at 0.05%, TikTok allows 30% budget steps. Platforms change these on their own schedule, and
the same rule is copied into several skills. [registry.md](registry.md) is the catalog of those rules:
the value, the platform page it comes from, the date it was last checked, and the skills that use it.
The skills keep the value inline. An agent loading a skill through the MCP sees only that file, so the
registry is for maintainers, never a runtime dependency.
## What counts as a platform rule
A statement belongs in the registry when all three hold:
1. **The skill states it as fact and the model acts on it.** A threshold that sets a verdict, a window
that decides which days are complete, a limit that sizes a recommendation.
2. **Something outside the skill sets it**: an ad, email, store or search platform, or Coupler.io's
own product.
3. **It can change without anyone editing the skill.**
The kinds that qualify:
| Kind | Examples |
|---|---|
| Limits and thresholds | Daily budget flexibility, budget step sizes, spam and bounce bands, inspection quotas |
| Windows and defaults | Attribution windows, data-freshness lags, the timezone a platform reports in |
| Published benchmarks | Revenue per recipient by flow, tickets per order. Always with the publication date |
| Platform guidance that changes the advice | When seasonality adjustments help, whether a target change restarts learning |
| Coupler.io product rules stated as a number or default | Refresh intervals by plan, schedule defaults |
| Calendar facts | Black Friday and Cyber Monday dates, which move every year |
What does **not** belong here:
- **Connector facts**: column names, report types, `mcp_excluded_params`, what a column holds. They
change with Coupler releases and are checked against config and importer code (`skill-review`
items 2, 3 and 7).
- **Method choices**: volume floors, break rules, threshold multiples. These are the skill's own
design, not something a platform sets.
- **Definitions**: CTR is clicks over impressions whatever the platform says.
## How a rule is written in a skill
The value, its source and the date it was checked, inline where the model uses it:
> A campaign may spend up to 2× its average daily budget on one day and no more than 30.4× it in a
> month (Google Ads help, support.google.com/google-ads/answer/2375423, checked 2026-10-28).
Once per skill, where the rules are used, add the check instruction:
> If you can browse the web, check the platform's page; if it says something different, use the page
> and say the skill's figure is out of date. If you can't, use these figures and give the date.
"Check the docs" on its own is not a rule. In clients without web access it means "recall"
(`skill-review` item 8).
## Refresh
Run on request, for every rule or one platform's rows.
1. **Fetch each source** in the registry and compare it with the stored value. Platform pages only.
A blog or agency post can tell you a change happened, never what the rule now is.
2. **Classify each row:**
- **Unchanged.** Update `Checked`.
- **Changed.** Record the new value with a short quote from the page.
- **Unverifiable.** The page didn't load or no longer states the rule. Leave the value and say so;
never fill it from memory or a third party.
3. **For each changed rule:**
1. Update every skill in `Used in`, keeping each skill's wording and the inline "checked" date.
2. Search the repo for the old value (for example `30.4`, `0.05%`, `$6.77`) to catch copies the
registry missed. Add them to `Used in`.
3. Bump each edited skill's patch version.
4. **Open one PR** with a table of every changed rule: old value, new value, quote, source, skills
touched. Unchanged rows go in as a single "rechecked" line. Unverifiable rows are listed so a
person can check them by hand.
Work the `Unchecked` section the same way, a few rows per run. A row moves to `Verified` only when
its platform page has been read.
## Adding a rule
When a review or a new skill introduces a rule:
1. Check it is not already in the registry under another name. If it is, the new skill uses the
registry's value; a different value is a contradiction between packs (`skill-review` item 5).
2. Fetch the platform page and add a row: value as stated, source URL, today's date, status, and the
skill and search text in `Used in`.
3. If the page can't be read, add the row as `Unverifiable` or `Secondhand` rather than leaving the
rule out. A known gap is checkable later; a missing row is invisible.
## Statuses
| Status | Meaning |
|---|---|
| Verified | The platform's own page was read on the `Checked` date and states this value |
| Secondhand | Seen only through another party citing the platform (another vendor's help page, a search summary). Check the primary source next refresh |
| Unverifiable | The platform's page couldn't be read. The value is a working rule; skills must say so |
| Unchecked | Found in a skill; no one has checked it against a source yet |
## Guidelines
- Verify or say you did not. A stale `Checked` date is better than a fresh one nobody earned.
- Quote the page. The quote is what lets the next maintainer see whether the wording moved.
- One value per rule across the repo. Two skills disagreeing is a defect in one of them.
- This skill updates itself the same way `skill-review` does: through a PR against this file, never
silently in the middle of a refresh.