@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 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.13.4",
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.13.4",
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 setting up or modifying ad pixel integration, conversion tracking, consent
5
- management, purchase event tracking, retargeting audiences, or auditing an existing
6
- advertising analytics stack. Covers Google Analytics 4, Google Ads, Meta (Facebook) Pixel and
7
- LinkedIn Insight Tag in web applications: Consent Mode v2, standard events, e-commerce
8
- tracking, advanced matching, Enhanced Conversions, CSP configuration, user identification,
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, or payment webhooks — where a
5
- payer sends the wrong amount, a webhook arrives more than once, and the rate moves between
6
- quote and transfer. Covers invoice lifecycle and status mapping, webhook signature
7
- verification and the JSON-escaping trap, idempotent processing, IP allowlisting behind a
8
- proxy, CSRF exemption for callback routes, the conversion buffer, reconciliation fields,
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 product — adding Sentry to a service, deciding what a
5
- DSN is and where it may live, keeping secrets out of events before they reach a third party,
6
- tying releases to commits so a stack trace names the change that caused it, or judging whether
7
- a green health check means anything. Covers the Sentry SDK options that matter for a backend,
8
- the two different tools both called sentry, the auth-token taxonomy and which kind can create
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 performance — running PageSpeed Insights,
5
- optimizing Lighthouse scores, fixing render-blocking resources, reducing bundle size,
6
- improving load times, or diagnosing slow page rendering. Covers Core Web Vitals (LCP, INP,
7
- CLS) and the Lighthouse diagnostics beside them (FCP, TBT, Speed Index), font loading strategies, CSS animation compositing, JavaScript
8
- bundle optimization, cache headers, code splitting, Content Security Policy, image
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 failing audits.
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, no Playwright): a page is judged from
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
- Use Chrome DevTools: inspect element -> color picker shows contrast ratio against computed background.
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 server authenticates to Google in a Node.js or Python application — OAuth 2.0
5
- flows, verifying Google ID tokens server-side, service account authentication and keys,
6
- Application Default Credentials, Workload Identity Federation, API keys, or working with
7
- google-auth-library (Node.js) or google-auth (Python). Covers server-side ID token
8
- verification and security best practices. Triggers - "google auth", "OAuth 2.0 Google",
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, reviewing or debugging Google login / sign-in / sign-up on a website —
5
- wiring the GIS button or One Tap, verifying Google ID tokens on the server, linking Google to
6
- existing password accounts, or fixing "origin is not allowed for the given client ID". Covers
7
- GCP OAuth client setup, backend ID-token verification, three-way account linking with the pre-
8
- hijacking guard, login-CSRF defense, nonce/replay protection and a mandatory security
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
- ("баг в оплате", "оплата"), or auditing a live integration: checkout,
6
- renewals, seats, proration, refunds, cancellation and the cancel-step
7
- coupon, the portal, and the webhook that turns a payment into an
8
- entitlement. Covers Stripe's agent toolchain, the pinned API version, SDK
9
- retries, price resolution, claim-first webhook idempotency, what
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
+ "скидка при отмене", "биллинг подписок", "оплата".