@se-studio/skills 1.0.36 → 1.0.38

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,9 +1,32 @@
1
1
  # @se-studio/skills
2
2
 
3
+ ## 1.0.38
4
+
5
+ ### Patch Changes
6
+
7
+ - Extend the local content index with a reference catalog, automatic sync, and bundled skills for cms-edit.
8
+
9
+ - **Content index (schema v2)** — index `template`, `articleType`, `tagType`, and `tag` in SQLite alongside assets and media
10
+ - **Automatic index sync** — index-backed commands call `ensureContentIndex`; full rebuild when missing or schema-outdated, incremental upsert when stale (>24h). Manual `index sync` always full rebuilds
11
+ - **`list --type template|articleType|tagType|tag`** — index-preferred listing with `--force-cma` escape hatch; template `--slug` filters by cmsLabel
12
+ - **`resolve --type template --label`** — resolve templates by cmsLabel; reference types use index with CMA fallback
13
+ - **`index dump --reference-only` / `--reference-type`** — browse the reference catalog
14
+ - **Duplicate detection** — ambiguous slug/label matches throw `ReferenceCatalogAmbiguityError`
15
+ - **File lock** — single writer per index database during sync
16
+ - **`requireMediaIndex` removed** — replaced by async `ensureContentIndex`
17
+ - **Bundled skills** — `sync:skills` copies cms-edit skills from `@se-studio/skills`; setup wizard can install into `.agents/skills`
18
+
19
+ ## 1.0.37
20
+
21
+ ### Patch Changes
22
+
23
+ - Bulk version bump: patch for all packages
24
+
3
25
  ## 1.0.36
4
26
 
5
27
  ### Patch Changes
6
28
 
29
+ - Version bump: patch for changed packages
7
30
  - 17d37e2: Fix skill descriptions not appearing in Claude Code selector (#30): standardize SKILL.md frontmatter (name matches directory, single-line quoted description, no extra YAML fields). Add `pnpm skills:validate`. Skill slash names now match directory names (e.g. `contentful-cms-core` instead of `contentful-cms:core`).
8
31
 
9
32
  ## 1.0.35
package/README.md CHANGED
@@ -57,6 +57,26 @@ Claude Code uses a naive frontmatter parser; violations cause descriptions to si
57
57
  3. Sync: `pnpm skills:sync`
58
58
  4. Add a changeset if publishing `@se-studio/skills`
59
59
 
60
+ ### cms-edit bundled skills (`@se-studio/contentful-cms`)
61
+
62
+ The CLI ships a **subset** of skills under `packages/contentful-cms/skills/` for `cms-edit skill install`. Those files are **generated** from this package:
63
+
64
+ | Canonical source (`packages/skills/skills/`) | Bundled name (`packages/contentful-cms/skills/`) |
65
+ |---------------------------------------------|--------------------------------------------------|
66
+ | `contentful-cms-core` | `core` |
67
+ | `contentful-cms-templates` | `templates` |
68
+ | `contentful-cms-setup` | `setup` |
69
+
70
+ After editing any `contentful-cms-*` skill here, run:
71
+
72
+ ```bash
73
+ pnpm --filter @se-studio/contentful-cms sync:skills
74
+ ```
75
+
76
+ Do not edit `packages/contentful-cms/skills/` directly. See `packages/contentful-cms/docs/SKILLS.md`.
77
+
78
+ **Do not use `.claude/skills/` in the repo** as a skill source — it is untracked and local. Use `.agents/skills/` (via `pnpm skills:sync`) or `cms-edit skill install`.
79
+
60
80
  ## References
61
81
 
62
82
  - [Anthropic skill authoring best practices](https://platform.claude.com/docs/en/agents-and-tools/agent-skills/best-practices)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@se-studio/skills",
3
- "version": "1.0.36",
3
+ "version": "1.0.38",
4
4
  "description": "SE Studio agent skills for marketing site development with Contentful CMS",
5
5
  "repository": {
6
6
  "type": "git",
@@ -18,7 +18,7 @@ Guidelines are short markdown fragments — one per CMS type — that describe h
18
18
  pnpm --filter <appName> generate-showcase
19
19
  ```
20
20
  This writes `src/generated/showcase-examples.json`.
21
- 3. **Curate showcase mocks** — run the [curate-showcase-mocks skill](.agents/skills/se-marketing-sites-curate-showcase-mocks/SKILL.md) to select the best examples into `showcase-mocks.json`. This makes the showcase (and screenshots) show realistic content.
21
+ 3. **Curate showcase mocks** — run the [curate-showcase-mocks skill](../se-marketing-sites-curate-showcase-mocks/SKILL.md) to select the best examples into `showcase-mocks.json`. This makes the showcase (and screenshots) show realistic content.
22
22
  4. **Generate field list** — parse TypeScript types to produce structured field metadata:
23
23
  ```bash
24
24
  # From the app directory:
@@ -27,7 +27,7 @@ Guidelines are short markdown fragments — one per CMS type — that describe h
27
27
  # Or from repo root:
28
28
  pnpm --filter <appName> exec cms-generate-field-list --app-dir .
29
29
  ```
30
- 5. **Generate guidelines** — run the [Generate CMS guidelines skill](.agents/skills/contentful-cms-generate-cms-guidelines/SKILL.md).
30
+ 5. **Generate guidelines** — run the [Generate CMS guidelines skill](../contentful-cms-generate-cms-guidelines/SKILL.md).
31
31
 
32
32
  Steps 1–3 only need to be repeated when content or component code changes significantly. Step 4 only needs to be repeated when TypeScript types change. Step 5 can be re-run at any time.
33
33
 
@@ -35,7 +35,7 @@ Steps 1–3 only need to be repeated when content or component code changes sign
35
35
 
36
36
  ## How to run guideline generation
37
37
 
38
- Use the Cursor skill at [`.agents/skills/contentful-cms-generate-cms-guidelines/SKILL.md`](.agents/skills/contentful-cms-generate-cms-guidelines/SKILL.md). It supports three modes:
38
+ Use the Cursor skill at [`../contentful-cms-generate-cms-guidelines/SKILL.md`](../contentful-cms-generate-cms-guidelines/SKILL.md). It supports three modes:
39
39
 
40
40
  | Mode | When to use |
41
41
  |---|---|
@@ -43,25 +43,29 @@ Use the Cursor skill at [`.agents/skills/contentful-cms-generate-cms-guidelines/
43
43
  | `single` | Regenerate one component after code changes |
44
44
  | `merge-only` | Rebuild `COMPONENT_GUIDELINES_FOR_LLM.md` after manual fragment edits |
45
45
 
46
- **Example: full from scratch for `example-om1`**
46
+ **Example: full from scratch**
47
47
 
48
48
  Start the app:
49
+
49
50
  ```bash
50
- pnpm --filter example-om1 dev
51
+ pnpm dev
52
+ # Note the port from dev server output, or read devBaseUrl from .contentful-cms.json
51
53
  ```
52
54
 
53
55
  Then invoke the skill with:
54
- - App directory: `apps/example-om1`
56
+
57
+ - App directory: `<appDir>` (e.g. `.` in an external project)
55
58
  - Mode: `full`
56
- - Discovery URL: `http://localhost:3013/api/cms/discovery/`
59
+ - Discovery URL: `http://localhost:<PORT>/api/cms/discovery/`
57
60
 
58
61
  **Example: single component**
59
62
 
60
63
  Invoke the skill with:
61
- - App directory: `apps/example-se2026`
64
+
65
+ - App directory: `<appDir>`
62
66
  - Mode: `single`
63
67
  - Type name: `Hero`
64
- - Discovery URL: `http://localhost:3012/api/cms/discovery/`
68
+ - Discovery URL: `http://localhost:<PORT>/api/cms/discovery/`
65
69
 
66
70
  **Example: merge only**
67
71
 
@@ -109,8 +113,8 @@ New project-independent CLI. Reads the discovery API and writes collection and e
109
113
 
110
114
  ```bash
111
115
  cms-generate-collection-guidelines \
112
- --discovery-url http://localhost:3010/api/cms/discovery/ \
113
- --app-dir apps/example-brightline
116
+ --discovery-url http://localhost:<PORT>/api/cms/discovery/ \
117
+ --app-dir <appDir>
114
118
  ```
115
119
 
116
120
  Options:
@@ -115,7 +115,7 @@ Also provided:
115
115
  - The field list from generated/cms-discovery/field-list.json.
116
116
  - The project theme from generated/cms-discovery/theme-context.md (palette names + typography scale).
117
117
  - The screenshot index from docs/cms-guidelines/screenshots/index.json (lists captured screenshots).
118
- - The app's devBaseUrl from .contentful-cms.json (e.g. "http://localhost:3010").
118
+ - The app's devBaseUrl from .contentful-cms.json (e.g. "http://localhost:<PORT>").
119
119
 
120
120
  Produce a single markdown fragment for <COMPONENT_TYPE> following EXACTLY this structure:
121
121
 
@@ -341,10 +341,32 @@ cms-edit set @c5 links linkId4 --links --append
341
341
 
342
342
  ## Assets
343
343
 
344
+ **Content index:** Run `cms-edit index sync` once per space before asset search, media-by-filename list, asset audit, or `--if-exists-by-filename`. The same sync also indexes **templates**, **articleType**, **tagType**, and **tag** for fast `list --type` and taxonomy `--if-not-exists`. Default sync uses the **Preview API** (draft content). See `cms-edit help index-sync`.
345
+
344
346
  ```bash
345
- # Search for an asset
347
+ cms-edit index sync
348
+ cms-edit index status
349
+ cms-edit list --type template
350
+ cms-edit resolve --type tagType --slug topic
351
+
352
+ # Published-only index (optional)
353
+ cms-edit index sync --published
354
+
355
+ # Search for an asset by title (requires index)
346
356
  cms-edit asset search "hero background"
347
357
 
358
+ # Search by fileName
359
+ cms-edit asset search --filename istockphoto-123.jpg
360
+ cms-edit asset search --filename-match 'istockphoto-.*'
361
+
362
+ # Upload from local file, URL, or base64
363
+ cms-edit asset upload ./poster.jpg --title "Poster"
364
+ cms-edit asset upload --url https://example.com/image.jpg --if-exists-by-filename
365
+ cms-edit asset upload --base64 "$B64" --mime image/png --file-name poster.png
366
+
367
+ # Upload and create a Media wrapper in one step
368
+ cms-edit asset upload ./figure.png --with-media --media-name "Figure 1" --media-position Middle
369
+
348
370
  # Get asset details
349
371
  cms-edit asset info 5xKj2abcDef
350
372
 
@@ -352,6 +374,10 @@ cms-edit asset info 5xKj2abcDef
352
374
  cms-edit asset set @c0 visual 5xKj2abcDef
353
375
  ```
354
376
 
377
+ JSON output for upload (`CMS_EDIT_JSON=1`): `{ ok, id, fileName, url, mediaId?, mediaIds? }`. Max upload size is **10MB** per file.
378
+
379
+ **Idempotent upload:** `--if-exists-by-filename` is check-then-create. Do not upload the same `fileName` in parallel — serialize per fileName or re-run to converge.
380
+
355
381
  ## Navigation
356
382
 
357
383
  ```bash
@@ -384,8 +410,34 @@ cms-edit create page --slug /about-us --title "About Us" \
384
410
 
385
411
  # Create a new article (requires articleType entry ID)
386
412
  cms-edit create article --slug /blog/my-post --title "My Post" --article-type-id 3abcDef456
413
+
414
+ # Create taxonomy entries (draft only)
415
+ cms-edit create tag-type --slug conference-venue --name "Conference Venue"
416
+ cms-edit create article-type --slug resources/publications --name "Publications"
417
+ cms-edit create tag --slug poster-presentation --name "Poster Presentation" --tag-type presentation-type
418
+
419
+ # Full fields via JSON
420
+ cms-edit create tag --json-file tag.json --tag-type presentation-type --if-not-exists
421
+
422
+ # Batch bootstrap
423
+ cms-edit create taxonomy-from-json --file taxonomy.json --if-not-exists
424
+
425
+ # Idempotent single-entry creates
426
+ cms-edit ensure tag-type --slug conference-venue --name "Conference Venue"
427
+ cms-edit ensure tag --slug asco-2025 --name "ASCO 2025" --tag-type conference-venue
387
428
  ```
388
429
 
430
+ See `cms-edit help fields-taxonomy` and `cms-edit help taxonomy-from-json` for field reference and batch schema.
431
+
432
+ **Idempotent taxonomy:** `--if-not-exists` / `ensure` are check-then-create — safe for sequential imports, not for parallel creates on the same slug.
433
+
434
+ ```bash
435
+ # Resolve taxonomy IDs without a session
436
+ cms-edit resolve --type tag-type --slug presentation-type
437
+ ```
438
+
439
+ `resolve --type` accepts `page`, `article`, `articleType`, `tagType`, `tag` (kebab aliases such as `tag-type`).
440
+
389
441
  ## Search and Discovery
390
442
 
391
443
  ```bash
@@ -405,7 +457,14 @@ cms-edit list --type article --has-field tags # articles where tags field i
405
457
  # Resolve any entry or asset by ID (no open session required)
406
458
  cms-edit resolve 4xKj2abcDefGhijK # entry: shows type, title, slug, status
407
459
  cms-edit resolve 7pQrStuvWxyzAbc # asset: shows title, fileName, URL
460
+ cms-edit resolve --type tagType --slug presentation-type
461
+ cms-edit resolve --type tag --slug asco-2025
408
462
  cms-edit resolve <id> --json # full Contentful object
463
+
464
+ # Find Media entries by asset
465
+ cms-edit list --type media --asset-id 7pQrStuvWxyzAbc
466
+ cms-edit list --type media --asset-filename istockphoto-123.jpg
467
+ cms-edit list --type media --asset-filename-match 'istockphoto-.*'
409
468
  ```
410
469
 
411
470
  To resolve a **tag entry ID** to its slug or label (e.g. for constructing article URLs such as `/resources/publications/<tag>/<slug>`):
@@ -65,9 +65,9 @@ All of these must be true before starting. Check each one.
65
65
 
66
66
  | Input | Example |
67
67
  |-------|---------|
68
- | App directory (absolute or repo-relative) | `apps/example-se2026` or `/home/nick/source/se/se-website-2026` |
69
- | Discovery URL | `http://localhost:3012/api/cms/discovery/` |
70
- | Port | `3012` |
68
+ | App directory (absolute or repo-relative) | `apps/my-site` or `/path/to/project` |
69
+ | Discovery URL | `http://localhost:<PORT>/api/cms/discovery/` |
70
+ | Port / base URL | From `pnpm dev` output, or `devBaseUrl` in `<appDir>/.contentful-cms.json` |
71
71
 
72
72
  ---
73
73
 
@@ -197,9 +197,9 @@ IMPORTANT: Screenshots have already been captured. Skip Phase A entirely.
197
197
  Go straight to Phase B.
198
198
 
199
199
  Files to read before starting:
200
- - packages/skills/skills/contentful-cms-cms-guidelines/generation-prompt.md (Phase B instructions)
201
- - packages/skills/skills/contentful-cms-cms-guidelines/colour-hint-prompt.md (Phase C instructions)
202
- - packages/skills/skills/contentful-cms-cms-guidelines/validation-prompt.md (Phase D instructions)
200
+ - ../contentful-cms-cms-guidelines/generation-prompt.md (Phase B instructions)
201
+ - ../contentful-cms-cms-guidelines/colour-hint-prompt.md (Phase C instructions)
202
+ - ../contentful-cms-cms-guidelines/validation-prompt.md (Phase D instructions)
203
203
  - <APP_DIR>/src/project/components/<TypeName>.tsx (component source)
204
204
  - <APP_DIR>/generated/cms-discovery/field-list.json
205
205
  - <APP_DIR>/src/generated/cms-discovery/accepted-variants/{components|collections|externals}/<type-slug>.json
@@ -32,7 +32,7 @@ Guidelines are only meaningful when the showcase is populated with realistic dat
32
32
  pnpm --filter <appName> generate-showcase
33
33
  ```
34
34
  This writes `src/generated/showcase-examples.json` to the app.
35
- 3. **Curate showcase mocks:** Follow the [curate-showcase-mocks skill](.agents/skills/se-marketing-sites-curate-showcase-mocks/SKILL.md) to produce `showcase-mocks.json`.
35
+ 3. **Curate showcase mocks:** Follow the [curate-showcase-mocks skill](../se-marketing-sites-curate-showcase-mocks/SKILL.md) to produce `showcase-mocks.json`.
36
36
  4. **Generate field list:**
37
37
  ```bash
38
38
  # From the app directory:
@@ -51,17 +51,14 @@ Guidelines are only meaningful when the showcase is populated with realistic dat
51
51
  | **App directory** | Repo-relative path, e.g. `apps/example-om1` or `apps/example-se2026` |
52
52
  | **Mode** | `full` \| `single` \| `merge-only` |
53
53
  | **Type name** | Required for `single` mode — the exact type name from discovery, e.g. `"Hero"` or `"Cards Grid"` |
54
- | **Discovery URL** | URL to the live app's discovery endpoint, e.g. `http://localhost:3013/api/cms/discovery/` |
54
+ | **Discovery URL** | `http://localhost:<PORT>/api/cms/discovery/` — `<PORT>` from the running dev server (`pnpm dev`) |
55
+ | **Port / base URL** | Dev script output, or `devBaseUrl` in `<appDir>/.contentful-cms.json` |
55
56
 
56
- **App ports** (app must be running for `full` and `single` modes):
57
+ The app must be running for `full` and `single` modes. Confirm with:
57
58
 
58
- | App | Port | Discovery URL |
59
- |---|---|---|
60
- | example-brightline | 3010 | `http://localhost:3010/api/cms/discovery/` |
61
- | example-se2026 | 3012 | `http://localhost:3012/api/cms/discovery/` |
62
- | example-om1 | 3013 | `http://localhost:3013/api/cms/discovery/` |
63
- | example-empty | 3014 | `http://localhost:3014/api/cms/discovery/` |
64
- | example-brightlifekids | 3015 | `http://localhost:3015/api/cms/discovery/` |
59
+ ```bash
60
+ curl -sL http://localhost:<PORT>/api/cms/discovery/ | head -c 100
61
+ ```
65
62
 
66
63
  ---
67
64
 
@@ -115,7 +112,7 @@ Example of a completed `## Fields & Schema` section:
115
112
  ### Step 3 — Generate component guidelines
116
113
 
117
114
  For each component in discovery order, run the full per-component pipeline defined in
118
- [`packages/skills/skills/contentful-cms-cms-guidelines/generate-component-guidelines.md`](../../../packages/skills/skills/contentful-cms-cms-guidelines/generate-component-guidelines.md).
115
+ [`generate-component-guidelines.md`](../contentful-cms-cms-guidelines/generate-component-guidelines.md).
119
116
 
120
117
  To find unfinished components:
121
118
  1. Fetch `<discoveryUrl>` and collect all `components[].name` values.
@@ -131,12 +128,12 @@ Run a Cursor subagent with this prompt, substituting `<COMPONENT_TYPE>` and `<AP
131
128
  Run the full guideline generation pipeline for <COMPONENT_TYPE>.
132
129
  Target app: <APP_DIR> (all paths relative to repo root / that directory).
133
130
 
134
- Read these pipeline docs first (they are in packages/skills/skills/contentful-cms-cms-guidelines/):
135
- - generate-component-guidelines.md (overall pipeline)
136
- - variant-loop.md (Phase A: variant loop)
137
- - generation-prompt.md (Phase B: generation)
138
- - colour-hint-prompt.md (Phase C: colour hint)
139
- - validation-prompt.md (Phase D: validation)
131
+ Read these pipeline docs first (sibling directory contentful-cms-cms-guidelines/):
132
+ - ../contentful-cms-cms-guidelines/generate-component-guidelines.md (overall pipeline)
133
+ - ../contentful-cms-cms-guidelines/variant-loop.md (Phase A: variant loop)
134
+ - ../contentful-cms-cms-guidelines/generation-prompt.md (Phase B: generation)
135
+ - ../contentful-cms-cms-guidelines/colour-hint-prompt.md (Phase C: colour hint)
136
+ - ../contentful-cms-cms-guidelines/validation-prompt.md (Phase D: validation)
140
137
 
141
138
  === Phase A: Variant loop ===
142
139
  Follow variant-loop.md.
@@ -271,8 +268,8 @@ Each component guideline contains a `## Screenshots` section with image links:
271
268
 
272
269
  | Variant | Preview |
273
270
  |---------|---------|
274
- | Default | ![Default](http://localhost:3010/cms/screenshot?file=components/hero-default.png) |
275
- | Navy | ![Navy](http://localhost:3010/cms/screenshot?file=components/hero-navy.png) |
271
+ | Default | ![Default](<devBaseUrl>/cms/screenshot?file=components/hero-default.png) |
272
+ | Navy | ![Navy](<devBaseUrl>/cms/screenshot?file=components/hero-navy.png) |
276
273
  ```
277
274
 
278
275
  These links:
@@ -285,7 +282,7 @@ These links:
285
282
 
286
283
  ## Pipeline reference
287
284
 
288
- All per-component pipeline docs live in `packages/skills/skills/contentful-cms-cms-guidelines/`:
285
+ All per-component pipeline docs live in the sibling directory [`contentful-cms-cms-guidelines/`](../contentful-cms-cms-guidelines/):
289
286
 
290
287
  | File | Purpose |
291
288
  |---|---|
@@ -45,21 +45,11 @@ If they insist on “everything” / “from scratch” / “totally regenerate
45
45
 
46
46
  | Input | Example |
47
47
  |---|---|
48
- | App directory (repo-relative or absolute) | `apps/example-se2026` |
49
- | Port | `3012` |
50
- | Discovery URL | `http://localhost:3012/api/cms/discovery/` |
48
+ | App directory (repo-relative or absolute) | `apps/my-site` |
49
+ | Discovery URL | `http://localhost:<PORT>/api/cms/discovery/` |
50
+ | Port / base URL | From `pnpm dev` output, or `devBaseUrl` in `<appDir>/.contentful-cms.json` |
51
51
  | Mode | `fresh` \| `sync` \| `merge-only` |
52
52
 
53
- **App ports:**
54
-
55
- | App | Port |
56
- |---|---|
57
- | example-brightline | 3010 |
58
- | example-se2026 | 3012 |
59
- | example-om1 | 3013 |
60
- | example-empty | 3014 |
61
- | example-brightlifekids | 3015 |
62
-
63
53
  ---
64
54
 
65
55
  ## Mode: fresh
@@ -108,7 +98,7 @@ grep -E "CONTENTFUL_SPACE_ID|CONTENTFUL_ACCESS_TOKEN|OPENAI_API_KEY|ANTHROPIC_AP
108
98
  ### Step 2 — Curate showcase mocks
109
99
 
110
100
  Read and follow the **curate-showcase-mocks** skill:
111
- `.agents/skills/se-marketing-sites-curate-showcase-mocks/SKILL.md`
101
+ [`../se-marketing-sites-curate-showcase-mocks/SKILL.md`](../se-marketing-sites-curate-showcase-mocks/SKILL.md)
112
102
 
113
103
  This produces `src/generated/showcase-mocks.json` (committed) and
114
104
  `src/generated/cms-discovery/accepted-variants/{components|collections|externals}/<slug>.json` (often gitignored — **some apps commit them**; follow the app’s `.gitignore`).
@@ -146,7 +136,7 @@ Produces `generated/cms-discovery/field-list.json` (discovery API reads from thi
146
136
  ### Step 5 — Run generate-all-guidelines
147
137
 
148
138
  Read and follow the **generate-all-guidelines** skill:
149
- `.agents/skills/contentful-cms-generate-all-guidelines/SKILL.md`
139
+ [`../contentful-cms-generate-all-guidelines/SKILL.md`](../contentful-cms-generate-all-guidelines/SKILL.md)
150
140
 
151
141
  Skip its prerequisite check (you already verified everything through Step 4).
152
142
  Run Phases 0–5 from that skill with **full regeneration rules**:
@@ -338,7 +328,7 @@ All under `<appDir>`:
338
328
 
339
329
  | Purpose | Skill |
340
330
  |---|---|
341
- | Curate showcase mocks (Step 2 of `fresh`) | `.agents/skills/se-marketing-sites-curate-showcase-mocks/SKILL.md` |
342
- | Full-site bulk generation (Step 4 of `fresh`: Phases 0–5) | `.agents/skills/contentful-cms-generate-all-guidelines/SKILL.md` |
343
- | Single-type regeneration (after code change) | `.agents/skills/contentful-cms-generate-cms-guidelines/SKILL.md` (mode: single) |
344
- | Per-component pipeline detail | `packages/skills/skills/contentful-cms-cms-guidelines/generate-component-guidelines.md` |
331
+ | Curate showcase mocks (Step 2 of `fresh`) | [`../se-marketing-sites-curate-showcase-mocks/SKILL.md`](../se-marketing-sites-curate-showcase-mocks/SKILL.md) |
332
+ | Full-site bulk generation (Step 4 of `fresh`: Phases 0–5) | [`../contentful-cms-generate-all-guidelines/SKILL.md`](../contentful-cms-generate-all-guidelines/SKILL.md) |
333
+ | Single-type regeneration (after code change) | [`../contentful-cms-generate-cms-guidelines/SKILL.md`](../contentful-cms-generate-cms-guidelines/SKILL.md) (mode: single) |
334
+ | Per-component pipeline detail | [`generate-component-guidelines.md`](../contentful-cms-cms-guidelines/generate-component-guidelines.md) |