@se-studio/skills 0.0.0-next16-20260822103555
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 +641 -0
- package/README.md +95 -0
- package/package.json +29 -0
- package/references/agent-session/cms-edit-prod-merge.md +35 -0
- package/references/agent-session/customer-agents-block.md +58 -0
- package/references/agent-session/manifest.template.yaml +37 -0
- package/references/agent-session/projects.registry.json +96 -0
- package/references/agent-session/refuse-customer-patches.md +58 -0
- package/references/agent-session/smoke-deploy-failure-playbook.md +80 -0
- package/references/contentful-cms-cms-guidelines/README.md +170 -0
- package/references/contentful-cms-cms-guidelines/colour-hint-prompt.md +77 -0
- package/references/contentful-cms-cms-guidelines/evaluation-prompt.md +84 -0
- package/references/contentful-cms-cms-guidelines/generate-component-guidelines.md +126 -0
- package/references/contentful-cms-cms-guidelines/generation-prompt.md +231 -0
- package/references/contentful-cms-cms-guidelines/html-component-authoring.md +402 -0
- package/references/contentful-cms-cms-guidelines/validation-prompt.md +170 -0
- package/references/contentful-cms-cms-guidelines/variant-loop.md +189 -0
- package/references/contentful-cms-cms-guidelines/variant-proposal-prompt.md +131 -0
- package/references/contentful-cms-editor-playbooks/PATTERNS.md +181 -0
- package/references/contentful-cms-editor-playbooks/PROJECT-ROLLOUT.md +232 -0
- package/references/contentful-cms-editor-playbooks/SOURCE-READINESS.md +96 -0
- package/references/contentful-cms-editor-playbooks/examples/brightline-learning-hub-article-shaped.md +48 -0
- package/references/contentful-cms-editor-playbooks/examples/headwater-news-shaped.md +48 -0
- package/references/contentful-cms-editor-playbooks/examples/om1-resource-case-study-shaped.md +52 -0
- package/references/contentful-cms-editor-playbooks/examples/pedestal-publication-shaped.md +50 -0
- package/references/contentful-cms-editor-playbooks/examples/se-case-study-meet-makers-shaped.md +51 -0
- package/references/contentful-cms-editor-playbooks/examples/se-case-study-om1-shaped.md +72 -0
- package/references/contentful-cms-editor-playbooks/examples/se-om1-case-study-brief.docx +0 -0
- package/references/contentful-cms-editor-playbooks/examples/se-om1-case-study-brief.md +62 -0
- package/references/deployment-smoke-feature-branch-skip/README.md +66 -0
- package/references/deployment-smoke-feature-branch-skip/workflow-snippet.yml +38 -0
- package/references/deps-update/projects.registry.json +83 -0
- package/references/lockfile-sync/README.md +55 -0
- package/references/lockfile-sync/validate-workflow-snippet.yml +32 -0
- package/references/stale-files-cleanup/BRIGHTLINE_RUNBOOK.md +90 -0
- package/references/stale-files-cleanup/CHECKLIST.md +145 -0
- package/references/stale-files-cleanup/FALSE_POSITIVES.md +88 -0
- package/references/stale-files-cleanup/MONOREPO.md +85 -0
- package/references/stale-files-cleanup/SINGLE_APP.md +66 -0
- package/skills/cms-seo-audit/SKILL.md +178 -0
- package/skills/contentful-cms-alt-text-audit/SKILL.md +60 -0
- package/skills/contentful-cms-core/SKILL.md +860 -0
- package/skills/contentful-cms-create-editor-playbooks/SKILL.md +280 -0
- package/skills/contentful-cms-editor-tasks/SKILL.md +86 -0
- package/skills/contentful-cms-generate-all-guidelines/SKILL.md +309 -0
- package/skills/contentful-cms-generate-cms-guidelines/SKILL.md +310 -0
- package/skills/contentful-cms-media-review/SKILL.md +98 -0
- package/skills/contentful-cms-navigation/SKILL.md +84 -0
- package/skills/contentful-cms-regenerate-editor-pack/SKILL.md +132 -0
- package/skills/contentful-cms-rich-text/SKILL.md +93 -0
- package/skills/contentful-cms-schema-audit/SKILL.md +122 -0
- package/skills/contentful-cms-schema-org/SKILL.md +101 -0
- package/skills/contentful-cms-seo-descriptions/SKILL.md +54 -0
- package/skills/contentful-cms-setup/SKILL.md +102 -0
- package/skills/contentful-cms-sync-schema/SKILL.md +134 -0
- package/skills/contentful-cms-templates/SKILL.md +21 -0
- package/skills/contentful-cms-update-cms-guidelines/SKILL.md +341 -0
- package/skills/performance-audit/SKILL.md +312 -0
- package/skills/screaming-frog-audit/SKILL.md +110 -0
- package/skills/screaming-frog-audit/references/profiles.md +62 -0
- package/skills/se-marketing-sites-cms-routes-and-appshared/SKILL.md +95 -0
- package/skills/se-marketing-sites-create-collection/SKILL.md +291 -0
- package/skills/se-marketing-sites-create-component/SKILL.md +246 -0
- package/skills/se-marketing-sites-create-page/SKILL.md +188 -0
- package/skills/se-marketing-sites-curate-showcase-mocks/SKILL.md +352 -0
- package/skills/se-marketing-sites-handling-media/SKILL.md +196 -0
- package/skills/se-marketing-sites-lib-cms-structure/SKILL.md +104 -0
- package/skills/se-marketing-sites-markdown-accuracy-review/SKILL.md +69 -0
- package/skills/se-marketing-sites-redirects/SKILL.md +276 -0
- package/skills/se-marketing-sites-register-cms-features/SKILL.md +95 -0
- package/skills/se-marketing-sites-smoke-test-setup/SKILL.md +438 -0
- package/skills/se-marketing-sites-styling-system/SKILL.md +118 -0
- package/skills/site-workflows-agent-session/SKILL.md +355 -0
- package/skills/site-workflows-apply-design-snapshot/SKILL.md +281 -0
- package/skills/site-workflows-brand-context-builder/SKILL.md +98 -0
- package/skills/site-workflows-contentful-vercel-setup/SKILL.md +406 -0
- package/skills/site-workflows-copy-doc-snapshot/SKILL.md +218 -0
- package/skills/site-workflows-deps-update/SKILL.md +264 -0
- package/skills/site-workflows-figma-design-snapshot/SKILL.md +387 -0
- package/skills/site-workflows-new-project/SKILL.md +328 -0
- package/skills/site-workflows-project-cleanup/SKILL.md +470 -0
- package/skills/site-workflows-stale-files-cleanup/SKILL.md +165 -0
- package/skills/vercel-logs-audit/SKILL.md +134 -0
package/README.md
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# @se-studio/skills
|
|
2
|
+
|
|
3
|
+
Agent skills for SE Studio marketing site development with Contentful CMS.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
**In this monorepo** — skills are synced into `.agents/skills/` (symlinked from `.cursor/skills/`):
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
pnpm skills:validate
|
|
11
|
+
pnpm skills:sync
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
From this package directory: `pnpm validate` (runs the same frontmatter check).
|
|
15
|
+
|
|
16
|
+
**In external projects:**
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
npx skills add @se-studio/skills
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Auto-sync on `pnpm install` (see [`packages/project-build/README.md`](../project-build/README.md) for the full `package.json` snippet). Use `pnpm skills:sync` manually to add or refresh third-party skill packs.
|
|
23
|
+
|
|
24
|
+
## Package layout
|
|
25
|
+
|
|
26
|
+
| Path | Purpose |
|
|
27
|
+
|------|---------|
|
|
28
|
+
| `skills/<name>/SKILL.md` | Agent skills — the only directories scanned by `skills-npm` and the skills CLI |
|
|
29
|
+
| `references/<name>/` | Support docs, prompt packs, and pipeline references (no `SKILL.md`) |
|
|
30
|
+
|
|
31
|
+
Do **not** place non-skill material under `skills/` — directories there without `SKILL.md` cause `file_error` warnings in consumer repos on `pnpm install`.
|
|
32
|
+
|
|
33
|
+
## Authoring skills
|
|
34
|
+
|
|
35
|
+
Canonical sources live in `packages/skills/skills/<skill-dir>/SKILL.md`. Do **not** edit `.agents/skills/` by hand.
|
|
36
|
+
|
|
37
|
+
### Frontmatter contract (Claude Code compatible)
|
|
38
|
+
|
|
39
|
+
Every `SKILL.md` must start with YAML frontmatter containing **only** `name` and `description`:
|
|
40
|
+
|
|
41
|
+
```yaml
|
|
42
|
+
---
|
|
43
|
+
name: se-marketing-sites-create-component
|
|
44
|
+
description: "Guide for creating new CMS-driven components. Use when asked to create a new CMS component."
|
|
45
|
+
---
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Rules:
|
|
49
|
+
|
|
50
|
+
| Field | Requirement |
|
|
51
|
+
|-------|-------------|
|
|
52
|
+
| `name` | Must exactly match the skill directory name; `[a-z0-9-]+` only; max 64 characters |
|
|
53
|
+
| `description` | Single line, double-quoted, non-empty, max 1024 characters; no backticks |
|
|
54
|
+
|
|
55
|
+
Do **not** use:
|
|
56
|
+
|
|
57
|
+
- YAML block scalars for description (`>`, `|`)
|
|
58
|
+
- Multiline descriptions
|
|
59
|
+
- Extra frontmatter keys (`license`, `metadata`, `promptSignals`, etc.) — put those in the markdown body if needed
|
|
60
|
+
- Invalid `name` values (spaces, capitals, colons, dots)
|
|
61
|
+
|
|
62
|
+
Claude Code uses a naive frontmatter parser; violations cause descriptions to silently disappear from the skill selector.
|
|
63
|
+
|
|
64
|
+
### Workflow
|
|
65
|
+
|
|
66
|
+
1. Edit `packages/skills/skills/<skill-dir>/SKILL.md`
|
|
67
|
+
2. Validate: `pnpm skills:validate`
|
|
68
|
+
3. Sync: `pnpm skills:sync` (copies `skills/` → `.agents/skills/` and `references/` → `.agents/references/`)
|
|
69
|
+
4. Add a changeset if publishing `@se-studio/skills`
|
|
70
|
+
|
|
71
|
+
### cms-edit bundled skills (`@se-studio/contentful-cms`)
|
|
72
|
+
|
|
73
|
+
The CLI ships a **subset** of skills under `packages/contentful-cms/skills/` for `cms-edit skill install`. Those files are **generated** from this package:
|
|
74
|
+
|
|
75
|
+
| Canonical source (`packages/skills/skills/`) | Bundled name (`packages/contentful-cms/skills/`) |
|
|
76
|
+
|---------------------------------------------|--------------------------------------------------|
|
|
77
|
+
| `contentful-cms-core` | `core` |
|
|
78
|
+
| `contentful-cms-editor-tasks` | `editor-tasks` |
|
|
79
|
+
| `contentful-cms-templates` | `templates` |
|
|
80
|
+
| `contentful-cms-setup` | `setup` |
|
|
81
|
+
|
|
82
|
+
After editing any `contentful-cms-*` skill here, run:
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
pnpm --filter @se-studio/contentful-cms sync:skills
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Do not edit `packages/contentful-cms/skills/` directly. See `packages/contentful-cms/docs/SKILLS.md`.
|
|
89
|
+
|
|
90
|
+
**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`.
|
|
91
|
+
|
|
92
|
+
## References
|
|
93
|
+
|
|
94
|
+
- [Anthropic skill authoring best practices](https://platform.claude.com/docs/en/agents-and-tools/agent-skills/best-practices)
|
|
95
|
+
- Monorepo skill index: root `CLAUDE.md` and `docs/AI_QUICK_REFERENCE.md`
|
package/package.json
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@se-studio/skills",
|
|
3
|
+
"version": "0.0.0-next16-20260822103555",
|
|
4
|
+
"description": "SE Studio agent skills for marketing site development with Contentful CMS",
|
|
5
|
+
"repository": {
|
|
6
|
+
"type": "git",
|
|
7
|
+
"url": "https://github.com/Something-Else-Studio/se-core-product",
|
|
8
|
+
"directory": "packages/skills"
|
|
9
|
+
},
|
|
10
|
+
"license": "MIT",
|
|
11
|
+
"files": [
|
|
12
|
+
"skills",
|
|
13
|
+
"references",
|
|
14
|
+
"*.md"
|
|
15
|
+
],
|
|
16
|
+
"keywords": [
|
|
17
|
+
"agent-skills",
|
|
18
|
+
"contentful",
|
|
19
|
+
"nextjs",
|
|
20
|
+
"marketing-sites"
|
|
21
|
+
],
|
|
22
|
+
"homepage": "https://github.com/Something-Else-Studio/se-core-product#readme",
|
|
23
|
+
"bugs": {
|
|
24
|
+
"url": "https://github.com/Something-Else-Studio/se-core-product/issues"
|
|
25
|
+
},
|
|
26
|
+
"scripts": {
|
|
27
|
+
"validate": "node ../../scripts/validate-skills.mjs"
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# cms-edit-only production merge
|
|
2
|
+
|
|
3
|
+
The **only** agent exception to “no production git”. Marketing site source, core `main`, and Vercel CLI deploys stay human-only.
|
|
4
|
+
|
|
5
|
+
## When it applies
|
|
6
|
+
|
|
7
|
+
All of the following must be true:
|
|
8
|
+
|
|
9
|
+
1. The user asked to ship **hosted cms-edit** (host package bump, editor-pack-only, or continue a cms-edit host rollout).
|
|
10
|
+
2. Any required `@se-studio/contentful-cms` version is **already on npm**.
|
|
11
|
+
3. The merge is **customer** `develop` → that site’s production branch (`main`, HSD **`production`**). Never `se-core-product` `main`.
|
|
12
|
+
4. `git diff --name-only origin/<productionBranch>...origin/develop` is **only**:
|
|
13
|
+
- `cms-edit/**`
|
|
14
|
+
- root `package.json` and/or `pnpm-lock.yaml` (and `pnpm-workspace.yaml` only if it already listed the package)
|
|
15
|
+
5. Those package/lock changes are **only** `@se-studio/contentful-cms` (plus lockfile transitives). No `src/`, `apps/` marketing, smoke, server-config, or other dependency bumps.
|
|
16
|
+
6. Merge **one customer repo at a time**. Wait for that repo’s cms-edit Vercel **production** deployment **Ready**. Then check live `https://<host>/api/health`: `ok`, `cmsEdit.version` matches npm, `redis` and `oauth` checks ok. Probe `/.well-known/oauth-authorization-server` (200). **Stop at the first failure.**
|
|
17
|
+
|
|
18
|
+
## How to merge
|
|
19
|
+
|
|
20
|
+
From the **develop** checkout (not `productionPath`):
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
git fetch origin
|
|
24
|
+
git diff --name-only origin/<productionBranch>...origin/develop # must pass the path gate
|
|
25
|
+
gh pr create --base <productionBranch> --head develop --title "cms-edit: <version or editor-pack>"
|
|
26
|
+
# or ff-only merge via gh
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Do **not** use HSD `production-hsd-website` (or any `productionPath`) as the working tree. Do **not** run `pnpm cms-edit:deploy`, `vercel deploy`, or `./scripts/deploy-cms-edit-host.sh`.
|
|
30
|
+
|
|
31
|
+
## After a successful host
|
|
32
|
+
|
|
33
|
+
Reconnect Grok `/mcps` → `i` is an editor step if OAuth tokens were dead — not a substitute for the health check.
|
|
34
|
+
|
|
35
|
+
If the diff is not cms-edit-only, **stop and hand off** — no production merge.
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
## Agent session workflow
|
|
2
|
+
|
|
3
|
+
**Load skill `site-workflows-agent-session` at the start of every coding session.**
|
|
4
|
+
|
|
5
|
+
Default mode for this repo: **site-first**.
|
|
6
|
+
|
|
7
|
+
### Branch policy
|
|
8
|
+
|
|
9
|
+
- Agents may commit and push **`develop`** and **`feature/*`**. Customer production (`main`, HSD `production`) only when the **cms-edit-only** gate passes (`se-core-product` `packages/skills/references/agent-session/cms-edit-prod-merge.md`).
|
|
10
|
+
- **Never** merge marketing `src/` to production. **Never** ship from a production checkout (e.g. HSD `production-hsd-website`). Use the develop checkout only.
|
|
11
|
+
- Prefer **draft PRs** to `develop` over direct pushes when `gh` is available.
|
|
12
|
+
|
|
13
|
+
### Core vs customer placement
|
|
14
|
+
|
|
15
|
+
Before non-trivial code, run the placement checklist (in the skill). Summary:
|
|
16
|
+
|
|
17
|
+
| Belongs in… | Examples |
|
|
18
|
+
|-------------|----------|
|
|
19
|
+
| **This repo** (`src/project/*`, `cms-edit/**`) | Brand components, styling, site routing, editor-pack |
|
|
20
|
+
| **Customer shared package** (if monorepo) | Consent/analytics shared across sites in this customer |
|
|
21
|
+
| **`se-core-product`** (`@se-studio/*`) | Fixes/features needed by 2+ sites, CMS infrastructure |
|
|
22
|
+
|
|
23
|
+
If the checklist says **core**, stop and switch to core-first mode — do not patch `@se-studio` behaviour in this repo.
|
|
24
|
+
|
|
25
|
+
### Deploy smoke failed?
|
|
26
|
+
|
|
27
|
+
Do **not** change `baseUrl`, discovery routes, or add `getRequestBaseUrl()` to unblock Vercel Deployment Checks. That fix belongs in `@se-studio/site-check` (core-first).
|
|
28
|
+
|
|
29
|
+
1. Follow the smoke/deploy failure playbook in `se-core-product` — `packages/skills/references/agent-session/smoke-deploy-failure-playbook.md`
|
|
30
|
+
2. Bump `@se-studio/site-check@2.9.4+` after npm publish (`discovery.urlOrigin: auto`)
|
|
31
|
+
3. Customer-only: curate new URLs in `smoke.cases.json` when CMS routes go live — not package assertion hacks
|
|
32
|
+
|
|
33
|
+
Record `placement.decision` in `work/active/<feature>.yaml` before smoke/server-config commits aimed at deploy smoke.
|
|
34
|
+
|
|
35
|
+
### Core release order
|
|
36
|
+
|
|
37
|
+
When work depends on a new `@se-studio/*` npm release:
|
|
38
|
+
|
|
39
|
+
1. Release from `se-core-product` (`dev` → CI publish)
|
|
40
|
+
2. Confirm version on npm
|
|
41
|
+
3. `pnpm update @se-studio/<package>@<version> -r` in this repo
|
|
42
|
+
4. Then push `develop`
|
|
43
|
+
|
|
44
|
+
Never hand-edit `package.json` dependency versions.
|
|
45
|
+
|
|
46
|
+
### Parallel features
|
|
47
|
+
|
|
48
|
+
- One feature = one `feature/<scope>/<slug>` branch
|
|
49
|
+
- **Git worktree required** for all feature work — do not implement on the primary `develop` checkout
|
|
50
|
+
- Path: registry `worktreesRoot` / `<feature-slug>` (see se-core-product `packages/skills/references/agent-session/projects.registry.json`)
|
|
51
|
+
- Create: `git worktree add <worktreesRoot>/<feature-slug> -b feature/<scope>/<slug> origin/develop`
|
|
52
|
+
- Manifest must set `worktree:`; opt out only if the user says “work in place” / “no worktree” (`worktree_opt_out: true`)
|
|
53
|
+
- CMS edits: `--session <feature-slug>` (isolate cms-edit sessions)
|
|
54
|
+
- Track in-flight work: manifest at `~/source/se/se-core-product/work/active/<feature>.yaml` (or `work/active/` in this repo if core checkout unavailable)
|
|
55
|
+
|
|
56
|
+
### Production handoff
|
|
57
|
+
|
|
58
|
+
When **marketing** work is ready, agents **stop** and hand off. **cms-edit-only** host rollouts may merge `develop` → production one site at a time (health-check, stop at first failure). No `vercel deploy`. See skill Step 7–8 and `cms-edit-prod-merge.md`.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Copy to work/active/<feature>.yaml — one file per in-flight feature.
|
|
2
|
+
# Canonical location: se-core-product/work/active/ (cross-repo visibility).
|
|
3
|
+
|
|
4
|
+
feature: my-feature-slug
|
|
5
|
+
mode: site-first # core-first | site-first
|
|
6
|
+
project_key: om1
|
|
7
|
+
primary_repo: ~/source/customers/om1/om1-website
|
|
8
|
+
branch: feature/om1/my-feature-slug
|
|
9
|
+
# REQUIRED for feature/* work — path under registry worktreesRoot (e.g. ~/source/customers/om1/worktrees/my-feature-slug).
|
|
10
|
+
# null only when user explicitly opts out of worktrees in this conversation (record worktree_opt_out: true).
|
|
11
|
+
worktree: ~/source/customers/om1/worktrees/my-feature-slug
|
|
12
|
+
worktree_opt_out: false
|
|
13
|
+
integration_branch: develop
|
|
14
|
+
|
|
15
|
+
related_repos:
|
|
16
|
+
- repo: se-core-product
|
|
17
|
+
path: ~/source/se/se-core-product
|
|
18
|
+
role: read-only # read-only | pending-extract | active
|
|
19
|
+
|
|
20
|
+
placement:
|
|
21
|
+
decision: customer # core | customer | customer-shared | defer-extract
|
|
22
|
+
rationale: One-site hero layout tied to OM1 Figma
|
|
23
|
+
extract_to_core: null # pending | null
|
|
24
|
+
extract_rationale: null
|
|
25
|
+
# Required before smoke/server-config commits for deploy-smoke goals (agent-session Step 3b):
|
|
26
|
+
# smoke_edit: null # curated-urls | blocked-on-core | defer-extract
|
|
27
|
+
|
|
28
|
+
blocked_on: null # e.g. "@se-studio/core-ui@2.1.0"
|
|
29
|
+
cms_session: null # set to feature slug when doing parallel CMS edits
|
|
30
|
+
|
|
31
|
+
status: in_progress # in_progress | blocked | parked | ready_for_review
|
|
32
|
+
started_at: 2026-07-05
|
|
33
|
+
updated_at: 2026-07-05
|
|
34
|
+
|
|
35
|
+
validation: []
|
|
36
|
+
|
|
37
|
+
handoff: null
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
{
|
|
2
|
+
"manifestPath": "work/active/<feature>.yaml",
|
|
3
|
+
"integrationBranches": {
|
|
4
|
+
"core": "dev",
|
|
5
|
+
"customer": "develop"
|
|
6
|
+
},
|
|
7
|
+
"branchPattern": "feature/<scope>/<short-slug>",
|
|
8
|
+
"worktrees": {
|
|
9
|
+
"requiredForFeatureBranches": true,
|
|
10
|
+
"pathPattern": "<worktreesRoot>/<feature-slug>",
|
|
11
|
+
"notes": "Feature work (feature/*) must use a git worktree under the project's worktreesRoot. Primary checkouts stay on integration branches only. Opt out only if the user explicitly says work in place / no worktree in the current conversation."
|
|
12
|
+
},
|
|
13
|
+
"projects": [
|
|
14
|
+
{
|
|
15
|
+
"key": "se-core-product",
|
|
16
|
+
"displayName": "SE Core Product",
|
|
17
|
+
"path": "~/source/se/se-core-product",
|
|
18
|
+
"worktreesRoot": "~/source/se/worktrees",
|
|
19
|
+
"branch": "dev",
|
|
20
|
+
"type": "core",
|
|
21
|
+
"validate": "pnpm validate",
|
|
22
|
+
"exampleApps": ["example-empty", "cms-edit-host"]
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"key": "se2026",
|
|
26
|
+
"displayName": "SE Studio Site",
|
|
27
|
+
"path": "~/source/se/se-website-2026",
|
|
28
|
+
"worktreesRoot": "~/source/se/worktrees",
|
|
29
|
+
"branch": "develop",
|
|
30
|
+
"type": "customer",
|
|
31
|
+
"contentfulSpaceId": "g0pw3n92bre6",
|
|
32
|
+
"hostedMcp": "cms-edit-se-website",
|
|
33
|
+
"validate": "pnpm check && pnpm type-check"
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"key": "brightline",
|
|
37
|
+
"displayName": "Brightline Sites",
|
|
38
|
+
"path": "~/source/customers/brightline/brightline-sites",
|
|
39
|
+
"worktreesRoot": "~/source/customers/brightline/worktrees",
|
|
40
|
+
"branch": "develop",
|
|
41
|
+
"type": "customer-monorepo",
|
|
42
|
+
"sharedPackage": "@brightline/shared",
|
|
43
|
+
"contentfulSpaceIds": ["96gdpqkm7elu", "c27ds9epot4n"],
|
|
44
|
+
"hostedMcp": "cms-edit-brightline",
|
|
45
|
+
"validate": "pnpm -r validate"
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"key": "om1",
|
|
49
|
+
"displayName": "OM1 Website",
|
|
50
|
+
"path": "~/source/customers/om1/om1-website",
|
|
51
|
+
"worktreesRoot": "~/source/customers/om1/worktrees",
|
|
52
|
+
"branch": "develop",
|
|
53
|
+
"type": "customer",
|
|
54
|
+
"contentfulSpaceId": "ddhe5ahaolzf",
|
|
55
|
+
"hostedMcp": "cms-edit-om1",
|
|
56
|
+
"validate": "pnpm check && pnpm type-check && pnpm validate:routes"
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"key": "pointme",
|
|
60
|
+
"displayName": "PointMe Marketing Site",
|
|
61
|
+
"path": "~/source/customers/pointme/develop-marketing-site",
|
|
62
|
+
"worktreesRoot": "~/source/customers/pointme/worktrees",
|
|
63
|
+
"branch": "develop",
|
|
64
|
+
"type": "customer",
|
|
65
|
+
"contentfulSpaceId": "alwdzgjlz5qv",
|
|
66
|
+
"contentfulEnvironment": "marketing-master-2025-04-15",
|
|
67
|
+
"validate": "pnpm check && pnpm type-check"
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"key": "pedestal",
|
|
71
|
+
"displayName": "Pedestal Sites",
|
|
72
|
+
"path": "~/source/customers/pedestal/pedestal-sites",
|
|
73
|
+
"worktreesRoot": "~/source/customers/pedestal/worktrees",
|
|
74
|
+
"branch": "develop",
|
|
75
|
+
"type": "customer-monorepo",
|
|
76
|
+
"sharedPackage": "@pedestal/site-common",
|
|
77
|
+
"contentfulSpaceIds": ["h4s3ip99qawo", "fea4lj2cdgl5"],
|
|
78
|
+
"hostedMcp": ["cms-edit-pedestal", "cms-edit-headwater"],
|
|
79
|
+
"validate": "pnpm -r validate"
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"key": "hsd",
|
|
83
|
+
"displayName": "HopSkipDrive",
|
|
84
|
+
"path": "~/source/customers/hopskipdrive/develop-hsd-website",
|
|
85
|
+
"productionPath": "~/source/customers/hopskipdrive/production-hsd-website",
|
|
86
|
+
"worktreesRoot": "~/source/customers/hopskipdrive/worktrees",
|
|
87
|
+
"branch": "develop",
|
|
88
|
+
"productionBranch": "production",
|
|
89
|
+
"type": "customer",
|
|
90
|
+
"contentfulSpaceId": "gqa3p93n5wse",
|
|
91
|
+
"hostedMcp": "cms-edit-hsd",
|
|
92
|
+
"validate": "pnpm validate",
|
|
93
|
+
"notes": "Agents work only in path (develop) + feature worktrees under worktreesRoot. productionPath is human-only — never push production from agents."
|
|
94
|
+
}
|
|
95
|
+
]
|
|
96
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Refuse customer patches (site-first guardrails)
|
|
2
|
+
|
|
3
|
+
Agents in **site-first** mode must **refuse** customer-repo changes that belong in **`se-core-product`** (`@se-studio/*`), unless the user explicitly approves **`defer-extract`** in the manifest with `extract_to_core: pending` and a dated extraction plan.
|
|
4
|
+
|
|
5
|
+
Run this table **in addition to** the placement checklist (`site-workflows-agent-session` Step 3) when the task touches smoke, deploy checks, shared packages, or infra.
|
|
6
|
+
|
|
7
|
+
## Refusal triggers
|
|
8
|
+
|
|
9
|
+
| Symptom, file, or request | Correct owner | Agent action (site-first) |
|
|
10
|
+
|---------------------------|---------------|---------------------------|
|
|
11
|
+
| Deploy / `smoke-test:live` failure after bumping `@se-studio/*` | **core** — fix package behaviour | **Stop.** Switch to core-first or set `blocked_on: "@se-studio/<pkg>@<version>"`. Customer only bumps after npm publish. |
|
|
12
|
+
| Discovery smoke (`llms.txt`, `markdown-index.txt`, `cms.txt`, `site-info.md`) origin mismatch on `*.vercel.app` | **core** — `@se-studio/site-check` (`discovery.urlOrigin`) | **Refuse** per-request origin hacks (`getRequestBaseUrl`, `headers()` for `baseUrl`). Bump `site-check@2.9.4+`. |
|
|
13
|
+
| Patching `@se-studio/site-check` expectations in app code | **core** `site-check` | **Refuse.** Open core PR + changeset. |
|
|
14
|
+
| Forking converter / link logic already in `contentful-rest-api` | **core** | **Refuse.** Fix converter or API in core. |
|
|
15
|
+
| `pnpm patch`, `patchedDependencies`, or overrides to fork `@se-studio/*` | **forbidden** | **Refuse** (see root `AGENTS.md`). |
|
|
16
|
+
| New smoke assertion that should apply to all marketing sites | **core** `site-check` | **Refuse** site-only assertion helpers; extend site-check. |
|
|
17
|
+
| `route-build-policy.json` change to hide a core regression (e.g. allow new `ƒ` on CMS routes) | **core** + site routing fix | **Refuse** policy-only workaround; fix why route went dynamic. |
|
|
18
|
+
|
|
19
|
+
## Allowed customer-only smoke edits
|
|
20
|
+
|
|
21
|
+
| Change | When |
|
|
22
|
+
|--------|------|
|
|
23
|
+
| Add/remove **curated URLs** in `smoke.cases.json` | New CMS pages, article types, tags/people go live — follow `se-marketing-sites-smoke-test-setup` |
|
|
24
|
+
| Set `discovery` flags to `false` | Site-specific infra (e.g. CloudFront not routing discovery paths yet) |
|
|
25
|
+
| `cmsIntegrity.routing` mapping | Per-site URL calculators — not a package bug |
|
|
26
|
+
| Security **probe** cases (`category: probe`) | Site-specific hardening (see brightline reference) |
|
|
27
|
+
|
|
28
|
+
## `defer-extract` (escape hatch)
|
|
29
|
+
|
|
30
|
+
Use only when the user **explicitly** accepts short-term customer code with a core extraction ticket:
|
|
31
|
+
|
|
32
|
+
1. Manifest `placement.decision: defer-extract`
|
|
33
|
+
2. `extract_to_core: pending` + `extract_rationale` (what moves to which package)
|
|
34
|
+
3. Add `work/tracker.yaml` rollout or `attention` item if multi-site
|
|
35
|
+
4. **Do not** merge to customer `develop` if it blocks other sites on a shared package fix
|
|
36
|
+
|
|
37
|
+
## Manifest gate
|
|
38
|
+
|
|
39
|
+
Before committing customer changes to any of:
|
|
40
|
+
|
|
41
|
+
- `smoke.cases.json`, `route-build-policy.json`
|
|
42
|
+
- `src/lib/server-config.ts`, discovery route handlers (`llms.txt`, `markdown-index.txt`, …)
|
|
43
|
+
- `scripts/smoke-test-*.ts`, `.github/workflows/deployment-smoke.yml`
|
|
44
|
+
|
|
45
|
+
…when the **stated goal** is “fix deploy smoke” or “fix site-check failure”:
|
|
46
|
+
|
|
47
|
+
1. Record `placement.decision` and `placement.rationale` in `work/active/<feature>.yaml`
|
|
48
|
+
2. If decision is `core`: **do not commit customer workaround** — switch mode
|
|
49
|
+
3. If decision is `customer`: user must confirm in chat (legitimate site-only URL curation)
|
|
50
|
+
4. If decision is `defer-extract`: user must confirm extraction plan in chat
|
|
51
|
+
|
|
52
|
+
## Emergency bypass (temporary only)
|
|
53
|
+
|
|
54
|
+
- `SMOKE_TEST_IGNORE=true` on a single deploy
|
|
55
|
+
- `workflow_dispatch` deployment smoke against a known-good URL
|
|
56
|
+
- Skip Vercel Deployment Check with **human** approval
|
|
57
|
+
|
|
58
|
+
Never treat emergency bypass as permission to land a permanent customer patch for `@se-studio/*` behaviour.
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# Smoke / deploy failure playbook
|
|
2
|
+
|
|
3
|
+
When **local smoke**, **`smoke-test:live`**, or **Vercel Deployment Checks** fail, follow this sequence. Do **not** patch customer origin/URL logic to satisfy `@se-studio/site-check` assertions.
|
|
4
|
+
|
|
5
|
+
Full refusal rules: [`refuse-customer-patches.md`](./refuse-customer-patches.md).
|
|
6
|
+
|
|
7
|
+
## 1. Classify the failure
|
|
8
|
+
|
|
9
|
+
Read the failing step and package:
|
|
10
|
+
|
|
11
|
+
| Failure mentions | Likely owner |
|
|
12
|
+
|------------------|--------------|
|
|
13
|
+
| `discovery`, `llms.txt`, `markdown-index.txt`, `urlOrigin`, canonical origin | `@se-studio/site-check` |
|
|
14
|
+
| `article link integrity`, `cmsIntegrity` | `@se-studio/site-check` + site `routing` config (customer OK) or `contentful-rest-api` (core) |
|
|
15
|
+
| `route-build-policy`, `mustBeSsgOrStatic`, `ƒ` on CMS route | Site introduced dynamic APIs — fix site routing/layout **or** core if shared helper caused it |
|
|
16
|
+
| HTML 404/500 on a **curated** smoke path | Site content/routing or CMS — usually **customer** |
|
|
17
|
+
| Lockfile / install on Vercel | Customer lockfile sync — see `lockfile-sync` reference, not site-check |
|
|
18
|
+
|
|
19
|
+
## 2. If `@se-studio/*` behaviour is wrong → core-first
|
|
20
|
+
|
|
21
|
+
1. Set manifest `mode: core-first` (or stop and ask user to switch).
|
|
22
|
+
2. Fix in `packages/<pkg>/`, add **changeset**, run package tests.
|
|
23
|
+
3. Push `dev` → wait for CI npm publish.
|
|
24
|
+
4. Add/update `work/tracker.yaml` **rollout** for customer bumps.
|
|
25
|
+
5. Set customer manifest `blocked_on: "@se-studio/<pkg>@<version>"` until npm confirms.
|
|
26
|
+
|
|
27
|
+
**Customer repo during wait:** only dependency bump via `pnpm update` — no `baseUrl` / origin / assertion hacks.
|
|
28
|
+
|
|
29
|
+
## 3. If site content/routing is wrong → site-first
|
|
30
|
+
|
|
31
|
+
Examples: wrong slug in `smoke.cases.json`, page unpublished, new article type needs a case.
|
|
32
|
+
|
|
33
|
+
1. Confirm placement `customer`.
|
|
34
|
+
2. Refresh cases from production sitemap (`se-marketing-sites-smoke-test-setup` skill).
|
|
35
|
+
3. Run `pnpm smoke-test:run` locally; `pnpm smoke-test:preview` against develop preview if needed.
|
|
36
|
+
|
|
37
|
+
## 4. Discovery canonical origin (known anti-pattern)
|
|
38
|
+
|
|
39
|
+
**Symptom:** Deploy smoke hits `https://<project>-<hash>.vercel.app` but `llms.txt` / `markdown-index.txt` list `https://www.example.com/...` links. Smoke fails origin check.
|
|
40
|
+
|
|
41
|
+
**Wrong fix (refuse):**
|
|
42
|
+
|
|
43
|
+
- `getRequestBaseUrl()` from request headers in `server-config` or discovery routes
|
|
44
|
+
- Rewriting discovery output to match deployment host permanently
|
|
45
|
+
|
|
46
|
+
**Right fix:**
|
|
47
|
+
|
|
48
|
+
1. Core: `@se-studio/site-check@2.9.4+` with `discovery.urlOrigin: auto` (default in smoke runner).
|
|
49
|
+
2. Customer: `pnpm update @se-studio/site-check@2.9.4 -r`, keep canonical `baseUrl` in app config.
|
|
50
|
+
3. Tracker rollout: `site-check-discovery-canonical` in `work/tracker.yaml`.
|
|
51
|
+
|
|
52
|
+
## 5. Emergency unblock (human or agent with explicit approval)
|
|
53
|
+
|
|
54
|
+
| Action | Use when |
|
|
55
|
+
|--------|----------|
|
|
56
|
+
| `workflow_dispatch` deployment smoke | Re-test after core fix + customer bump |
|
|
57
|
+
| `SMOKE_TEST_IGNORE=true` | One-off deploy; document in manifest notes |
|
|
58
|
+
| Human approves blocked Deployment Check | Production promotion already reviewed |
|
|
59
|
+
|
|
60
|
+
Record what was bypassed and the real fix still required (core PR / npm bump).
|
|
61
|
+
|
|
62
|
+
## 6. Validate before customer push
|
|
63
|
+
|
|
64
|
+
| Check | Command |
|
|
65
|
+
|-------|---------|
|
|
66
|
+
| Local HTTP smoke | `pnpm smoke-test:run` |
|
|
67
|
+
| Preview smoke | `pnpm smoke-test:preview` (develop URL + bypass token) |
|
|
68
|
+
| After core bump | `pnpm update @se-studio/site-check@<version> -r` then re-run smoke |
|
|
69
|
+
| Route policy | `pnpm validate:routes` when Contentful creds available in CI |
|
|
70
|
+
|
|
71
|
+
Deployment checks stay **HTTP-only** — never enable `cmsIntegrity` on Vercel live smoke.
|
|
72
|
+
|
|
73
|
+
## 7. Handoff
|
|
74
|
+
|
|
75
|
+
Include in manifest / handoff:
|
|
76
|
+
|
|
77
|
+
- Root cause (core vs customer)
|
|
78
|
+
- Published package versions required
|
|
79
|
+
- Tracker rollout id
|
|
80
|
+
- Whether any emergency bypass was used
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
# CMS Guidelines Generation
|
|
2
|
+
|
|
3
|
+
This directory contains the pipeline prompts and documentation for generating CMS component guideline fragments for any app in the monorepo.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## What are CMS guidelines?
|
|
8
|
+
|
|
9
|
+
Guidelines are short markdown fragments — one per CMS type — that describe how each component or collection looks, what fields it uses, how colours are applied, and how it behaves. They are merged into `docs/cms-guidelines/COMPONENT_GUIDELINES_FOR_LLM.md`, a single document used to give LLMs accurate context about the app's component library.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Lifecycle: From content to guidelines
|
|
14
|
+
|
|
15
|
+
1. **Build the site** — implement all components and collections; ensure all content is correct and published in Contentful.
|
|
16
|
+
2. **Generate showcase data** — pull real Contentful data into the app's showcase:
|
|
17
|
+
```bash
|
|
18
|
+
pnpm --filter <appName> generate-showcase
|
|
19
|
+
```
|
|
20
|
+
This writes `src/generated/showcase-examples.json`.
|
|
21
|
+
3. **Curate showcase mocks** — run the [curate-showcase-mocks skill](../../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.
|
|
22
|
+
4. **Generate field list** — parse TypeScript types to produce structured field metadata:
|
|
23
|
+
```bash
|
|
24
|
+
# From the app directory:
|
|
25
|
+
pnpm run cms-discovery:field-list
|
|
26
|
+
|
|
27
|
+
# Or from repo root:
|
|
28
|
+
pnpm --filter <appName> exec cms-generate-field-list --app-dir .
|
|
29
|
+
```
|
|
30
|
+
5. **Generate guidelines** — run the [Generate CMS guidelines skill](../../skills/contentful-cms-generate-cms-guidelines/SKILL.md).
|
|
31
|
+
|
|
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
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## How to run guideline generation
|
|
37
|
+
|
|
38
|
+
Use the Cursor skill at [`../../skills/contentful-cms-generate-cms-guidelines/SKILL.md`](../../skills/contentful-cms-generate-cms-guidelines/SKILL.md). It supports three modes:
|
|
39
|
+
|
|
40
|
+
| Mode | When to use |
|
|
41
|
+
|---|---|
|
|
42
|
+
| `full` | First-time generation, or regenerate everything |
|
|
43
|
+
| `single` | Regenerate one component after code changes |
|
|
44
|
+
| `merge-only` | Rebuild `COMPONENT_GUIDELINES_FOR_LLM.md` after manual fragment edits |
|
|
45
|
+
|
|
46
|
+
**Example: full from scratch**
|
|
47
|
+
|
|
48
|
+
Start the app:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
pnpm dev
|
|
52
|
+
# Note the port from dev server output, or read devBaseUrl from .contentful-cms.json
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Then invoke the skill with:
|
|
56
|
+
|
|
57
|
+
- App directory: `<appDir>` (e.g. `.` in an external project)
|
|
58
|
+
- Mode: `full`
|
|
59
|
+
- Discovery URL: `http://localhost:<PORT>/api/cms/discovery/`
|
|
60
|
+
|
|
61
|
+
**Example: single component**
|
|
62
|
+
|
|
63
|
+
Invoke the skill with:
|
|
64
|
+
|
|
65
|
+
- App directory: `<appDir>`
|
|
66
|
+
- Mode: `single`
|
|
67
|
+
- Type name: `Hero`
|
|
68
|
+
- Discovery URL: `http://localhost:<PORT>/api/cms/discovery/`
|
|
69
|
+
|
|
70
|
+
**Example: merge only**
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
cms-merge-guidelines --app-dir apps/example-empty
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## CLIs used by this pipeline
|
|
79
|
+
|
|
80
|
+
| CLI | Purpose |
|
|
81
|
+
|---|---|
|
|
82
|
+
| `cms-generate-html-style-guide` | Generate `html-component-style-guide.md` from `tailwind.config.json` + `globals.css` |
|
|
83
|
+
| `cms-generate-field-list` | Parse TypeScript types → `field-list.json` |
|
|
84
|
+
| `cms-capture-screenshots` | Capture component screenshots for variant evaluation |
|
|
85
|
+
| `cms-update-colour-hints` | Upsert a colour hint in `colour-hints.json` |
|
|
86
|
+
| `cms-generate-collection-guidelines` | Generate all collection/external `.md` files from a discovery URL |
|
|
87
|
+
| `cms-merge-guidelines` | Merge all fragments → `COMPONENT_GUIDELINES_FOR_LLM.md` |
|
|
88
|
+
|
|
89
|
+
All CLIs are provided by `@se-studio/project-build`. Run `pnpm build` from the repo root to ensure they are built and linked.
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## `cms-generate-html-style-guide`
|
|
94
|
+
|
|
95
|
+
Generates `docs/cms-guidelines/html-component-style-guide.md` — a design system reference for any LLM or developer authoring HTML in `HtmlComponent` CMS entries.
|
|
96
|
+
|
|
97
|
+
Does not require a running dev server. Reads only local files:
|
|
98
|
+
- `tailwind.config.json` → colour palette, typography classes, grid configuration
|
|
99
|
+
- `src/app/globals.css` → custom utilities, RTF class names, CSS custom properties
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
# From the app directory:
|
|
103
|
+
pnpm cms-generate-html-style-guide
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
The output file is a **static fragment** — not generated by the LLM component pipeline. It is automatically included as a preamble in `COMPONENT_GUIDELINES_FOR_LLM.md` when `cms-merge-guidelines` runs. Regenerate it whenever the design system changes.
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## `cms-generate-collection-guidelines`
|
|
111
|
+
|
|
112
|
+
New project-independent CLI. Reads the discovery API and writes collection and external guideline fragments without any app-specific hardcoding.
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
cms-generate-collection-guidelines \
|
|
116
|
+
--discovery-url http://localhost:<PORT>/api/cms/discovery/ \
|
|
117
|
+
--app-dir <appDir>
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Options:
|
|
121
|
+
|
|
122
|
+
| Flag | Description |
|
|
123
|
+
|---|---|
|
|
124
|
+
| `--discovery-url <url>` | Discovery API URL (required). App must be running. |
|
|
125
|
+
| `--app-dir <path>` | App directory (default: cwd). |
|
|
126
|
+
|
|
127
|
+
Outputs:
|
|
128
|
+
- `docs/cms-guidelines/collections/<slug>.md` for every collection
|
|
129
|
+
- `docs/cms-guidelines/externals/<slug>.md` for every external
|
|
130
|
+
- Updates `generated/cms-discovery/colour-hints.json`
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
## Pipeline document index
|
|
135
|
+
|
|
136
|
+
| File | Purpose |
|
|
137
|
+
|---|---|
|
|
138
|
+
| `generate-component-guidelines.md` | Full pipeline overview: Phases A–F |
|
|
139
|
+
| `variant-loop.md` | Phase A: propose variants → screenshot → evaluate |
|
|
140
|
+
| `variant-proposal-prompt.md` | LLM prompt: propose showcase variants |
|
|
141
|
+
| `evaluation-prompt.md` | LLM prompt: evaluate screenshot diversity |
|
|
142
|
+
| `generation-prompt.md` | Phase B: three-step guideline generation |
|
|
143
|
+
| `colour-hint-prompt.md` | Phase C: derive colour application hint |
|
|
144
|
+
| `validation-prompt.md` | Phase D: 9-check guideline validation |
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
## Output files (per app)
|
|
149
|
+
|
|
150
|
+
```
|
|
151
|
+
<appDir>/
|
|
152
|
+
docs/cms-guidelines/
|
|
153
|
+
html-component-style-guide.md # design system reference (auto-generated; static fragment)
|
|
154
|
+
components/ # one .md per componentType
|
|
155
|
+
collections/ # one .md per collectionType
|
|
156
|
+
externals/ # one .md per externalComponentType
|
|
157
|
+
COMPONENT_GUIDELINES_FOR_LLM.md # merged document (includes style guide as preamble)
|
|
158
|
+
generated/cms-discovery/
|
|
159
|
+
field-list.json
|
|
160
|
+
colour-hints.json
|
|
161
|
+
accepted-variants/
|
|
162
|
+
components/ # one .json per component type
|
|
163
|
+
collections/ # one .json per collection type
|
|
164
|
+
externals/ # one .json per external component type
|
|
165
|
+
screenshots/
|
|
166
|
+
components/ # PNG screenshots for components
|
|
167
|
+
collections/ # PNG screenshots for collections
|
|
168
|
+
externals/ # PNG screenshots for externals
|
|
169
|
+
index.json # file field uses subpath e.g. "components/hero-default.png"
|
|
170
|
+
```
|