@ssheleg/sheleg-dev 0.13.4 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +37 -0
- package/package.json +1 -1
- package/plugins/sheleg-dev/.claude-plugin/plugin.json +1 -1
- package/plugins/sheleg-dev/skills/ad-tracking/SKILL.md +11 -10
- package/plugins/sheleg-dev/skills/crypto-payments/SKILL.md +10 -10
- package/plugins/sheleg-dev/skills/error-tracking/SKILL.md +10 -11
- package/plugins/sheleg-dev/skills/frontend-performance/SKILL.md +35 -13
- package/plugins/sheleg-dev/skills/frontend-performance/references/accessibility-perf.md +1 -1
- package/plugins/sheleg-dev/skills/google-auth/SKILL.md +11 -10
- package/plugins/sheleg-dev/skills/google-signin/SKILL.md +11 -9
- package/plugins/sheleg-dev/skills/stripe-billing/SKILL.md +10 -15
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,40 @@
|
|
|
1
|
+
## v0.15.0: short router descriptions
|
|
2
|
+
|
|
3
|
+
- Every skill's front-matter `description` is now a router, not a manual: one
|
|
4
|
+
"Use when" sentence, a "Not for" boundary naming the sibling skill, the opt-out
|
|
5
|
+
phrase (no wiring, без обвязки) and a short English and Russian trigger list.
|
|
6
|
+
Lengths before and after: stripe-billing 965 to 459, error-tracking 962 to 395,
|
|
7
|
+
frontend-performance 885 to 412, crypto-payments 884 to 398, ad-tracking 859 to 408,
|
|
8
|
+
google-signin 821 to 386, google-auth 798 to 417 (6,174 to 2,875 chars in total).
|
|
9
|
+
- Why: Claude Code shares about 30,000 chars of skill listing across every installed
|
|
10
|
+
skill. Measured on 2026-10-20, the operator's listing held 29,995 chars for 134 skills
|
|
11
|
+
and 81 of them showed no description. Plugin skills cannot be hidden, so description
|
|
12
|
+
length is the only lever.
|
|
13
|
+
- Every trigger phrase removed from a description moved verbatim into a new
|
|
14
|
+
`## Triggers` section at the end of that skill's body, so the family's routing hook
|
|
15
|
+
still finds each of its words in the skill's text.
|
|
16
|
+
- `test/validate.py` refuses a description over 500 chars (the family cap; the
|
|
17
|
+
standard's 1024 stays the hard limit). The CI plant that pads crypto-payments by
|
|
18
|
+
320 chars now trips this cap.
|
|
19
|
+
- `docs/evals/stripe-billing.md` restates the recomputed body budget (4603 tokens,
|
|
20
|
+
403 lines).
|
|
21
|
+
|
|
22
|
+
## v0.14.0 — frontend performance is tested in WebKit (Safari) first
|
|
23
|
+
|
|
24
|
+
- `frontend-performance/SKILL.md` gains *Test browser — WebKit (Safari) first*:
|
|
25
|
+
Safari through `safaridriver`, Playwright `webkit` (`--browser webkit`,
|
|
26
|
+
`npx playwright install webkit`), Safari Web Inspector's Timelines, and
|
|
27
|
+
`open -a Safari <url>` on macOS rather than the system default browser.
|
|
28
|
+
- Lighthouse, PageSpeed Insights, CrUX, CDP traces and the chrome-devtools MCP stay
|
|
29
|
+
as the stated Chromium exception (Chromium by definition): Chrome Dev, a
|
|
30
|
+
temporary profile, every started process closed. A page checked only in Chromium
|
|
31
|
+
is reported as exactly that; a Lighthouse score is not a cross-browser verdict.
|
|
32
|
+
- The Measure and Validate steps run the WebKit pass too; *Degradation* names the
|
|
33
|
+
WebKit channels; the contrast check in `references/accessibility-perf.md` starts
|
|
34
|
+
in Safari Web Inspector.
|
|
35
|
+
- New regression `test/audit_regressions/safari-first.py` with drop mutations. Text
|
|
36
|
+
integrity only; no hook or script behaviour changed.
|
|
37
|
+
|
|
1
38
|
## v0.13.4 — FW03 credential boundaries
|
|
2
39
|
|
|
3
40
|
- Supply a copyable, locally tested Stripe mode assertion before client construction.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ssheleg/sheleg-dev",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.15.0",
|
|
4
4
|
"description": "Seven integration skills for the layer a product reaches once it has users: Stripe subscription billing and cancellation retention, crypto payments, ad and conversion tracking under Consent Mode v2, Google sign-in and the wider Google auth surface, error tracking, and Core Web Vitals. This package is the installer CLI.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"sheleg-dev": "bin/sheleg-dev.js"
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"name": "sheleg-dev",
|
|
4
4
|
"displayName": "Sheleg Dev",
|
|
5
5
|
"description": "The integration layer a product needs once it has users: Stripe subscription billing reconciled into your own database, crypto payments that survive over-payment and duplicate webhooks, ad and conversion tracking under Consent Mode v2, Google sign-in with the account-linking guards, the wider Google auth surface, and Core Web Vitals work that moves the score, and Sentry error tracking wired so it does not forward your own credentials to a third party and so a stack trace names the commit that caused it.",
|
|
6
|
-
"version": "0.
|
|
6
|
+
"version": "0.15.0",
|
|
7
7
|
"author": {
|
|
8
8
|
"name": "ssheleg",
|
|
9
9
|
"url": "https://x.com/sshlg93"
|
|
@@ -1,16 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ad-tracking
|
|
3
3
|
description: >-
|
|
4
|
-
Use when
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
cross-device tracking, and GDPR/DMA compliance. Triggers - "ad tracking", "conversion
|
|
10
|
-
tracking", "meta pixel", "fbq", "google ads", "GA4", "gtag", "consent mode", "cookie consent",
|
|
11
|
-
"enhanced conversions", "retargeting", "purchase event", "CAPI", "gclid", "UTM",
|
|
12
|
-
"attribution", "отслеживание конверсий", "пиксель Meta", "согласие на куки", "ретаргетинг",
|
|
13
|
-
"аналитика рекламы". Not for running the ad campaigns themselves.
|
|
4
|
+
Use when wiring or auditing ad pixels and conversion tracking on the web: GA4, Google Ads,
|
|
5
|
+
Meta Pixel and CAPI, LinkedIn Insight Tag, under Consent Mode v2 and GDPR/DMA. Not for
|
|
6
|
+
running the campaigns, or the charge itself (stripe-billing). Opt out: no wiring, без
|
|
7
|
+
обвязки. Triggers - "conversion tracking", "meta pixel", "consent mode", "GA4", "CAPI",
|
|
8
|
+
"отслеживание конверсий", "пиксель Meta", "ретаргетинг".
|
|
14
9
|
license: MIT
|
|
15
10
|
---
|
|
16
11
|
|
|
@@ -425,3 +420,9 @@ and what to do about it — see the `frontend-performance` skill in this pack.
|
|
|
425
420
|
- **No network, or the ad platform's API unreachable**: server-side events cannot be
|
|
426
421
|
verified end to end. Say the dedup check did not run rather than reporting it held;
|
|
427
422
|
a browser pixel firing proves the browser, never the conversion.
|
|
423
|
+
|
|
424
|
+
## Triggers
|
|
425
|
+
|
|
426
|
+
More phrases that route here: "ad tracking", "fbq", "google ads", "gtag", "cookie consent",
|
|
427
|
+
"enhanced conversions", "retargeting", "purchase event", "gclid", "UTM", "attribution",
|
|
428
|
+
"согласие на куки", "аналитика рекламы".
|
|
@@ -1,16 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: crypto-payments
|
|
3
3
|
description: >-
|
|
4
|
-
Use when adding or auditing crypto checkout, crypto top-up
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
credit waterfalls, refund and AML-hold states, local development with a tunnel and signed mock
|
|
10
|
-
callbacks, a test matrix and a security checklist. Triggers - "crypto payment", "crypto
|
|
11
|
-
checkout", "pay with crypto", "USDT payment", "TRC20", "payment webhook", "IPN", "webhook
|
|
12
|
-
signature", "underpayment", "Heleket", "NOWPayments", "приём криптоплатежей", "оплата
|
|
13
|
-
криптой", "вебхук платежа", "недоплата". Not for card billing — use stripe-billing.
|
|
4
|
+
Use when adding or auditing crypto checkout, crypto top-up or payment webhooks: invoice
|
|
5
|
+
states, signed callbacks, idempotent processing, underpayment and rate drift. Not for card
|
|
6
|
+
billing (stripe-billing). Opt out: no wiring, без обвязки. Triggers - "crypto payment",
|
|
7
|
+
"USDT payment", "payment webhook", "webhook signature", "underpayment", "приём
|
|
8
|
+
криптоплатежей", "оплата криптой", "вебхук платежа".
|
|
14
9
|
license: MIT
|
|
15
10
|
---
|
|
16
11
|
|
|
@@ -414,3 +409,8 @@ a green suite, each with the defect it catches:
|
|
|
414
409
|
half of this skill. Say the check did not run rather than reporting the invariant as
|
|
415
410
|
held — an unrun check and a passing one are indistinguishable from the exit code
|
|
416
411
|
nobody looked at.
|
|
412
|
+
|
|
413
|
+
## Triggers
|
|
414
|
+
|
|
415
|
+
More phrases that route here: "crypto checkout", "pay with crypto", "TRC20", "IPN",
|
|
416
|
+
"Heleket", "NOWPayments", "недоплата".
|
|
@@ -1,17 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: error-tracking
|
|
3
3
|
description: >-
|
|
4
|
-
Use when wiring error tracking into a
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
a project, and the MCP server with the config channel it belongs in. Triggers - "add Sentry",
|
|
10
|
-
"set up error tracking", "SENTRY_DSN", "sentry-cli", "sentry mcp", "scrub secrets from
|
|
11
|
-
errors", "release tracking", "suspect commits", "why is Sentry empty", "подключить Sentry",
|
|
12
|
-
"трекинг ошибок", "секреты в Sentry", "релизы в Sentry", "наблюдаемость". NOT for judging an
|
|
13
|
-
agent's trajectory (agent-evals), triaging tickets in a tracker (your tracker's own triage
|
|
14
|
-
skill), or choosing an uptime vendor.
|
|
4
|
+
Use when wiring error tracking into a service: the Sentry SDK, where a DSN may live,
|
|
5
|
+
scrubbing secrets out of events, and tying releases to commits. Not for judging an agent's
|
|
6
|
+
trajectory (agent-evals) or choosing an uptime vendor. Opt out: no wiring, без обвязки.
|
|
7
|
+
Triggers - "add Sentry", "SENTRY_DSN", "sentry-cli", "release tracking", "подключить
|
|
8
|
+
Sentry", "трекинг ошибок", "секреты в Sentry".
|
|
15
9
|
license: MIT
|
|
16
10
|
---
|
|
17
11
|
|
|
@@ -285,3 +279,8 @@ Two claims worth re-measuring rather than trusting from this page, because both
|
|
|
285
279
|
are version-dependent: the default denylist contents, and whether the SDK has
|
|
286
280
|
started scrubbing values. `references/scrubbing.md` carries the command for
|
|
287
281
|
each.
|
|
282
|
+
|
|
283
|
+
## Triggers
|
|
284
|
+
|
|
285
|
+
More phrases that route here: "set up error tracking", "sentry mcp", "scrub secrets from
|
|
286
|
+
errors", "suspect commits", "why is Sentry empty", "релизы в Sentry", "наблюдаемость".
|
|
@@ -1,16 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: frontend-performance
|
|
3
3
|
description: >-
|
|
4
|
-
Use when building or auditing web pages for
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
optimization, and the contrast and heading issues that move a Lighthouse score. Triggers -
|
|
10
|
-
"performance audit", "PageSpeed", "Lighthouse", "Core Web Vitals", "LCP", "CLS", "INP",
|
|
11
|
-
"render-blocking", "bundle size", "code splitting", "lazy loading", "cache headers",
|
|
12
|
-
"performance budget", "ускорить сайт", "медленно грузится", "оптимизация скорости", "вес
|
|
13
|
-
бандла". Not for visual design or conversion work.
|
|
4
|
+
Use when building or auditing web pages for speed: Core Web Vitals (LCP, INP, CLS),
|
|
5
|
+
Lighthouse and PageSpeed scores, render-blocking resources, bundle size, fonts and
|
|
6
|
+
caching. Not for visual design (sheleg-design) or conversion work. Opt out: no wiring, без
|
|
7
|
+
обвязки. Triggers - "PageSpeed", "Lighthouse", "Core Web Vitals", "bundle size",
|
|
8
|
+
"performance budget", "ускорить сайт", "медленно грузится", "вес бандла".
|
|
14
9
|
license: MIT
|
|
15
10
|
---
|
|
16
11
|
|
|
@@ -20,11 +15,33 @@ Optimize frontend applications for maximum Lighthouse scores and real-user perfo
|
|
|
20
15
|
|
|
21
16
|
## Audit Workflow
|
|
22
17
|
|
|
23
|
-
1. **Measure** -- Run PageSpeed Insights or Lighthouse. Record scores and
|
|
18
|
+
1. **Measure** -- Run PageSpeed Insights or Lighthouse (Chromium) and load the same scenario in WebKit first (see *Test browser* below). Record scores, failing audits and the engine of each number.
|
|
24
19
|
2. **Diagnose** -- Map each failing audit to a specific code-level cause (see checklist below).
|
|
25
20
|
3. **Prioritize** -- Fix by impact: P0 blocks rendering, P1 hurts metrics, P2 is informational.
|
|
26
21
|
4. **Implement** -- Apply fixes per the reference guides.
|
|
27
|
-
5. **Validate** -- `next build` (or framework equivalent) + re-run Lighthouse. Verify no regressions.
|
|
22
|
+
5. **Validate** -- `next build` (or framework equivalent) + re-run Lighthouse and the WebKit run. Verify no regressions in either engine.
|
|
23
|
+
|
|
24
|
+
## Test browser — WebKit (Safari) first
|
|
25
|
+
|
|
26
|
+
Load and profile the page in **WebKit first**: Safari through `safaridriver`
|
|
27
|
+
(WebDriver; `sudo safaridriver --enable` once) for a real browser, Playwright's
|
|
28
|
+
`webkit` (the `webkit` project, `--browser webkit`, installed with
|
|
29
|
+
`npx playwright install webkit`) for scripted runs and traces, Safari Web
|
|
30
|
+
Inspector's Timelines for debugging. On macOS open a page with
|
|
31
|
+
`open -a Safari <url>`, not the system default browser, which may be another
|
|
32
|
+
engine. An automation library (browser-use and the like) runs on its
|
|
33
|
+
WebKit/Safari backend where it has one. WebKit has the narrowest support
|
|
34
|
+
envelope of the big three — a regression that only iOS Safari users feel is
|
|
35
|
+
invisible to every Chrome tool below.
|
|
36
|
+
|
|
37
|
+
**Lighthouse, PageSpeed Insights, CrUX, a CDP trace and the chrome-devtools MCP
|
|
38
|
+
are Chromium by definition** — they stay in this workflow as the **stated
|
|
39
|
+
Chromium exception**: use them when the task needs Chrome itself, and say which
|
|
40
|
+
and why. Prefer the Chrome Dev build for a Chrome run you start; give it a
|
|
41
|
+
temporary profile (never the user's), record what you started, and close every
|
|
42
|
+
process you started before you finish. A page checked only in Chromium is
|
|
43
|
+
reported as "checked only in Chromium", never as "tested in a browser"; a
|
|
44
|
+
Lighthouse score is a Chrome lab number, not a cross-browser verdict.
|
|
28
45
|
|
|
29
46
|
## Core Web Vitals, and the diagnostics beside them
|
|
30
47
|
|
|
@@ -198,8 +215,13 @@ how a typo survives review.
|
|
|
198
215
|
- **Not Claude Code** (Cursor, Codex, the skills CLI, the API container): the pack's
|
|
199
216
|
`PreToolUse` gate does not run — every rule here still applies, enforced by a person
|
|
200
217
|
instead of a hook.
|
|
201
|
-
- **No browser channel** (no Chrome DevTools MCP
|
|
218
|
+
- **No browser channel** (no `safaridriver`, no Playwright `webkit`, no Chrome DevTools MCP): a page is judged from
|
|
202
219
|
the diff and the numbers are not measured on this machine. Record the weaker claim;
|
|
203
220
|
a Lighthouse score nobody ran is not a score.
|
|
204
221
|
- **No network**: PageSpeed Insights and field data are unavailable. Lab reasoning is
|
|
205
222
|
still worth doing — say which half you did.
|
|
223
|
+
|
|
224
|
+
## Triggers
|
|
225
|
+
|
|
226
|
+
More phrases that route here: "performance audit", "LCP", "CLS", "INP", "render-blocking",
|
|
227
|
+
"code splitting", "lazy loading", "cache headers", "оптимизация скорости".
|
|
@@ -56,7 +56,7 @@ If you need visual hierarchy without reducing contrast below WCAG thresholds:
|
|
|
56
56
|
|
|
57
57
|
### Checking Contrast
|
|
58
58
|
|
|
59
|
-
|
|
59
|
+
Inspect in Safari Web Inspector first: the Computed styles give the text colour and, on the element or the ancestor that paints it, the background colour; and the formula below gives the ratio. Chrome DevTools' color picker shows the contrast ratio directly — a Chromium tool, so name it as the engine you checked in.
|
|
60
60
|
|
|
61
61
|
Or calculate manually: `(L1 + 0.05) / (L2 + 0.05)` where L1 is the lighter relative luminance.
|
|
62
62
|
|
|
@@ -1,16 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: google-auth
|
|
3
3
|
description: >-
|
|
4
|
-
Use when a
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
"google-auth-library", "ADC", "Application Default Credentials", "service account",
|
|
10
|
-
"Workload Identity Federation", "Google ID token", "verifyIdToken",
|
|
11
|
-
"GOOGLE_APPLICATION_CREDENTIALS", "Google SSO", "авторизация Google", "сервисный аккаунт",
|
|
12
|
-
"ключи сервисного аккаунта", "проверить ID-токен". For end-user web sign-in only, use the
|
|
13
|
-
google-signin skill instead.
|
|
4
|
+
Use when a Node.js or Python server authenticates to Google: OAuth 2.0 flows, server-side
|
|
5
|
+
ID token verification, service accounts, Application Default Credentials, Workload
|
|
6
|
+
Identity Federation, API keys. Not for end-user web sign-in (google-signin). Opt out: no
|
|
7
|
+
wiring, без обвязки. Triggers - "google auth", "google-auth-library", "service account",
|
|
8
|
+
"ADC", "verifyIdToken", "авторизация Google", "сервисный аккаунт".
|
|
14
9
|
license: MIT
|
|
15
10
|
---
|
|
16
11
|
|
|
@@ -289,3 +284,9 @@ if credentials.expired and credentials.refresh_token:
|
|
|
289
284
|
- **No browser, or no console access**: the consent screen and the client-id half are a
|
|
290
285
|
human step. Name the exact screen and what is blocked, do the code half, and do not
|
|
291
286
|
loop on a login only a person can complete.
|
|
287
|
+
|
|
288
|
+
## Triggers
|
|
289
|
+
|
|
290
|
+
More phrases that route here: "OAuth 2.0 Google", "Application Default Credentials",
|
|
291
|
+
"Workload Identity Federation", "Google ID token", "GOOGLE_APPLICATION_CREDENTIALS", "Google
|
|
292
|
+
SSO", "ключи сервисного аккаунта", "проверить ID-токен".
|
|
@@ -1,15 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: google-signin
|
|
3
3
|
description: >-
|
|
4
|
-
Use when implementing
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
checklist. Triggers - "sign in with google", "google login", "google sign-in button", "GIS",
|
|
10
|
-
"google.accounts.id", "gsi/client", "verify google token", "one tap", "account linking",
|
|
11
|
-
"login csrf", "g_csrf_token", "вход через Google", "кнопка входа Google", "связать аккаунты",
|
|
12
|
-
"проверить токен Google". For the broader library surface use google-auth instead.
|
|
4
|
+
Use when implementing or debugging Google sign-in on a website: the GIS button or One Tap,
|
|
5
|
+
server-side ID token checks, linking Google to password accounts, login CSRF. Not for a
|
|
6
|
+
server authenticating to Google (google-auth). Opt out: no wiring, без обвязки. Triggers -
|
|
7
|
+
"sign in with google", "google login", "GIS", "one tap", "account linking", "вход через
|
|
8
|
+
Google", "связать аккаунты".
|
|
13
9
|
license: MIT
|
|
14
10
|
---
|
|
15
11
|
|
|
@@ -163,3 +159,9 @@ attacker's account.
|
|
|
163
159
|
the code, not by watching it work. Record that as the weaker claim it is.
|
|
164
160
|
- **No console access**: creating the OAuth client is a human step; state it once, do
|
|
165
161
|
the rest, and say what is waiting on it.
|
|
162
|
+
|
|
163
|
+
## Triggers
|
|
164
|
+
|
|
165
|
+
More phrases that route here: "google sign-in button", "google.accounts.id", "gsi/client",
|
|
166
|
+
"verify google token", "login csrf", "g_csrf_token", "кнопка входа Google", "проверить токен
|
|
167
|
+
Google", "origin is not allowed for the given client ID".
|
|
@@ -1,21 +1,12 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: stripe-billing
|
|
3
3
|
description: >-
|
|
4
|
-
Use when connecting a product to Stripe, fixing a payment bug
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
billing_reason decides, cumulative refunds, the cancellation field
|
|
11
|
-
flexible billing_mode moved, retention eligibility Stripe cannot express,
|
|
12
|
-
and write ordering with compensating reverts. Triggers - "add Stripe",
|
|
13
|
-
"Stripe checkout", "subscription billing", "webhook signature",
|
|
14
|
-
"invoice.paid", "proration", "refund", "cancel subscription",
|
|
15
|
-
"retention coupon", "подключить Stripe", "оплата подпиской",
|
|
16
|
-
"вебхук Stripe", "скидка при отмене", "биллинг подписок". Not for choosing
|
|
17
|
-
between Stripe products (stripe-best-practices) or reading Stripe docs
|
|
18
|
-
(stripe-docs).
|
|
4
|
+
Use when connecting a product to Stripe, fixing a payment bug ("баг в оплате") or auditing
|
|
5
|
+
a live integration: checkout, renewals, refunds, cancellation and the retention coupon,
|
|
6
|
+
and the webhook that grants an entitlement. Not for crypto (crypto-payments). Opt out: no
|
|
7
|
+
wiring, без обвязки. Triggers - "add Stripe", "Stripe checkout", "subscription billing",
|
|
8
|
+
"webhook signature", "cancel subscription", "подключить Stripe", "оплата подпиской",
|
|
9
|
+
"вебхук Stripe".
|
|
19
10
|
license: MIT
|
|
20
11
|
---
|
|
21
12
|
|
|
@@ -416,3 +407,7 @@ The full security checklist lives in `references/stripe-agent-toolchain.md`; eve
|
|
|
416
407
|
pitfall it used to list is stated where the rule is, which is the only place it can
|
|
417
408
|
be kept true.
|
|
418
409
|
|
|
410
|
+
## Triggers
|
|
411
|
+
|
|
412
|
+
More phrases that route here: "invoice.paid", "proration", "refund", "retention coupon",
|
|
413
|
+
"скидка при отмене", "биллинг подписок", "оплата".
|