@getvitops/cli 8.3.0-alpha.4 → 8.3.0-alpha.5

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@getvitops/cli",
3
- "version": "8.3.0-alpha.4",
3
+ "version": "8.3.0-alpha.5",
4
4
  "description": "CLI for the Vitops design-system generator: generate, init, and validate a design-system.json.",
5
5
  "homepage": "https://docs.vitops.ca",
6
6
  "bugs": "https://github.com/getvitops/design-system/issues",
@@ -29,8 +29,8 @@
29
29
  "access": "public"
30
30
  },
31
31
  "dependencies": {
32
- "@getvitops/generator": "8.3.0-alpha.4",
33
- "@getvitops/utils": "8.3.0-alpha.4"
32
+ "@getvitops/generator": "8.3.0-alpha.5",
33
+ "@getvitops/utils": "8.3.0-alpha.5"
34
34
  },
35
35
  "devDependencies": {},
36
36
  "engines": {
package/skill/SKILL.md CHANGED
@@ -5,12 +5,10 @@ description: >-
5
5
  styling or authoring pages or components (choosing utility/pattern classes,
6
6
  colours, spacing, typography), when editing design-system.json (tokens,
7
7
  palette, patterns, scales, animations), when generating output (vitops
8
- generate --format tailwind|css|bricks), when asking what the design system
9
- provides on a given platform (Tailwind vs Bricks vs standalone CSS), and when
10
- touching the site subsystems it generates or gates: the cookie-consent banner
11
- and gating third-party tags, ad-click attribution and conversion
12
- notifications, the generated privacy policy / terms / cookie notice, and
13
- Google Search Console onboarding or post-deploy indexing.
8
+ generate --format tailwind|css|bricks), or when asking what the design system
9
+ provides on a given platform (Tailwind vs Bricks vs standalone CSS). Consent
10
+ gating, ad tracking, legal documents and Search Console have their own skills
11
+ or `vitops docs` topics.
14
12
  ---
15
13
 
16
14
  # Vitops design system
@@ -278,51 +276,4 @@ where no provider covers the family.
278
276
  refresh the AGENTS.md pointer block. The links point into the installed package and
279
277
  survive version bumps; re-run only if they were deleted.
280
278
 
281
- ## Consent and third-party tags
282
-
283
- If the site has a consent gate, **every** non-essential third party goes through it. Run
284
- `vitops docs consent` before wiring one up — the failure modes here are silent and legal.
285
- The four that bite:
286
-
287
- - **A gated tag must render inert.** `type="text/plain"` + `data-consent="<category>"` +
288
- the URL on `data-src` (never `src`), plus `data-consent-cookies` naming what it sets so
289
- a revoke can clear them. Given a live `src` the browser fetches the library immediately
290
- and the gate is decorative — an undecided visitor's page must issue **no** third-party
291
- request.
292
- - **Use `require()`, not `granted()`, when you want permission.** `granted()` is passive:
293
- it never raises the banner, so on a site where nothing else demands that category it is a
294
- **permanent silent no-op** and your write never happens. `require()` registers the demand,
295
- which is what makes the banner appear. `request()` is the promise form.
296
- - **No `window.vitopsConsent` means the site has no gate — store freely.** It does not mean
297
- denied. (A synchronous stub in `<head>` covers the window before the runtime loads, so
298
- absence is reliable. Listen for the `vitops:consent` event rather than calling
299
- `subscribe()`, which the stub lacks.)
300
- - **Patch exactly the categories you put on screen.** `acceptAll()` / `rejectAll()` mean
301
- literally every optional category — using one to answer a single-category prompt records
302
- consent nobody gave. "Not asked" is a third value (`null`), distinct from declined, and
303
- only it can be re-prompted.
304
-
305
- The banner is **demand-driven**: it appears when something actually asks, not on first visit.
306
- A site whose only analytics provider is cookieless never interrupts anyone. Don't "fix" a
307
- missing banner by forcing it to show — find out what should have demanded a category.
308
-
309
- Whatever loads must match what the **generated cookie notice** discloses; the Astro
310
- integration warns when they disagree, and that is a compliance defect, not a doc nit.
311
-
312
- ## Conversion tracking
313
-
314
- `vitops docs tracking`. `site.tracking.enabled` captures ad click IDs and UTMs from the
315
- landing URL into the first-party `_ac` cookie; a conversion route reads it back and notifies
316
- via `site.notifications`. Points worth holding:
317
-
318
- - `_ac` is a 90-day identifier, so it waits on `marketing` (or `site.tracking.category`) and
319
- the capture **`require()`s** it — see above.
320
- - Only an arrival actually carrying a click ID or UTM asks; organic visitors are never
321
- interrupted.
322
- - The read is synchronous and the _write_ is what waits — the click ID exists only in the
323
- landing URL, so it cannot be deferred.
324
- - Only the `email` channel (Cloudflare Email Sending) is implemented. Its sending domain must
325
- be onboarded with `wrangler email sending enable <domain>` or every send fails; the tool
326
- surfaces that error verbatim rather than as "send failed".
327
- - `--dry`-style planning is pure and reports **why** anything was skipped. A silently unsent
328
- notification is indistinguishable from no conversion, so never leave one unexplained.
279
+ Consent gating of third-party tags: the `vitops-consent` skill. Ad pixels and conversions: `vitops-ads`.