@se-studio/skills 1.5.11 → 1.6.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 +6 -0
- package/package.json +1 -1
- package/references/agent-session/projects.registry.json +2 -1
- package/references/contentful-cms-editor-playbooks/PATTERNS.md +22 -1
- package/references/contentful-cms-editor-playbooks/PROJECT-ROLLOUT.md +10 -3
- 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 +70 -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 +3 -4
- package/references/lockfile-sync/README.md +1 -0
- package/skills/contentful-cms-create-editor-playbooks/SKILL.md +15 -1
- package/skills/se-marketing-sites-smoke-test-setup/SKILL.md +38 -2
- package/skills/site-workflows-agent-session/SKILL.md +1 -1
- package/skills/site-workflows-deps-update/SKILL.md +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# @se-studio/skills
|
|
2
2
|
|
|
3
|
+
## 1.6.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- Add source readiness review as a core editor task, wire create-from-document / create-article / preview-verify to faithful package intake (no copy rewrite), and ship SOURCE-READINESS plus multi-site input examples for playbook authors.
|
|
8
|
+
|
|
3
9
|
## 1.5.11
|
|
4
10
|
|
|
5
11
|
### Patch Changes
|
package/package.json
CHANGED
|
@@ -122,15 +122,36 @@ Fetch live markdown when `website.markdownAccess` is enabled: `https://<prod><pa
|
|
|
122
122
|
|
|
123
123
|
- `people.md` — `enablePerson=false`; clinicians covered by `provider-pages.md` on Brightline
|
|
124
124
|
|
|
125
|
+
## Article create pipeline (all sites)
|
|
126
|
+
|
|
127
|
+
When agents build articles or long pages from an **external package** (doc, Drive, Figma, zip):
|
|
128
|
+
|
|
129
|
+
```text
|
|
130
|
+
task-source-readiness-review → soft-proof + light human yes
|
|
131
|
+
→ task-create-from-document / task-create-article
|
|
132
|
+
→ task-preview-verify (multi-block QA when relevant)
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
**Core principles** (also in `SOURCE-READINESS.md`):
|
|
136
|
+
|
|
137
|
+
1. **No copy rewrite** — faithful structure only
|
|
138
|
+
2. **Source sequence** beats CMS convenience
|
|
139
|
+
3. **Do not invent pair/side-by-side layouts** unless the source is a true pair
|
|
140
|
+
4. **Placeholders** for missing art (GO-WITH-GAPS) rather than silent reordering
|
|
141
|
+
5. **Merge continuous prose** — avoid body-only section spam
|
|
142
|
+
|
|
143
|
+
Site `articles.md` must name **this site’s** body components. Do not paste SE multi-block / Case study rich text stacks onto brands that use a single Article rich text body.
|
|
144
|
+
|
|
125
145
|
## Other playbook types
|
|
126
146
|
|
|
127
147
|
| File | When |
|
|
128
148
|
|------|------|
|
|
129
|
-
| `articles.md` / `ARTICLES.md` | Article types, tag rules, featuredImage vs visuals |
|
|
149
|
+
| `articles.md` / `ARTICLES.md` | Article types, tag rules, featuredImage vs visuals, readiness pointer |
|
|
130
150
|
| `people.md` | `enablePerson=true` — team profiles, author import |
|
|
131
151
|
| `blog-tag-matrix.md` | Complex tag governance (Brightline) |
|
|
132
152
|
| `site-facts.json` | Canonical support email, phone — becomes `site-facts` resource |
|
|
133
153
|
| `tasks/*.md` only | Overrides for core tasks (e.g. `import-blog-tag-matrix`) |
|
|
154
|
+
| `case-study-from-package.md` (SE) | Optional specialized multi-block package playbook + hosted example |
|
|
134
155
|
|
|
135
156
|
## Generator behaviour
|
|
136
157
|
|
|
@@ -178,12 +178,14 @@ Skill: **`contentful-cms-create-editor-playbooks`**
|
|
|
178
178
|
| Action | Rationale |
|
|
179
179
|
|--------|-----------|
|
|
180
180
|
| **Tighten** existing `pages.md` | Ensure reference table, component mapping, and out-of-scope are current |
|
|
181
|
-
| **Tighten** `articles.md` | Work / video / blog rules
|
|
181
|
+
| **Tighten** `articles.md` | Work / video / blog rules; **multi-block Case study / Blog rich text**; **source readiness** + faithful sequence (demote inventing Separated pairs); lab ports |
|
|
182
|
+
| **Add** `case-study-from-package.md` + task stub | Hosted soft-proof example + package intake for work multi-block |
|
|
182
183
|
| **Avoid** many specialized page playbooks | No `/providers/`-style families |
|
|
183
|
-
| Optional `work-case-study-pages.md` | If editors frequently add case studies |
|
|
184
184
|
| Optional `demo-landing-pages.md` | Campaign clones from `/demo-landing` |
|
|
185
185
|
| **Do not** add `people.md` | Use articles + Team grid Person guidance inside `pages.md` |
|
|
186
186
|
|
|
187
|
+
See also: `SOURCE-READINESS.md` and `examples/se-case-study-*.md` in this references folder.
|
|
188
|
+
|
|
187
189
|
### SE website editor guardrails (put in `pages.md`)
|
|
188
190
|
|
|
189
191
|
- New marketing pages: clone `/about`, `/services`, or `/demo-landing` — not blank canvas
|
|
@@ -196,6 +198,10 @@ Skill: **`contentful-cms-create-editor-playbooks`**
|
|
|
196
198
|
|
|
197
199
|
---
|
|
198
200
|
|
|
201
|
+
## PointMe note
|
|
202
|
+
|
|
203
|
+
When `docs/cms-editor/pointme/` is created, add the shared **source readiness + faithful structure** paragraph to `articles.md` (see other sites’ light-touch pattern). No SE multi-block stacks.
|
|
204
|
+
|
|
199
205
|
## Per-project audit checklist
|
|
200
206
|
|
|
201
207
|
Copy into working notes for each site:
|
|
@@ -209,8 +215,9 @@ Copy into working notes for each site:
|
|
|
209
215
|
[ ] capabilities.json reviewed
|
|
210
216
|
[ ] P0 playbook list approved by user
|
|
211
217
|
[ ] pages.md hub links all specialized playbooks
|
|
218
|
+
[ ] articles.md points at task-source-readiness-review (faithful structure, no copy rewrite)
|
|
212
219
|
[ ] task stub per specialized playbook
|
|
213
|
-
[ ] editor-pack regenerated
|
|
220
|
+
[ ] editor-pack regenerated (after @se-studio/contentful-cms bump when new core tasks)
|
|
214
221
|
[ ] project doctor clean
|
|
215
222
|
[ ] pushed to develop
|
|
216
223
|
```
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# Source readiness review (generic)
|
|
2
|
+
|
|
3
|
+
Canonical agent guidance for **package intake before CMS create**. Hosted MCP surfaces the short task as `cms-edit://customer/task-source-readiness-review` (from `@se-studio/contentful-cms` editor-tasks). This file is the fuller reference for playbook authors and coding agents.
|
|
4
|
+
|
|
5
|
+
## Pipeline
|
|
6
|
+
|
|
7
|
+
```text
|
|
8
|
+
Intake → inventory → beat sheet → verdict → soft-proof → light human yes → create → preview QA
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Never skip readiness for non-trivial external packages (Drive, Figma, multi-file zip, long brief).
|
|
12
|
+
|
|
13
|
+
## Non-negotiables
|
|
14
|
+
|
|
15
|
+
| Rule | Meaning |
|
|
16
|
+
|------|---------|
|
|
17
|
+
| **No copy rewrite** | cms-edit structures and places source text only |
|
|
18
|
+
| **Sequence from design/source** | Do not invent order |
|
|
19
|
+
| **No invented pairs** | Side-by-side collections only when the source is a true pair |
|
|
20
|
+
| **Placeholders beat reordering** | Keep missing slots labeled |
|
|
21
|
+
| **Merge continuous prose** | Don’t split body-only blocks without a layout break |
|
|
22
|
+
| **Light human yes** | Accept “yes” / “go” / “proceed” |
|
|
23
|
+
|
|
24
|
+
## Verdict threshold
|
|
25
|
+
|
|
26
|
+
### NO-GO (any one)
|
|
27
|
+
|
|
28
|
+
- Sequence unknown
|
|
29
|
+
- Narrative incomplete for the content type
|
|
30
|
+
- Building would invent structure (pairs, titles, order)
|
|
31
|
+
- Conflicting sources with no owner decision
|
|
32
|
+
|
|
33
|
+
### GO-WITH-GAPS
|
|
34
|
+
|
|
35
|
+
- Sequence clear + narrative usable as written
|
|
36
|
+
- Missing art **≤ 3** slots **or** **≤ ~25%** of visual beats, each named with placeholder strategy
|
|
37
|
+
|
|
38
|
+
### GO
|
|
39
|
+
|
|
40
|
+
- GO-WITH-GAPS plus art complete for the soft-proof (or explicit CMS asset reuse)
|
|
41
|
+
|
|
42
|
+
## Artifact templates
|
|
43
|
+
|
|
44
|
+
### Inventory
|
|
45
|
+
|
|
46
|
+
| # | Role | Source file / ref | Status | CMS mapping |
|
|
47
|
+
|---|------|-------------------|--------|-------------|
|
|
48
|
+
| 1 | Hero | `hero.jpg` | ready | article `featuredImage` |
|
|
49
|
+
| 2 | Product UI | — | missing | body visual + placeholder label |
|
|
50
|
+
|
|
51
|
+
### Beat sheet
|
|
52
|
+
|
|
53
|
+
| Order | Beat | Source | Block type | Notes |
|
|
54
|
+
|-------|------|--------|------------|-------|
|
|
55
|
+
| 1 | Open | Doc §1 | Body RTF | merge paras |
|
|
56
|
+
| 2 | Product | `ui.png` | Body + visual | width per playbook |
|
|
57
|
+
|
|
58
|
+
### Soft-proof (human yes)
|
|
59
|
+
|
|
60
|
+
```text
|
|
61
|
+
Verdict: GO-WITH-GAPS
|
|
62
|
+
Gaps: #3 left pair art missing → labeled placeholder
|
|
63
|
+
1. …
|
|
64
|
+
2. …
|
|
65
|
+
Copy: unchanged from source
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Site playbooks
|
|
69
|
+
|
|
70
|
+
When authoring `docs/cms-editor/<projectKey>/articles.md`:
|
|
71
|
+
|
|
72
|
+
1. Point create-from-package flows at `task-source-readiness-review`
|
|
73
|
+
2. State **faithful structure only**
|
|
74
|
+
3. Describe **this site’s** body components (do not paste SE multi-block stacks onto other brands)
|
|
75
|
+
4. Optionally link or embed one condensed example (hosted MCP cannot read skills package paths)
|
|
76
|
+
|
|
77
|
+
## Worked examples
|
|
78
|
+
|
|
79
|
+
See `examples/` in this folder:
|
|
80
|
+
|
|
81
|
+
| File | Flavour |
|
|
82
|
+
|------|---------|
|
|
83
|
+
| `se-case-study-om1-shaped.md` | SE multi-block work, GO-WITH-GAPS |
|
|
84
|
+
| `se-case-study-meet-makers-shaped.md` | SE simpler multi-block, GO |
|
|
85
|
+
| `om1-resource-case-study-shaped.md` | OM1 resource URL + single body RTF |
|
|
86
|
+
| `brightline-learning-hub-article-shaped.md` | Brightline learning hub |
|
|
87
|
+
| `pedestal-publication-shaped.md` | Pedestal publication |
|
|
88
|
+
| `headwater-news-shaped.md` | Headwater news (GO vs thin NO-GO) |
|
|
89
|
+
|
|
90
|
+
## Anti-patterns
|
|
91
|
+
|
|
92
|
+
- Defaulting every two images to a pair/side-by-side collection
|
|
93
|
+
- Rewriting client copy “for tone”
|
|
94
|
+
- Dropping missing art and renumbering
|
|
95
|
+
- One body block per paragraph with no visual between (gappy section shells on some sites)
|
|
96
|
+
- Building before soft-proof + yes on a multi-asset package
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Example — Brightline learning hub article (readiness + tags)
|
|
2
|
+
|
|
3
|
+
**Site:** Brightline · **Family:** learning hub / blog · **Verdict:** GO-WITH-GAPS
|
|
4
|
+
|
|
5
|
+
## Scenario
|
|
6
|
+
|
|
7
|
+
> “Turn this clinical-education brief and 2 images into a learning hub article. Follow tag matrix rules.”
|
|
8
|
+
|
|
9
|
+
## Sources
|
|
10
|
+
|
|
11
|
+
| Source | Notes |
|
|
12
|
+
|--------|--------|
|
|
13
|
+
| Editorial brief | Title + body sections |
|
|
14
|
+
| 2 images | Hero + inline |
|
|
15
|
+
| Tag guidance | blog-tag-matrix / site playbook |
|
|
16
|
+
|
|
17
|
+
## Inventory
|
|
18
|
+
|
|
19
|
+
| # | Role | Status | Mapping |
|
|
20
|
+
|---|------|--------|---------|
|
|
21
|
+
| 1 | Hero | ready | featuredImage |
|
|
22
|
+
| 2 | Body | ready | Article body per Brightline ARTICLES playbook |
|
|
23
|
+
| 3 | Inline figure | **missing** | placeholder or omit only if human says skip |
|
|
24
|
+
| 4 | Tags | needs human | matrix-constrained |
|
|
25
|
+
|
|
26
|
+
## Verdict
|
|
27
|
+
|
|
28
|
+
**GO-WITH-GAPS** if body + hero ready and only optional inline missing with a named plan; **NO-GO** if tags/topic cannot be chosen without inventing clinical categories.
|
|
29
|
+
|
|
30
|
+
## Soft-proof
|
|
31
|
+
|
|
32
|
+
```text
|
|
33
|
+
Verdict: GO-WITH-GAPS
|
|
34
|
+
1. Hero + SEO fields from brief (no claim invention)
|
|
35
|
+
2. Body RTF — source sections in order
|
|
36
|
+
3. Inline image slot — placeholder or deferred
|
|
37
|
+
4. Tags — proposed from matrix; human yes required
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## What not to do
|
|
41
|
+
|
|
42
|
+
- Invent tags outside matrix
|
|
43
|
+
- Soften clinical language without human request
|
|
44
|
+
- Clone wrong template family
|
|
45
|
+
|
|
46
|
+
## Copy policy
|
|
47
|
+
|
|
48
|
+
Faithful structure only; clinical tone left as provided.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Example — Headwater news (GO vs thin NO-GO)
|
|
2
|
+
|
|
3
|
+
**Site:** Headwater Science · **Type:** news · **Verdicts:** GO or NO-GO
|
|
4
|
+
|
|
5
|
+
## Scenario A — GO
|
|
6
|
+
|
|
7
|
+
> “Publish this press note: full short body (3 paras), date, logo/hero.”
|
|
8
|
+
|
|
9
|
+
### Inventory
|
|
10
|
+
|
|
11
|
+
| # | Role | Status |
|
|
12
|
+
|---|------|--------|
|
|
13
|
+
| 1 | Headline + body | ready |
|
|
14
|
+
| 2 | Date | ready |
|
|
15
|
+
| 3 | Hero/logo | ready |
|
|
16
|
+
|
|
17
|
+
### Soft-proof
|
|
18
|
+
|
|
19
|
+
```text
|
|
20
|
+
Verdict: GO
|
|
21
|
+
1. News article type + slug
|
|
22
|
+
2. Title/date/description from source
|
|
23
|
+
3. Body RTF — three paras as written
|
|
24
|
+
4. featuredImage
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Scenario B — NO-GO
|
|
28
|
+
|
|
29
|
+
> “Make a news post from this one-line LinkedIn blurb and no assets.”
|
|
30
|
+
|
|
31
|
+
### Why NO-GO
|
|
32
|
+
|
|
33
|
+
- Narrative incomplete (no usable body)
|
|
34
|
+
- No art and no permission to ship without
|
|
35
|
+
- Building would invent paragraphs
|
|
36
|
+
|
|
37
|
+
### Agent response
|
|
38
|
+
|
|
39
|
+
Stop. List blockers. Do not invent body copy. Ask for full release text or explicit human-written draft.
|
|
40
|
+
|
|
41
|
+
## What not to do
|
|
42
|
+
|
|
43
|
+
- Expand a one-liner into a fake press release
|
|
44
|
+
- Borrow SE case-study multi-block patterns
|
|
45
|
+
|
|
46
|
+
## Copy policy
|
|
47
|
+
|
|
48
|
+
Only structure what was given.
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Example — OM1 resource case study (single body, readiness still applies)
|
|
2
|
+
|
|
3
|
+
**Site:** OM1 · **URL family:** `/resources/case-studies/{topic}/{slug}/` · **Verdict:** GO
|
|
4
|
+
|
|
5
|
+
OM1 does **not** use SE multi-block CSRT stacks. Body is typically **one Article rich text** (+ optional quote/callout). Readiness still runs so agents don’t invent structure or rewrite.
|
|
6
|
+
|
|
7
|
+
## Scenario
|
|
8
|
+
|
|
9
|
+
> “Create a case study article from this approved PDF/narrative and hero image. Topic tag AI.”
|
|
10
|
+
|
|
11
|
+
## Sources
|
|
12
|
+
|
|
13
|
+
| Source | Notes |
|
|
14
|
+
|--------|--------|
|
|
15
|
+
| Approved narrative PDF/doc | Full article copy |
|
|
16
|
+
| Hero landscape | featuredImage |
|
|
17
|
+
| Primary topic | `ai` (must match URL segment) |
|
|
18
|
+
| Clone ref | Existing case-studies article from playbook |
|
|
19
|
+
|
|
20
|
+
## Inventory
|
|
21
|
+
|
|
22
|
+
| # | Role | Status | Mapping |
|
|
23
|
+
|---|------|--------|---------|
|
|
24
|
+
| 1 | Hero | ready | `featuredImage` |
|
|
25
|
+
| 2 | Body | ready | Article rich text (single) |
|
|
26
|
+
| 3 | Authors | ready | Person links |
|
|
27
|
+
| 4 | Primary tag | ready | drives `{topic}` |
|
|
28
|
+
|
|
29
|
+
## Verdict
|
|
30
|
+
|
|
31
|
+
**GO** — narrative complete, hero present, topic decided. No multi-ART invent.
|
|
32
|
+
|
|
33
|
+
## Soft-proof
|
|
34
|
+
|
|
35
|
+
```text
|
|
36
|
+
Verdict: GO
|
|
37
|
+
1. [template] Article hero fields from entry
|
|
38
|
+
2. Article rich text — full body from doc (as written)
|
|
39
|
+
3. Optional quote only if present in source
|
|
40
|
+
Slug/topic/type per resource-article-pages playbook
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## What not to do
|
|
44
|
+
|
|
45
|
+
- Import SE “Case study rich text” multi-block pattern
|
|
46
|
+
- Invent Separated visuals
|
|
47
|
+
- Rewrite clinical claims
|
|
48
|
+
- Wrong primary tag (breaks URL)
|
|
49
|
+
|
|
50
|
+
## Copy policy
|
|
51
|
+
|
|
52
|
+
Unchanged; structure into one body RTF (+ embeds only if source has them).
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Example — Pedestal publication (poster + download fields)
|
|
2
|
+
|
|
3
|
+
**Site:** Pedestal Health · **Type:** publications · **Verdict:** GO
|
|
4
|
+
|
|
5
|
+
## Scenario
|
|
6
|
+
|
|
7
|
+
> “Add this publication: title, abstract, poster image, and PDF download.”
|
|
8
|
+
|
|
9
|
+
## Sources
|
|
10
|
+
|
|
11
|
+
| Source | Notes |
|
|
12
|
+
|--------|--------|
|
|
13
|
+
| Title + abstract | From publisher brief |
|
|
14
|
+
| Poster image | Landscape/portrait per playbook |
|
|
15
|
+
| PDF file | Download asset |
|
|
16
|
+
| Clone ref | Recent publication from playbook |
|
|
17
|
+
|
|
18
|
+
## Inventory
|
|
19
|
+
|
|
20
|
+
| # | Role | Status | Mapping |
|
|
21
|
+
|---|------|--------|---------|
|
|
22
|
+
| 1 | Listing/hero art | ready | featuredImage / poster field per playbook |
|
|
23
|
+
| 2 | Abstract | ready | summary / body fields as site defines |
|
|
24
|
+
| 3 | PDF | ready | download / media field |
|
|
25
|
+
| 4 | Tags/type | ready | publications type + routing |
|
|
26
|
+
|
|
27
|
+
## Verdict
|
|
28
|
+
|
|
29
|
+
**GO** when PDF + poster + abstract present. **NO-GO** if PDF missing and playbook requires download (don’t fake a link).
|
|
30
|
+
|
|
31
|
+
## Soft-proof
|
|
32
|
+
|
|
33
|
+
```text
|
|
34
|
+
Verdict: GO
|
|
35
|
+
1. Article type publications + slug
|
|
36
|
+
2. Fields: title, date, description from abstract (no rewrite)
|
|
37
|
+
3. Poster / featured image
|
|
38
|
+
4. PDF asset linked
|
|
39
|
+
5. Body only if playbook expects more than abstract
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## What not to do
|
|
43
|
+
|
|
44
|
+
- Invent abstract from title alone
|
|
45
|
+
- Skip PDF and ship empty download
|
|
46
|
+
- Apply SE multi-block case-study layout
|
|
47
|
+
|
|
48
|
+
## Copy policy
|
|
49
|
+
|
|
50
|
+
Abstract and titles as provided.
|
package/references/contentful-cms-editor-playbooks/examples/se-case-study-meet-makers-shaped.md
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Example — SE case study (Meet the Makers–shaped, GO)
|
|
2
|
+
|
|
3
|
+
**Site:** SE Studio · **Type:** work · **Verdict:** GO
|
|
4
|
+
|
|
5
|
+
Smaller multi-block set; good first lab target. Production public path pattern: `/work/{client}/{title-slug}/` (lab: `lab/…`).
|
|
6
|
+
|
|
7
|
+
## Scenario
|
|
8
|
+
|
|
9
|
+
> “Port this simpler case study multi-block for lab. Faithful art order; don’t invent pairs.”
|
|
10
|
+
|
|
11
|
+
## Sources
|
|
12
|
+
|
|
13
|
+
| Source | Notes |
|
|
14
|
+
|--------|--------|
|
|
15
|
+
| Ordered image list from human / Figma | Clear sequence |
|
|
16
|
+
| Short narrative | Intro, process, outcome |
|
|
17
|
+
| Existing assets in CMS or Drive | All present |
|
|
18
|
+
|
|
19
|
+
## Inventory (excerpt)
|
|
20
|
+
|
|
21
|
+
| # | Role | Status | Mapping |
|
|
22
|
+
|---|------|--------|---------|
|
|
23
|
+
| 1 | Hero | ready | featuredImage |
|
|
24
|
+
| 2 | Intro copy | ready | CSRT body (merge) |
|
|
25
|
+
| 3 | Maker portraits sequence | ready | CSRT visuals or Visuals only if design is a grid |
|
|
26
|
+
| 4 | Closing copy | ready | CSRT body |
|
|
27
|
+
|
|
28
|
+
## Verdict
|
|
29
|
+
|
|
30
|
+
**GO** — sequence known, art complete, copy usable as written.
|
|
31
|
+
|
|
32
|
+
## Soft-proof
|
|
33
|
+
|
|
34
|
+
```text
|
|
35
|
+
Verdict: GO
|
|
36
|
+
1. Hero (template)
|
|
37
|
+
2. CSRT body — intro
|
|
38
|
+
3. CSRT visual / stacked media per design (not inventing Separated)
|
|
39
|
+
4. CSRT body — close
|
|
40
|
+
Lab flags on
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## What not to do
|
|
44
|
+
|
|
45
|
+
- Force Separated because “there are two portraits”
|
|
46
|
+
- Add section headings the source doesn’t have
|
|
47
|
+
- Touch production entry — always new lab draft
|
|
48
|
+
|
|
49
|
+
## Copy policy
|
|
50
|
+
|
|
51
|
+
Unchanged from source.
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# Example — SE case study from package (OM1-shaped, GO-WITH-GAPS)
|
|
2
|
+
|
|
3
|
+
**Site:** SE Studio (`se2026`) · **Type:** work case study · **Verdict used:** GO-WITH-GAPS
|
|
4
|
+
|
|
5
|
+
Synthetic package shaped like a real multi-block work port (Drive zip + Figma sequence + narrative). Names are illustrative.
|
|
6
|
+
|
|
7
|
+
## Scenario
|
|
8
|
+
|
|
9
|
+
> “Build a lab case study from this Drive folder and the Figma OM1 frame. Keep copy as written.”
|
|
10
|
+
|
|
11
|
+
## Sources provided
|
|
12
|
+
|
|
13
|
+
| Source | Notes |
|
|
14
|
+
|--------|--------|
|
|
15
|
+
| Figma frame (ordered art direction) | Sequence + pair moments + widths |
|
|
16
|
+
| Drive zip (~11 files) | Photos, UI grabs, 2 decorative videos |
|
|
17
|
+
| Narrative doc | Origin → challenge → approach → close |
|
|
18
|
+
| Production ref | Other SE work pieces for hero/template only |
|
|
19
|
+
|
|
20
|
+
## Inventory (excerpt)
|
|
21
|
+
|
|
22
|
+
| # | Role | File | Status | Mapping |
|
|
23
|
+
|---|------|------|--------|---------|
|
|
24
|
+
| 1 | Hero | `OM1_Hero.jpg` | ready | article `featuredImage` |
|
|
25
|
+
| 2 | Website UI | `OM1_websiteImage.png` | ready | CSRT `visual` ~80% |
|
|
26
|
+
| 3L | Pair left | — | **missing** | Separated left + **placeholder** |
|
|
27
|
+
| 3R | Pair right | `OM1_BlueModel.jpg` | ready | Separated right |
|
|
28
|
+
| 4 | Origin copy | Doc §1–2 | ready | CSRT body only (merge paras) |
|
|
29
|
+
| 5 | Hands photo | `OM1_HandsWithScreen.jpg` | ready | CSRT visual 100% |
|
|
30
|
+
| 6L | Pair left | `OM1_ManAndPatterns.jpg` | ready | Separated left |
|
|
31
|
+
| 6R | Pair right dialogs | — | **missing** | Separated right + **placeholder** |
|
|
32
|
+
| 7 | Challenge copy | Doc §3 | ready | CSRT body only |
|
|
33
|
+
| 8 | Landscape demo | `…LandscapeBlue….mp4` | ready | CSRT visual; autoplay+loop |
|
|
34
|
+
| … | … | … | … | … |
|
|
35
|
+
|
|
36
|
+
## Verdict
|
|
37
|
+
|
|
38
|
+
**GO-WITH-GAPS** — sequence clear from Figma; narrative complete; **2 missing visual slots** (≤3), each placeholder-labeled. Do not invent substitute art or drop slots.
|
|
39
|
+
|
|
40
|
+
## Soft-proof (structure only; copy unchanged)
|
|
41
|
+
|
|
42
|
+
```text
|
|
43
|
+
Verdict: GO-WITH-GAPS
|
|
44
|
+
1. [template] Article hero — title/subtitle from doc; featuredImage hero
|
|
45
|
+
2. CSRT media — website UI 80%
|
|
46
|
+
3. Separated visuals — placeholder left | blue model right
|
|
47
|
+
4. CSRT body — origin paras (merged)
|
|
48
|
+
5. CSRT media — hands 100%
|
|
49
|
+
6. Separated — man/patterns | placeholder dialogs
|
|
50
|
+
7. CSRT body — challenge
|
|
51
|
+
8. CSRT media — landscape video autoplay+loop ~70%
|
|
52
|
+
9. CSRT body — approach
|
|
53
|
+
10. CSRT media — mobile screens
|
|
54
|
+
11. Quote — as in source
|
|
55
|
+
12. Separated or CSRTs — pattern | orange demo (only if Figma is a true pair)
|
|
56
|
+
13. CSRT body — close
|
|
57
|
+
Lab: slug lab/…, hidden, unindexed
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## What not to do
|
|
61
|
+
|
|
62
|
+
- Invent Separated for stacked single images
|
|
63
|
+
- Rewrite narrative “for flow”
|
|
64
|
+
- Reorder to put all text first
|
|
65
|
+
- Use article `visuals` as a dump for body art
|
|
66
|
+
- Skip placeholders and renumber
|
|
67
|
+
|
|
68
|
+
## Copy policy
|
|
69
|
+
|
|
70
|
+
**Unchanged.** Meta `description` drafted from existing claims only; human **yes** on soft-proof.
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# Deployment smoke — skip on feature branches
|
|
2
|
+
|
|
3
|
+
Vercel **Deployment Checks** wait for a GitHub status from the smoke workflow. On feature-branch previews the `smoke` job `if` excludes the branch, so **no job runs and no status is posted** — Vercel stays on "Waiting for checks" and the PR blocks.
|
|
4
|
+
|
|
5
|
+
**Fix:** add a `skip-smoke-outside-integration-branches` job that posts **success** when the deploy ref is not an integration/production branch. Real smoke still runs only on integration preview + production.
|
|
6
|
+
|
|
7
|
+
## Requirements
|
|
8
|
+
|
|
9
|
+
1. Workflow file must exist on the repo **default branch** (`develop`, `dev`, or registry override) — `repository_dispatch` runs workflows from default branch, not the feature branch.
|
|
10
|
+
2. `permissions.statuses: write` on the workflow.
|
|
11
|
+
3. `CHECK_NAME` must match the status name registered in Vercel → Settings → Deployment Checks (exact string).
|
|
12
|
+
4. `smoke` job `if` must already limit runs to integration + production (do not run smoke on feature branches).
|
|
13
|
+
|
|
14
|
+
## Integration branch names
|
|
15
|
+
|
|
16
|
+
| Repo type | Preview smoke ref | Production smoke ref |
|
|
17
|
+
|-----------|-------------------|----------------------|
|
|
18
|
+
| Most customer sites | `develop` | `main` |
|
|
19
|
+
| HopSkipDrive extended-port | `extended-port` | `main` (if production checks enabled) |
|
|
20
|
+
| se-core-product apps | `dev` | `main` |
|
|
21
|
+
|
|
22
|
+
Use `client_payload.git.ref` (branch name, not `refs/heads/...` — verify per project in a test dispatch).
|
|
23
|
+
|
|
24
|
+
## Copy-paste
|
|
25
|
+
|
|
26
|
+
See [`workflow-snippet.yml`](workflow-snippet.yml). One skip job per Vercel project / workflow file (monorepos with multiple marketing apps need one skip job each).
|
|
27
|
+
|
|
28
|
+
## cms-edit host (optional)
|
|
29
|
+
|
|
30
|
+
Feature-branch PRs also trigger cms-edit Vercel projects. Skip builds outside integration branches via `ignoreCommand` in `cms-edit/host/vercel.json`:
|
|
31
|
+
|
|
32
|
+
```json
|
|
33
|
+
"ignoreCommand": "if [ \"$VERCEL_GIT_COMMIT_REF\" != \"develop\" ] && [ \"$VERCEL_GIT_COMMIT_REF\" != \"main\" ]; then exit 0; fi; git diff HEAD^ HEAD --quiet -- . ../ ../../pnpm-lock.yaml ../../pnpm-workspace.yaml ../../package.json || exit 1; exit 0"
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Replace `develop` with your integration branch (e.g. `extended-port`).
|
|
37
|
+
|
|
38
|
+
## Rollout status
|
|
39
|
+
|
|
40
|
+
| Repo | Skip job on feature branches | cms-edit ignore |
|
|
41
|
+
|------|------------------------------|-----------------|
|
|
42
|
+
| brightline-sites | done (both apps) | done |
|
|
43
|
+
| se-website-2026 | pending → M4 branch | pending |
|
|
44
|
+
| om1-website | audit | audit |
|
|
45
|
+
| pedestal-sites | audit | audit |
|
|
46
|
+
| pointme | audit | audit |
|
|
47
|
+
| hsd-extended-port | audit | n/a |
|
|
48
|
+
|
|
49
|
+
Update this table when applying the pattern.
|
|
50
|
+
|
|
51
|
+
## Emergency unblock (one PR)
|
|
52
|
+
|
|
53
|
+
If the skip job is not yet on default branch, post success manually:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
gh api "repos/<owner>/<repo>/statuses/<commit-sha>" \
|
|
57
|
+
-f state=success \
|
|
58
|
+
-f context="Vercel - <project-name>: deployment smoke" \
|
|
59
|
+
-f description="Skipped — deployment smoke runs only on develop and main"
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Verify
|
|
63
|
+
|
|
64
|
+
1. Merge skip job to default branch.
|
|
65
|
+
2. Open a feature PR — Vercel preview should complete without pending deployment smoke.
|
|
66
|
+
3. Push to `develop` — deployment smoke should run and gate aliasing as before.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Add BEFORE the smoke job in each deployment-smoke workflow.
|
|
2
|
+
# Replace <vercel-project-name> and integration/production refs as needed.
|
|
3
|
+
|
|
4
|
+
jobs:
|
|
5
|
+
skip-smoke-outside-integration-branches:
|
|
6
|
+
if: |
|
|
7
|
+
github.event_name == 'repository_dispatch' &&
|
|
8
|
+
github.event.client_payload.project.name == '<vercel-project-name>' &&
|
|
9
|
+
github.event.client_payload.git.ref != 'develop' &&
|
|
10
|
+
github.event.client_payload.git.ref != 'main'
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
steps:
|
|
13
|
+
- name: Skip deployment smoke on feature branches
|
|
14
|
+
env:
|
|
15
|
+
CHECK_NAME: 'Vercel - <vercel-project-name>: deployment smoke'
|
|
16
|
+
DEPLOYMENT_SHA: ${{ github.event.client_payload.git.sha }}
|
|
17
|
+
GH_TOKEN: ${{ github.token }}
|
|
18
|
+
run: |
|
|
19
|
+
gh api "repos/${GITHUB_REPOSITORY}/statuses/${DEPLOYMENT_SHA}" \
|
|
20
|
+
-f state=success \
|
|
21
|
+
-f context="${CHECK_NAME}" \
|
|
22
|
+
-f description="Skipped — deployment smoke runs only on develop and main" \
|
|
23
|
+
-f target_url="${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}"
|
|
24
|
+
|
|
25
|
+
smoke:
|
|
26
|
+
if: |
|
|
27
|
+
(github.event_name == 'workflow_dispatch') ||
|
|
28
|
+
(
|
|
29
|
+
github.event_name == 'repository_dispatch' &&
|
|
30
|
+
github.event.client_payload.project.name == '<vercel-project-name>' &&
|
|
31
|
+
(
|
|
32
|
+
(github.event.client_payload.git.ref == 'develop' &&
|
|
33
|
+
github.event.client_payload.environment == 'preview') ||
|
|
34
|
+
(github.event.client_payload.git.ref == 'main' &&
|
|
35
|
+
github.event.client_payload.environment == 'production')
|
|
36
|
+
)
|
|
37
|
+
)
|
|
38
|
+
# ... existing smoke steps unchanged ...
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"canonicalPatchesScript": "~/source/se/se-core-product/scripts/check-no-pnpm-patches.mjs",
|
|
3
3
|
"pinOverrides": {
|
|
4
|
-
"next": "^15.5.
|
|
5
|
-
"@types/node": "^24.13.
|
|
4
|
+
"next": "^15.5.21",
|
|
5
|
+
"@types/node": "^24.13.3"
|
|
6
6
|
},
|
|
7
7
|
"pnpm": {
|
|
8
8
|
"major": 11,
|
|
@@ -72,8 +72,7 @@
|
|
|
72
72
|
"displayName": "HopSkipDrive Extended Port",
|
|
73
73
|
"path": "~/source/customers/hopskipdrive/hsd-extended-port",
|
|
74
74
|
"branch": "extended-port",
|
|
75
|
-
"
|
|
76
|
-
"wipNote": "Parity port from legacy GraphQL/Netlify site onto @se-studio packages. Work on extended-port only — not develop/production. Defer routine deps bumps until parity snags are under control unless explicitly requested.",
|
|
75
|
+
"wipNote": "Parity port complete (2026-07-07). Work on extended-port only — not develop/production until cutover. Rollouts tracked in work/tracker.yaml.",
|
|
77
76
|
"validate": "pnpm validate",
|
|
78
77
|
"workspace": false,
|
|
79
78
|
"hasPinOverrides": false
|
|
@@ -50,5 +50,6 @@ Apply the full stack when touching deps or CI in each repo:
|
|
|
50
50
|
| om1-website | — | — | — | — |
|
|
51
51
|
| se-website-2026 | yes | yes | yes | yes |
|
|
52
52
|
| pointme | — | — | — | — |
|
|
53
|
+
| hsd-extended-port | yes | yes (extended-port) | n/a | yes |
|
|
53
54
|
|
|
54
55
|
Update this table as repos adopt the pattern.
|
|
@@ -11,8 +11,10 @@ Use this skill when a customer site needs **hosted MCP editor playbooks** — th
|
|
|
11
11
|
|
|
12
12
|
| File | Purpose |
|
|
13
13
|
|------|---------|
|
|
14
|
-
| `.agents/references/contentful-cms-editor-playbooks/PATTERNS.md` | Two-file pattern, sections, naming, Brightline examples |
|
|
14
|
+
| `.agents/references/contentful-cms-editor-playbooks/PATTERNS.md` | Two-file pattern, sections, naming, Brightline examples, article create pipeline |
|
|
15
15
|
| `.agents/references/contentful-cms-editor-playbooks/PROJECT-ROLLOUT.md` | Rollout queue (Pedestal → OM1 → PointMe → SE website) and per-site audit hints |
|
|
16
|
+
| `.agents/references/contentful-cms-editor-playbooks/SOURCE-READINESS.md` | Package intake, GO / GO-WITH-GAPS / NO-GO, faithful structure (no copy rewrite) |
|
|
17
|
+
| `.agents/references/contentful-cms-editor-playbooks/examples/` | Worked input packages (SE, OM1, Brightline, Pedestal, Headwater) |
|
|
16
18
|
|
|
17
19
|
## When to use
|
|
18
20
|
|
|
@@ -139,6 +141,18 @@ See `PATTERNS.md` for the full Brightline hub example.
|
|
|
139
141
|
|
|
140
142
|
**Do not** put task stubs in the root — only under `tasks/`.
|
|
141
143
|
|
|
144
|
+
### Articles playbooks (article-heavy sites)
|
|
145
|
+
|
|
146
|
+
When writing or tightening `articles.md` / `ARTICLES.md`:
|
|
147
|
+
|
|
148
|
+
1. Point external package creates at **`task-source-readiness-review`** (core task from `@se-studio/contentful-cms`)
|
|
149
|
+
2. State **faithful structure only — do not rewrite source copy**
|
|
150
|
+
3. Composition follows **source sequence**; do **not** invent pair/side-by-side layouts unless the design is a true pair
|
|
151
|
+
4. Name **this site’s** body components only (never paste SE Case study rich text multi-block onto other brands)
|
|
152
|
+
5. Optional: one condensed example or link to a specialized package playbook for high-traffic types
|
|
153
|
+
|
|
154
|
+
See `SOURCE-READINESS.md` and `examples/`.
|
|
155
|
+
|
|
142
156
|
### Specialized playbook sections
|
|
143
157
|
|
|
144
158
|
Each `<topic>.md` should include:
|
|
@@ -56,6 +56,8 @@ Example `package.json` entries:
|
|
|
56
56
|
|
|
57
57
|
**Vercel Deployment Check (live URL)** — GitHub Action on `vercel.deployment.ready` tests `client_payload.url` before production domains alias. Workflow must live on the repo **default branch**. Register the status `name` in Vercel → Settings → Build and Deployment → Deployment Checks.
|
|
58
58
|
|
|
59
|
+
**Feature branches must not run smoke** — limit the `smoke` job to integration preview (`develop` + `preview`) and production (`main` + `production`). Feature-branch previews still fire `repository_dispatch`; without a matching job, Vercel waits forever on "Waiting for checks". Add a `skip-smoke-outside-integration-branches` job that posts **success** for non-integration refs. Full rollout guide: [`references/deployment-smoke-feature-branch-skip/`](../../references/deployment-smoke-feature-branch-skip/README.md). Monorepos: one skip job per Vercel project workflow. Non-`develop` integration branches (e.g. HSD `extended-port`): adjust ref checks in both jobs.
|
|
60
|
+
|
|
59
61
|
Filter on `client_payload.environment == 'production'` when Deployment Checks target production only. Vercel also dispatches for preview and custom environments (`preview`, `develop`, etc.); skip those to avoid duplicate CI runs. Use `workflow_dispatch` without an environment filter for manual smoke against any URL.
|
|
60
62
|
|
|
61
63
|
```yaml
|
|
@@ -67,11 +69,45 @@ on:
|
|
|
67
69
|
types:
|
|
68
70
|
- vercel.deployment.ready
|
|
69
71
|
|
|
72
|
+
permissions:
|
|
73
|
+
contents: read
|
|
74
|
+
actions: read
|
|
75
|
+
statuses: write
|
|
76
|
+
|
|
70
77
|
jobs:
|
|
71
|
-
smoke:
|
|
78
|
+
skip-smoke-outside-integration-branches:
|
|
72
79
|
if: |
|
|
80
|
+
github.event_name == 'repository_dispatch' &&
|
|
73
81
|
github.event.client_payload.project.name == '<vercel-project-name>' &&
|
|
74
|
-
github.event.client_payload.
|
|
82
|
+
github.event.client_payload.git.ref != 'develop' &&
|
|
83
|
+
github.event.client_payload.git.ref != 'main'
|
|
84
|
+
runs-on: ubuntu-latest
|
|
85
|
+
steps:
|
|
86
|
+
- name: Skip deployment smoke on feature branches
|
|
87
|
+
env:
|
|
88
|
+
CHECK_NAME: 'Vercel - <vercel-project-name>: deployment smoke'
|
|
89
|
+
DEPLOYMENT_SHA: ${{ github.event.client_payload.git.sha }}
|
|
90
|
+
GH_TOKEN: ${{ github.token }}
|
|
91
|
+
run: |
|
|
92
|
+
gh api "repos/${GITHUB_REPOSITORY}/statuses/${DEPLOYMENT_SHA}" \
|
|
93
|
+
-f state=success \
|
|
94
|
+
-f context="${CHECK_NAME}" \
|
|
95
|
+
-f description="Skipped — deployment smoke runs only on develop and main" \
|
|
96
|
+
-f target_url="${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}"
|
|
97
|
+
|
|
98
|
+
smoke:
|
|
99
|
+
if: |
|
|
100
|
+
(github.event_name == 'workflow_dispatch') ||
|
|
101
|
+
(
|
|
102
|
+
github.event_name == 'repository_dispatch' &&
|
|
103
|
+
github.event.client_payload.project.name == '<vercel-project-name>' &&
|
|
104
|
+
(
|
|
105
|
+
(github.event.client_payload.git.ref == 'develop' &&
|
|
106
|
+
github.event.client_payload.environment == 'preview') ||
|
|
107
|
+
(github.event.client_payload.git.ref == 'main' &&
|
|
108
|
+
github.event.client_payload.environment == 'production')
|
|
109
|
+
)
|
|
110
|
+
)
|
|
75
111
|
runs-on: ubuntu-latest
|
|
76
112
|
steps:
|
|
77
113
|
- uses: vercel/repository-dispatch/actions/checkout@v1
|
|
@@ -303,6 +303,6 @@ Agent must load this skill, write manifest, run placement checklist, confirm bra
|
|
|
303
303
|
| `om1` | `develop` | customer |
|
|
304
304
|
| `pointme` | `develop` | customer |
|
|
305
305
|
| `pedestal` | `develop` | customer monorepo |
|
|
306
|
-
| `hsd-extended-port` | `extended-port` | customer
|
|
306
|
+
| `hsd-extended-port` | `extended-port` | customer |
|
|
307
307
|
|
|
308
308
|
Full paths and MCP keys: `projects.registry.json`.
|
|
@@ -51,11 +51,11 @@ Run that locally **before push** whenever `package.json`, lockfile, or overrides
|
|
|
51
51
|
| `om1` | OM1 Website | `develop` |
|
|
52
52
|
| `pointme` | PointMe Marketing Site | `develop` |
|
|
53
53
|
| `pedestal` | Pedestal Sites | `develop` |
|
|
54
|
-
| `hsd-extended-port` | HopSkipDrive Extended Port
|
|
54
|
+
| `hsd-extended-port` | HopSkipDrive Extended Port | `extended-port` |
|
|
55
55
|
|
|
56
56
|
User may name a key (`update deps in om1`) or ask to run through all projects sequentially.
|
|
57
57
|
|
|
58
|
-
**
|
|
58
|
+
**HSD extended-port:** Parity complete (2026-07-07). Branch `extended-port`, not `develop`, until production cutover. Rollouts tracked in `work/tracker.yaml` — prefer targeted `@se-studio/*` bumps per rollout before full `pnpm update -r --latest`.
|
|
59
59
|
|
|
60
60
|
---
|
|
61
61
|
|