@ssheleg/sheleg-dev 0.12.0 → 0.13.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,34 @@
1
+ ## v0.13.0 — the gate exists on one surface, and every skill now says so
2
+
3
+ This pack ships a `PreToolUse` money gate (`hooks/money-gate.js`) that refuses a refund,
4
+ a payout, a dispute close, a live `sk_live_…` key and `SKIP_BILLING=true` in production
5
+ until the authorised person has signed that category off. It runs on Claude Code and
6
+ nowhere else. Measured 2026-09-14: of the seven skills, **one** (`error-tracking`) wrote
7
+ a degradation contract; `stripe-billing` never mentioned the gate at all and
8
+ `crypto-payments` named it and sent the consequences to the README — so the two skills
9
+ the gate exists FOR were the two that did not say what happens without it.
10
+
11
+ - **`## Degradation` in all seven skill bodies**, one line per axis, in the shape
12
+ `references/host-capabilities.md` requires: not-Claude-Code, installed-by-copy, and the
13
+ capability each skill's own work needs (Stripe CLI, node fixtures, a browser channel, a
14
+ console login).
15
+ - **`check_degradation_is_written_where_a_host_capability_ships`** — a pack that ships
16
+ `hooks/hooks.json` requires the section in every skill body. Watched failing on four
17
+ skills before they were written.
18
+ - **The body budget is MEASURED, not estimated.** This gate divided by 3.9 chars/token
19
+ while the family's CI auditor measures with tiktoken, and the two disagree by up to 8%
20
+ in the same direction: `crypto-payments` estimated **4986** and measured **4618** — a
21
+ verdict of *past the working limit* over 132 tokens of real headroom, which is what
22
+ blocked this change from landing. With no tokenizer installed the check now DISCLOSES
23
+ that it could not measure instead of failing a file it never counted. make-skill
24
+ v0.28.0 closed exactly this for the family auditor; this repo kept the estimate and so
25
+ kept the defect.
26
+ - **The `биллинг` trigger is now `биллинг подписок`.** Bare `биллинг` collided with
27
+ `agent-orchestrator`'s `биллинг LLM` across packs, where no per-repo validator can see
28
+ it: this one meters what an agent burned, that one charges a card.
29
+ - `docs/evals/stripe-billing.md` restates a measured figure (4521 tokens, tiktoken)
30
+ rather than a heuristic one, and the validator compares it to a measurement.
31
+
1
32
  ## v0.12.0 — the integration doctrine closes its audit, and a crypto reference gains its map
2
33
 
3
34
  Sherlock external-v3 (43 findings) — the largest share in the family — each with
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ssheleg/sheleg-dev",
3
- "version": "0.12.0",
3
+ "version": "0.13.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.12.0",
6
+ "version": "0.13.0",
7
7
  "author": {
8
8
  "name": "ssheleg",
9
9
  "url": "https://x.com/sshlg93"
@@ -414,3 +414,14 @@ when** line, so the trigger has one home and this table stays an index.
414
414
 
415
415
  For the page-speed side of the same problem — what the tag does to LCP and TBT,
416
416
  and what to do about it — see the `frontend-performance` skill in this pack.
417
+
418
+ ## Degradation
419
+
420
+ - **Not Claude Code** (Cursor, Codex, the skills CLI, the API container): the pack's
421
+ `PreToolUse` gate does not run. It is the thing that refuses a live key or an
422
+ irreversible action in this pack; elsewhere those rules are advice you follow by hand.
423
+ - **Installed by copy rather than as a plugin**: the doctrine arrives, `hooks/` does not
424
+ — same loss, same remedy.
425
+ - **No network, or the ad platform's API unreachable**: server-side events cannot be
426
+ verified end to end. Say the dedup check did not run rather than reporting it held;
427
+ a browser pixel firing proves the browser, never the conversion.
@@ -399,3 +399,18 @@ a green suite, each with the defect it catches:
399
399
  | Cannot answer "how much did we net" | commission and `merchantAmount` never stored |
400
400
  | A dev machine, a CI job or an agent run is holding the production key | no separate credential, and no assertion binding the key to a declared environment |
401
401
  | Real invoices in a merchant dashboard nobody watches | a staging credential declared live — the mismatch nothing refused |
402
+
403
+ ## Degradation
404
+
405
+ - **Not Claude Code** (Cursor, Codex, the skills CLI, the API container): the
406
+ `PreToolUse` gate named above — `plugins/sheleg-dev/hooks/money-gate.js` — does not
407
+ run there. Nothing refuses a payout, a refund, an exported `HELEKET_API_KEY` in a
408
+ `test` run, or `SKIP_BILLING=true` in production. The three lines are advice again,
409
+ which is exactly the state that made them ineffective for four releases: name the
410
+ surface you are on, and make the authorisation a human step out loud.
411
+ - **Installed by copy rather than as a plugin**: the doctrine arrives, the hook does
412
+ not. The README carries the categories and how one is authorised for a session.
413
+ - **No node, or the fixtures cannot run**: the invariant fixtures are the executable
414
+ half of this skill. Say the check did not run rather than reporting the invariant as
415
+ held — an unrun check and a passing one are indistinguishable from the exit code
416
+ nobody looked at.
@@ -192,3 +192,14 @@ Four names that used to sit here — `frontend-design`, `landing-page-design`,
192
192
  `next-best-practices`, `responsive-design` — resolved to nothing installable, and
193
193
  `seo-audit` was one character-class away from the real `seo-aeo-audit`, which is
194
194
  how a typo survives review.
195
+
196
+ ## Degradation
197
+
198
+ - **Not Claude Code** (Cursor, Codex, the skills CLI, the API container): the pack's
199
+ `PreToolUse` gate does not run — every rule here still applies, enforced by a person
200
+ instead of a hook.
201
+ - **No browser channel** (no Chrome DevTools MCP, no Playwright): a page is judged from
202
+ the diff and the numbers are not measured on this machine. Record the weaker claim;
203
+ a Lighthouse score nobody ran is not a score.
204
+ - **No network**: PageSpeed Insights and field data are unavailable. Lab reasoning is
205
+ still worth doing — say which half you did.
@@ -279,3 +279,12 @@ if credentials.expired and credentials.refresh_token:
279
279
  - **[ADC & Service Accounts](references/adc-and-service-accounts.md)** — Application Default Credentials setup, service account keys, JWT, Compute credentials, environment configuration (Node.js + Python)
280
280
  - **[Sign In with Google](references/sign-in-with-google.md)** — Google Identity Services (GIS), ID token verification, CSRF protection, One Tap, FedCM (Node.js + Python)
281
281
  - **[Workload Identity Federation](references/workload-identity.md)** — AWS, Azure, OIDC/SAML federation, workforce identity, executable-sourced credentials (Node.js + Python)
282
+
283
+ ## Degradation
284
+
285
+ - **Not Claude Code** (Cursor, Codex, the skills CLI, the API container): the pack's
286
+ `PreToolUse` gate does not run; a live credential is refused by nothing but you.
287
+ - **Installed by copy rather than as a plugin**: doctrine yes, `hooks/` no.
288
+ - **No browser, or no console access**: the consent screen and the client-id half are a
289
+ human step. Name the exact screen and what is blocked, do the code half, and do not
290
+ loop on a login only a person can complete.
@@ -151,3 +151,12 @@ attacker's account.
151
151
  | `access_denied` on consent | Consent screen still in Testing → publish the app |
152
152
  | Works locally, breaks in prod | Prod origin missing in GCP, or `Secure` cookie served over plain HTTP |
153
153
  | One Tap missing / FedCM console warnings | FedCM is mandatory since Aug 2025 and the opt-out is gone (checked 2026-08-06). Load `gsi/client` from Google and keep it current — a vendored or pinned copy is the real break. The rendered button flow is unaffected; code branching on the old `isNotDisplayed()` moment callbacks is not |
154
+
155
+ ## Degradation
156
+
157
+ - **Not Claude Code** (Cursor, Codex, the skills CLI, the API container): the pack's
158
+ `PreToolUse` gate does not run — the rules here hold, the refusal does not.
159
+ - **No browser channel**: the sign-in button and its redirect are verified by reading
160
+ the code, not by watching it work. Record that as the weaker claim it is.
161
+ - **No console access**: creating the OAuth client is a human step; state it once, do
162
+ the rest, and say what is waiting on it.
@@ -6,14 +6,14 @@ description: >-
6
6
  coupon offered at the cancel step, the portal, and the webhook that
7
7
  turns a payment into an entitlement in your database. Covers Stripe's
8
8
  agent toolchain, the pinned API version and SDK retries, price
9
- resolution across modes, claim-first webhook idempotency, what invoice
9
+ resolution, claim-first webhook idempotency, what invoice
10
10
  billing_reason decides, cumulative refunds, the cancellation field
11
11
  flexible billing_mode moved, retention eligibility Stripe cannot
12
12
  express, and write ordering with compensating reverts. Triggers - "add
13
13
  Stripe", "Stripe checkout", "subscription billing", "webhook signature",
14
14
  "invoice.paid", "proration", "refund", "cancel subscription", "retention
15
15
  coupon", "подключить Stripe", "оплата подпиской", "вебхук Stripe",
16
- "скидка при отмене", "биллинг". Not for choosing between Stripe products
16
+ "скидка при отмене", "биллинг подписок". Not for choosing between Stripe products
17
17
  (stripe-best-practices) or reading Stripe docs (stripe-docs).
18
18
  license: MIT
19
19
  ---
@@ -379,6 +379,21 @@ renewal and proration. The one thing to know before you get there: the signing
379
379
  secret `stripe listen` prints is **not** the dashboard's, and using the wrong one
380
380
  fails verification in a way that reads like a key problem.
381
381
 
382
+ ## Degradation
383
+
384
+ - **Not Claude Code** (Cursor, Codex, the skills CLI, the API container): the
385
+ `PreToolUse` money gate this pack ships does not exist there — nothing refuses a
386
+ refund, a payout, a dispute close or a live `sk_live_…` key on your behalf. Every
387
+ rule below still holds; it is advice again rather than a precondition, so the
388
+ authorisation step becomes a human one. Say which you are on before acting on money.
389
+ - **Installed by copy rather than as a plugin**: same loss, same remedy — a plain
390
+ `~/.claude/skills/` copy carries the doctrine and not `hooks/money-gate.js`. The
391
+ README names the categories and how one is signed off; without the hook, that
392
+ sign-off is a sentence somebody has to actually say.
393
+ - **No Stripe CLI, no network, or test keys only**: webhook signature verification and
394
+ the local replay loop are the parts that need the binary. State which is missing
395
+ once, do the rest, and record what could not be verified rather than implying it was.
396
+
382
397
  ## Before you ship
383
398
 
384
399
  Not a second checklist — every rule below already has a section above, and a rule