@se-studio/skills 1.6.1 → 1.6.3
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 +12 -0
- package/package.json +1 -1
- package/references/agent-session/customer-agents-block.md +7 -3
- package/references/agent-session/manifest.template.yaml +5 -2
- package/references/agent-session/projects.registry.json +22 -7
- package/references/deployment-smoke-feature-branch-skip/README.md +3 -3
- package/references/deps-update/projects.registry.json +8 -6
- package/references/lockfile-sync/README.md +1 -1
- package/skills/se-marketing-sites-curate-showcase-mocks/SKILL.md +10 -3
- package/skills/se-marketing-sites-handling-media/SKILL.md +6 -1
- package/skills/se-marketing-sites-smoke-test-setup/SKILL.md +1 -2
- package/skills/site-workflows-agent-session/SKILL.md +62 -32
- package/skills/site-workflows-deps-update/SKILL.md +8 -7
- package/skills/site-workflows-new-project/SKILL.md +3 -3
- package/skills/site-workflows-stale-files-cleanup/SKILL.md +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @se-studio/skills
|
|
2
2
|
|
|
3
|
+
## 1.6.3
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- DotLottie player for CMS animations (JSON and `.lottie`), with classic lottie-player fallback if DotLottie is not installed. Lazy load by default; honour loading/fetchPriority for eager (heroes). Server enrich reads dimensions and poster for CLS. WASM self-host helper (`/dotlottie/dotlottie-player.wasm`). Extension-first animation detection; hosted staged upload allows JSON/zip for animation packages. INavigation surfaces optional backgroundColour/textColour for footer chrome.
|
|
8
|
+
|
|
9
|
+
## 1.6.2
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- 928562f: CMS showcase: controls closed by default (`?controls=true`), map control keys to usedFields, string mock body → rich text, placeholder visuals, iframe height shrink/caps, External video for Vimeo/YouTube mock URLs, `showcaseLayout` registration + fixed preview frames, and helpers `isCmsShowcase` / `articlesFromShowcaseContents` / `peopleFromShowcaseContents` for related-content collections. Skills: curate-showcase-mocks video URL and no-LLM notes.
|
|
14
|
+
|
|
3
15
|
## 1.6.1
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
package/package.json
CHANGED
|
@@ -7,7 +7,8 @@ Default mode for this repo: **site-first**.
|
|
|
7
7
|
### Branch policy
|
|
8
8
|
|
|
9
9
|
- Agents may commit and push **`develop`** and **`feature/*`** only.
|
|
10
|
-
- **Never** push to `main`, `master`, or production — human-only.
|
|
10
|
+
- **Never** push to `main`, `master`, `production`, or any production branch — **human-only** for all customer sites.
|
|
11
|
+
- Do **not** ship from a production checkout (e.g. HSD `~/source/customers/hopskipdrive/production-hsd-website`). Use the develop checkout only.
|
|
11
12
|
- Prefer **draft PRs** to `develop` over direct pushes when `gh` is available.
|
|
12
13
|
|
|
13
14
|
### Core vs customer placement
|
|
@@ -46,10 +47,13 @@ Never hand-edit `package.json` dependency versions.
|
|
|
46
47
|
### Parallel features
|
|
47
48
|
|
|
48
49
|
- One feature = one `feature/<scope>/<slug>` branch
|
|
49
|
-
-
|
|
50
|
+
- **Git worktree required** for all feature work — do not implement on the primary `develop` checkout
|
|
51
|
+
- Path: registry `worktreesRoot` / `<feature-slug>` (see se-core-product `packages/skills/references/agent-session/projects.registry.json`)
|
|
52
|
+
- Create: `git worktree add <worktreesRoot>/<feature-slug> -b feature/<scope>/<slug> origin/develop`
|
|
53
|
+
- Manifest must set `worktree:`; opt out only if the user says “work in place” / “no worktree” (`worktree_opt_out: true`)
|
|
50
54
|
- CMS edits: `--session <feature-slug>` (isolate cms-edit sessions)
|
|
51
55
|
- 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)
|
|
52
56
|
|
|
53
57
|
### Production handoff
|
|
54
58
|
|
|
55
|
-
When ready for production, agents **stop** and deliver a handoff note — they do not merge to `main
|
|
59
|
+
When ready for production, agents **stop** and deliver a handoff note — they do not merge to `main` / `production` or promote Vercel/Netlify. Production promotion is always **human-only**. See skill Step 8.
|
|
@@ -6,7 +6,10 @@ mode: site-first # core-first | site-first
|
|
|
6
6
|
project_key: om1
|
|
7
7
|
primary_repo: ~/source/customers/om1/om1-website
|
|
8
8
|
branch: feature/om1/my-feature-slug
|
|
9
|
-
|
|
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
|
|
10
13
|
integration_branch: develop
|
|
11
14
|
|
|
12
15
|
related_repos:
|
|
@@ -31,4 +34,4 @@ updated_at: 2026-07-05
|
|
|
31
34
|
|
|
32
35
|
validation: []
|
|
33
36
|
|
|
34
|
-
handoff: null
|
|
37
|
+
handoff: null
|
|
@@ -5,11 +5,17 @@
|
|
|
5
5
|
"customer": "develop"
|
|
6
6
|
},
|
|
7
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
|
+
},
|
|
8
13
|
"projects": [
|
|
9
14
|
{
|
|
10
15
|
"key": "se-core-product",
|
|
11
16
|
"displayName": "SE Core Product",
|
|
12
17
|
"path": "~/source/se/se-core-product",
|
|
18
|
+
"worktreesRoot": "~/source/se/worktrees",
|
|
13
19
|
"branch": "dev",
|
|
14
20
|
"type": "core",
|
|
15
21
|
"validate": "pnpm validate",
|
|
@@ -19,6 +25,7 @@
|
|
|
19
25
|
"key": "se2026",
|
|
20
26
|
"displayName": "SE Studio Site",
|
|
21
27
|
"path": "~/source/se/se-website-2026",
|
|
28
|
+
"worktreesRoot": "~/source/se/worktrees",
|
|
22
29
|
"branch": "develop",
|
|
23
30
|
"type": "customer",
|
|
24
31
|
"contentfulSpaceId": "g0pw3n92bre6",
|
|
@@ -29,6 +36,7 @@
|
|
|
29
36
|
"key": "brightline",
|
|
30
37
|
"displayName": "Brightline Sites",
|
|
31
38
|
"path": "~/source/customers/brightline/brightline-sites",
|
|
39
|
+
"worktreesRoot": "~/source/customers/brightline/worktrees",
|
|
32
40
|
"branch": "develop",
|
|
33
41
|
"type": "customer-monorepo",
|
|
34
42
|
"sharedPackage": "@brightline/shared",
|
|
@@ -40,6 +48,7 @@
|
|
|
40
48
|
"key": "om1",
|
|
41
49
|
"displayName": "OM1 Website",
|
|
42
50
|
"path": "~/source/customers/om1/om1-website",
|
|
51
|
+
"worktreesRoot": "~/source/customers/om1/worktrees",
|
|
43
52
|
"branch": "develop",
|
|
44
53
|
"type": "customer",
|
|
45
54
|
"contentfulSpaceId": "ddhe5ahaolzf",
|
|
@@ -50,6 +59,7 @@
|
|
|
50
59
|
"key": "pointme",
|
|
51
60
|
"displayName": "PointMe Marketing Site",
|
|
52
61
|
"path": "~/source/customers/pointme/develop-marketing-site",
|
|
62
|
+
"worktreesRoot": "~/source/customers/pointme/worktrees",
|
|
53
63
|
"branch": "develop",
|
|
54
64
|
"type": "customer",
|
|
55
65
|
"contentfulSpaceId": "alwdzgjlz5qv",
|
|
@@ -60,6 +70,7 @@
|
|
|
60
70
|
"key": "pedestal",
|
|
61
71
|
"displayName": "Pedestal Sites",
|
|
62
72
|
"path": "~/source/customers/pedestal/pedestal-sites",
|
|
73
|
+
"worktreesRoot": "~/source/customers/pedestal/worktrees",
|
|
63
74
|
"branch": "develop",
|
|
64
75
|
"type": "customer-monorepo",
|
|
65
76
|
"sharedPackage": "@pedestal/site-common",
|
|
@@ -68,14 +79,18 @@
|
|
|
68
79
|
"validate": "pnpm -r validate"
|
|
69
80
|
},
|
|
70
81
|
{
|
|
71
|
-
"key": "hsd
|
|
72
|
-
"displayName": "HopSkipDrive
|
|
73
|
-
"path": "~/source/customers/hopskipdrive/hsd-
|
|
74
|
-
"
|
|
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",
|
|
75
89
|
"type": "customer",
|
|
76
|
-
"
|
|
77
|
-
"hostedMcp":
|
|
78
|
-
"validate": "pnpm validate"
|
|
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."
|
|
79
94
|
}
|
|
80
95
|
]
|
|
81
96
|
}
|
|
@@ -16,7 +16,7 @@ Vercel **Deployment Checks** wait for a GitHub status from the smoke workflow. O
|
|
|
16
16
|
| Repo type | Preview smoke ref | Production smoke ref |
|
|
17
17
|
|-----------|-------------------|----------------------|
|
|
18
18
|
| Most customer sites | `develop` | `main` |
|
|
19
|
-
| HopSkipDrive
|
|
19
|
+
| HopSkipDrive (`hsd`) | `develop` (`develop-hsd-website`) | `production` (`production-hsd-website`, human-only) |
|
|
20
20
|
| se-core-product apps | `dev` | `main` |
|
|
21
21
|
|
|
22
22
|
Use `client_payload.git.ref` (branch name, not `refs/heads/...` — verify per project in a test dispatch).
|
|
@@ -33,7 +33,7 @@ Feature-branch PRs also trigger cms-edit Vercel projects. Skip builds outside in
|
|
|
33
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
34
|
```
|
|
35
35
|
|
|
36
|
-
Replace `develop` with your integration branch
|
|
36
|
+
Replace `develop` with your integration branch if the registry uses a different name.
|
|
37
37
|
|
|
38
38
|
## Rollout status
|
|
39
39
|
|
|
@@ -44,7 +44,7 @@ Replace `develop` with your integration branch (e.g. `extended-port`).
|
|
|
44
44
|
| om1-website | audit | audit |
|
|
45
45
|
| pedestal-sites | audit | audit |
|
|
46
46
|
| pointme | audit | audit |
|
|
47
|
-
| hsd
|
|
47
|
+
| hsd | audit | audit (align ignoreCommand with `develop`) |
|
|
48
48
|
|
|
49
49
|
Update this table when applying the pattern.
|
|
50
50
|
|
|
@@ -68,14 +68,16 @@
|
|
|
68
68
|
"hasPinOverrides": false
|
|
69
69
|
},
|
|
70
70
|
{
|
|
71
|
-
"key": "hsd
|
|
72
|
-
"displayName": "HopSkipDrive
|
|
73
|
-
"path": "~/source/customers/hopskipdrive/hsd-
|
|
74
|
-
"
|
|
75
|
-
"
|
|
71
|
+
"key": "hsd",
|
|
72
|
+
"displayName": "HopSkipDrive",
|
|
73
|
+
"path": "~/source/customers/hopskipdrive/develop-hsd-website",
|
|
74
|
+
"productionPath": "~/source/customers/hopskipdrive/production-hsd-website",
|
|
75
|
+
"branch": "develop",
|
|
76
|
+
"productionBranch": "production",
|
|
76
77
|
"validate": "pnpm validate",
|
|
77
78
|
"workspace": false,
|
|
78
|
-
"hasPinOverrides": false
|
|
79
|
+
"hasPinOverrides": false,
|
|
80
|
+
"notes": "Deps updates run on develop checkout only. Never push production branch; human promotes production-hsd-website."
|
|
79
81
|
}
|
|
80
82
|
]
|
|
81
83
|
}
|
|
@@ -50,6 +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-
|
|
53
|
+
| hsd (`develop-hsd-website`; prod human-only: `production-hsd-website`) | yes | yes (develop) | n/a | yes |
|
|
54
54
|
|
|
55
55
|
Update this table as repos adopt the pattern.
|
|
@@ -259,16 +259,22 @@ Use the LLM draft as the starting point and apply your corrections from Step 4.
|
|
|
259
259
|
|
|
260
260
|
**Rules for the output:**
|
|
261
261
|
- Set `curatedAt` to the current ISO timestamp
|
|
262
|
-
- Only include types that have real CMS data
|
|
262
|
+
- Only include types that have real CMS data **for this brand** (do not leave SE Studio leftovers in a customer `showcase-mocks.json`)
|
|
263
263
|
- For component mocks: include only fields present in the source data
|
|
264
|
-
- For collection mocks: always include `mock` and `cards`
|
|
264
|
+
- For collection mocks: always include `mock` and `cards` when the collection needs list content
|
|
265
265
|
- Rich Text body fields must be `{ "json": <Document> }` — copy as-is
|
|
266
266
|
- Visual fields must include `width`, `height`, AND `url` — never strip `url`
|
|
267
|
+
- **`visual.url` must be an image CDN URL** (e.g. `images.ctfassets.net`). **Do not** put `vimeo.com` / `youtube.com` page URLs in image visuals — either omit the type’s curated visual (let a site video mock handle embeds) or store video only for true video modules (core factory can map video hosts to External video)
|
|
267
268
|
- Include `widthPercent` when present on media/externalVideo entries
|
|
268
269
|
- Include `otherMedia` when present — copy the full array including `url` and `widthPercent`
|
|
269
270
|
- Do NOT invent or modify content — use the real data from the examples file
|
|
270
271
|
- Include `backgroundColour` and `textColour` where the source has them
|
|
271
272
|
- For cards: include ALL fields present in source, including `backgroundColour`, `textColour`, `links`
|
|
273
|
+
- For news/author collections that use `getRelatedArticles` / `getRelatedPeople`: ensure `cards` have real titles/headings (and visuals when available). Sites should use `articlesFromShowcaseContents` / `peopleFromShowcaseContents` from `@se-studio/core-ui` when fetch returns empty in showcase
|
|
274
|
+
|
|
275
|
+
### Step 2b — No LLM key (optional)
|
|
276
|
+
|
|
277
|
+
If `OPENAI_API_KEY` / `ANTHROPIC_API_KEY` is missing, skip Step 2 and pick the highest-`fieldCompleteness` example per type from `showcase-examples.json` (prefer examples with `visual.url` when the type uses media). Write `showcase-mocks.json` directly.
|
|
272
278
|
|
|
273
279
|
### Step 6 — Verify
|
|
274
280
|
|
|
@@ -276,7 +282,8 @@ After writing, briefly confirm:
|
|
|
276
282
|
- The file is valid JSON
|
|
277
283
|
- Component and collection counts look reasonable (non-zero)
|
|
278
284
|
- Key types (Hero, main collections) have entries
|
|
279
|
-
- Visual fields include `url` properties
|
|
285
|
+
- Visual fields include `url` properties that are **image** hosts (not player pages)
|
|
286
|
+
- Spot-check related collections in the browser (News Carousel, Authors Grid) — not only Feature Split
|
|
280
287
|
|
|
281
288
|
---
|
|
282
289
|
|
|
@@ -166,7 +166,12 @@ The `IResponsiveVisual` type (from `@se-studio/core-data-types`) supports:
|
|
|
166
166
|
|
|
167
167
|
1. **Image**: Standard Contentful image asset.
|
|
168
168
|
2. **Video**: Hosted video file (mp4/webm). The component handles `<video>` tag rendering with autoplay/loop/muted attributes suitable for background videos.
|
|
169
|
-
3. **Animation**: Lottie
|
|
169
|
+
3. **Animation**: Lottie motion file. Player is chosen by **file extension**:
|
|
170
|
+
* **`.json`** (or `application/json`) → `@lottiefiles/lottie-player` (classic Lottie).
|
|
171
|
+
* **`.lottie`** → `@lottiefiles/dotlottie-react` (ThorVG / WASM). Wrong extension ⇒ wrong player.
|
|
172
|
+
* Lazy-loaded near the viewport by default; pass `loading="eager"` / `fetchPriority="high"` (e.g. `calculateImagePriority(0)` on heroes) to load immediately and preload WASM for DotLottie.
|
|
173
|
+
* Server enrich reads dimensions (and a poster when possible) so layout does not jump.
|
|
174
|
+
* Sites using `.lottie` must install `@lottiefiles/dotlottie-react` and copy WASM to `public/dotlottie/dotlottie-player.wasm` (see `ensureDotLottieWasm` / `NEXT_PUBLIC_DOTLOTTIE_WASM_URL`).
|
|
170
175
|
|
|
171
176
|
The component automatically detects the type and renders the appropriate element.
|
|
172
177
|
|
|
@@ -56,8 +56,7 @@ 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.
|
|
60
|
-
|
|
59
|
+
**Feature branches must not run smoke** — limit the `smoke` job to integration preview (`develop` + `preview`) and production (`main` / `production` + `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. Sites whose production branch is not `main` (e.g. HSD `production`): adjust ref checks in both jobs.
|
|
61
60
|
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.
|
|
62
61
|
|
|
63
62
|
```yaml
|
|
@@ -5,9 +5,9 @@ description: "Start and manage agent work sessions across se-core-product and cu
|
|
|
5
5
|
|
|
6
6
|
# Agent session workflow
|
|
7
7
|
|
|
8
|
-
Orchestrates **where** to work, **where code belongs**, and **how to isolate parallel features**.
|
|
8
|
+
Orchestrates **where** to work, **where code belongs**, and **how to isolate parallel features**. **Humans only** merge/promote to `main` / production (all customer sites + core) — agents stop at handoff.
|
|
9
9
|
|
|
10
|
-
**Registry:** [`packages/skills/references/agent-session/projects.registry.json`](../../references/agent-session/projects.registry.json) — repo paths, integration branches, hosted MCP keys.
|
|
10
|
+
**Registry:** [`packages/skills/references/agent-session/projects.registry.json`](../../references/agent-session/projects.registry.json) — repo paths, `worktreesRoot`, `productionPath` / `productionBranch`, integration branches, hosted MCP keys.
|
|
11
11
|
|
|
12
12
|
**Manifest template:** [`packages/skills/references/agent-session/manifest.template.yaml`](../../references/agent-session/manifest.template.yaml)
|
|
13
13
|
|
|
@@ -39,7 +39,7 @@ Collect or infer:
|
|
|
39
39
|
| `project_key` | Yes | From registry (`om1`, `se-core-product`, `pedestal`, …) |
|
|
40
40
|
| `primary_repo` | Yes | Absolute path from registry |
|
|
41
41
|
| `branch` | Yes | `feature/<scope>/<slug>` — see naming below |
|
|
42
|
-
| `worktree` |
|
|
42
|
+
| `worktree` | **Yes** (feature work) | Path under registry `worktreesRoot`/`<feature-slug>`. Required for `feature/*`. Null only with explicit user opt-out + `worktree_opt_out: true` |
|
|
43
43
|
|
|
44
44
|
**Default mode if unclear:** ask once. Site-specific UI/content → `site-first`. Package/framework/multi-site → `core-first`.
|
|
45
45
|
|
|
@@ -55,12 +55,14 @@ feature/<scope>/<short-slug>
|
|
|
55
55
|
| Customer site | `feature/om1/hero-redesign` |
|
|
56
56
|
| Customer monorepo shared | `feature/brightline/consent-v2` |
|
|
57
57
|
|
|
58
|
-
Integration branches (agents push feature branches here via PR or merge — **never
|
|
58
|
+
Integration branches (agents push feature branches here via PR or merge — **never production**):
|
|
59
59
|
|
|
60
|
-
| Repo type | Integration branch |
|
|
61
|
-
|
|
62
|
-
| `se-core-product` | `dev` |
|
|
63
|
-
| Customer sites | `develop` (or registry override
|
|
60
|
+
| Repo type | Integration branch | Production (human-only) |
|
|
61
|
+
|-----------|-------------------|-------------------------|
|
|
62
|
+
| `se-core-product` | `dev` | `main` |
|
|
63
|
+
| Customer sites | `develop` (or registry override) | Usually `main`; HSD uses branch **`production`** and checkout `productionPath` |
|
|
64
|
+
|
|
65
|
+
**Never** push, merge, or promote registry `productionBranch` / work in `productionPath`. Agent work uses `path` (develop checkout) only.
|
|
64
66
|
|
|
65
67
|
---
|
|
66
68
|
|
|
@@ -136,25 +138,52 @@ After the placement checklist, run the **refusal table** when the task involves
|
|
|
136
138
|
|
|
137
139
|
---
|
|
138
140
|
|
|
139
|
-
## Step 4 — Git isolation
|
|
141
|
+
## Step 4 — Git isolation (worktrees required)
|
|
142
|
+
|
|
143
|
+
**Required for all projects:** any work on a `feature/*` branch must run in a **git worktree**, not the primary `dev` / `develop` checkout. This applies to se-core-product and every customer site in the registry.
|
|
140
144
|
|
|
141
|
-
|
|
145
|
+
Primary checkouts (`path` / develop / dev) stay on the integration branch for fetch, deps, and short integration-only maintenance. Feature implementation always uses `worktreesRoot`.
|
|
146
|
+
|
|
147
|
+
### Create worktree (mandatory for feature/*)
|
|
142
148
|
|
|
143
149
|
```bash
|
|
144
|
-
cd <primary_repo>
|
|
150
|
+
cd <primary_repo> # registry path — develop/dev checkout
|
|
145
151
|
git fetch origin
|
|
146
|
-
|
|
152
|
+
mkdir -p <worktreesRoot> # from registry, e.g. ~/source/customers/hopskipdrive/worktrees
|
|
153
|
+
git worktree add <worktreesRoot>/<feature-slug> -b <branch> origin/<integration-branch>
|
|
154
|
+
cd <worktreesRoot>/<feature-slug>
|
|
147
155
|
```
|
|
148
156
|
|
|
149
|
-
|
|
157
|
+
| Project key | worktreesRoot |
|
|
158
|
+
|-------------|---------------|
|
|
159
|
+
| `se-core-product` | `~/source/se/worktrees` |
|
|
160
|
+
| `se2026` | `~/source/se/worktrees` |
|
|
161
|
+
| `brightline` | `~/source/customers/brightline/worktrees` |
|
|
162
|
+
| `om1` | `~/source/customers/om1/worktrees` |
|
|
163
|
+
| `pointme` | `~/source/customers/pointme/worktrees` |
|
|
164
|
+
| `pedestal` | `~/source/customers/pedestal/worktrees` |
|
|
165
|
+
| `hsd` | `~/source/customers/hopskipdrive/worktrees` |
|
|
166
|
+
|
|
167
|
+
**Manifest gate:** set `worktree:` to the worktree path before coding. Do all edits, installs, tests, and commits from that path. Do not leave the primary checkout on a feature branch.
|
|
168
|
+
|
|
169
|
+
### Gate — refuse primary-checkout feature work
|
|
150
170
|
|
|
151
|
-
|
|
171
|
+
If you are about to implement a feature and `worktree` is null without `worktree_opt_out: true`:
|
|
172
|
+
|
|
173
|
+
1. **Stop** — create the worktree (or ask the user to confirm opt-out)
|
|
174
|
+
2. Do not edit product code on the primary develop/dev checkout for a feature branch
|
|
175
|
+
|
|
176
|
+
### Opt-out (narrow)
|
|
177
|
+
|
|
178
|
+
Only when the user **explicitly** says work in place / no worktree **in the current conversation**:
|
|
152
179
|
|
|
153
180
|
```bash
|
|
154
|
-
|
|
181
|
+
cd <primary_repo>
|
|
182
|
+
git fetch origin
|
|
183
|
+
git checkout -b <branch> origin/<integration-branch>
|
|
155
184
|
```
|
|
156
185
|
|
|
157
|
-
|
|
186
|
+
Set `worktree: null` and `worktree_opt_out: true` in the manifest. Do not invent an opt-out.
|
|
158
187
|
|
|
159
188
|
### CMS parallel sessions
|
|
160
189
|
|
|
@@ -209,7 +238,7 @@ Agents may push to:
|
|
|
209
238
|
- `dev` / `develop` (via feature branch merge or direct if user prefers)
|
|
210
239
|
- `feature/*` branches
|
|
211
240
|
|
|
212
|
-
Agents must **never** push to `main`, `master`, or
|
|
241
|
+
Agents must **never** push to `main`, `master`, `production`, or any registry `productionBranch`. Agents must **never** ship from a registry `productionPath` (e.g. HSD `~/source/customers/hopskipdrive/production-hsd-website`).
|
|
213
242
|
|
|
214
243
|
**Preferred:** open a **draft PR** targeting the integration branch:
|
|
215
244
|
|
|
@@ -223,7 +252,7 @@ If `gh` is unavailable or user prefers direct push, push `feature/*` and note in
|
|
|
223
252
|
|
|
224
253
|
## Step 8 — Handoff (production-ready)
|
|
225
254
|
|
|
226
|
-
When work is ready for human review / production promotion, **stop** — do not merge to `main
|
|
255
|
+
When work is ready for human review / production promotion, **stop** — do not merge to `main`, `production`, or any production branch. **Production promotion is human-only** for core and every customer site.
|
|
227
256
|
|
|
228
257
|
1. Set manifest `status: ready_for_review`
|
|
229
258
|
2. Deliver handoff using template below
|
|
@@ -255,8 +284,9 @@ When work is ready for human review / production promotion, **stop** — do not
|
|
|
255
284
|
2. <customer pnpm update @se-studio/...>
|
|
256
285
|
3. <customer PR>
|
|
257
286
|
|
|
258
|
-
### Production
|
|
259
|
-
Ready for you to merge to `main` / promote Vercel.
|
|
287
|
+
### Production (human-only)
|
|
288
|
+
Ready for you to merge to production (`main` or site `productionBranch`) / promote Vercel.
|
|
289
|
+
Agent will not push production or use productionPath checkouts.
|
|
260
290
|
```
|
|
261
291
|
|
|
262
292
|
---
|
|
@@ -289,20 +319,20 @@ Feature: hero-redesign
|
|
|
289
319
|
Branch: feature/om1/hero-redesign
|
|
290
320
|
```
|
|
291
321
|
|
|
292
|
-
Agent must load this skill, write manifest, run placement checklist,
|
|
322
|
+
Agent must load this skill, write manifest (with `worktree` path), run placement checklist, create the worktree, then proceed.
|
|
293
323
|
|
|
294
324
|
---
|
|
295
325
|
|
|
296
326
|
## Quick reference — project keys
|
|
297
327
|
|
|
298
|
-
| key | Integration
|
|
299
|
-
|
|
300
|
-
| `se-core-product` | `dev` | core monorepo |
|
|
301
|
-
| `se2026` | `develop` | customer |
|
|
302
|
-
| `brightline` | `develop` | customer monorepo |
|
|
303
|
-
| `om1` | `develop` | customer |
|
|
304
|
-
| `pointme` | `develop` | customer |
|
|
305
|
-
| `pedestal` | `develop` | customer monorepo |
|
|
306
|
-
| `hsd-
|
|
307
|
-
|
|
308
|
-
Full paths
|
|
328
|
+
| key | Integration | Production (human-only) | Type |
|
|
329
|
+
|-----|-------------|-------------------------|------|
|
|
330
|
+
| `se-core-product` | `dev` | `main` | core monorepo |
|
|
331
|
+
| `se2026` | `develop` | `main` | customer |
|
|
332
|
+
| `brightline` | `develop` | `main` | customer monorepo |
|
|
333
|
+
| `om1` | `develop` | `main` | customer |
|
|
334
|
+
| `pointme` | `develop` | `main` | customer |
|
|
335
|
+
| `pedestal` | `develop` | `main` | customer monorepo |
|
|
336
|
+
| `hsd` | `develop` (`develop-hsd-website`) | `production` (`production-hsd-website`) | customer |
|
|
337
|
+
|
|
338
|
+
Full paths (`path`, `worktreesRoot`, `productionPath`), MCP keys: `projects.registry.json`.
|
|
@@ -11,7 +11,7 @@ Update npm dependencies to **latest** in se-core-product and consumer repos that
|
|
|
11
11
|
|
|
12
12
|
**Default:** Process **one repo per invocation**. At the end, summarize changes and offer the next project.
|
|
13
13
|
|
|
14
|
-
**Never:** push to `main`/`master
|
|
14
|
+
**Never:** push to `main`/`master`/`production` or any production branch; promote from production checkouts (e.g. HSD `production-hsd-website`); bump Next to 16; bump Node to 25+; use `pnpm patch` / `patchedDependencies` / `patches/`; bypass or remove `minimumReleaseAge`; **hand-edit `package.json` dependency versions** (use `pnpm update` instead). Production promotion is **human-only** for all customer sites.
|
|
15
15
|
|
|
16
16
|
---
|
|
17
17
|
|
|
@@ -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
|
|
54
|
+
| `hsd` | HopSkipDrive | `develop` |
|
|
55
55
|
|
|
56
56
|
User may name a key (`update deps in om1`) or ask to run through all projects sequentially.
|
|
57
57
|
|
|
58
|
-
**HSD
|
|
58
|
+
**HSD:** Agents update **only** `~/source/customers/hopskipdrive/develop-hsd-website` on `develop`. Production is human-only: branch `production`, checkout `~/source/customers/hopskipdrive/production-hsd-website` — never push or promote from there. Prefer targeted `@se-studio/*` bumps per `work/tracker.yaml` rollout before full `pnpm update -r --latest`.
|
|
59
59
|
|
|
60
60
|
---
|
|
61
61
|
|
|
@@ -69,9 +69,10 @@ pnpm -v # must be v11.x
|
|
|
69
69
|
In the target repo:
|
|
70
70
|
|
|
71
71
|
1. Confirm the path from the registry exists; abort if missing.
|
|
72
|
-
2. `
|
|
73
|
-
3.
|
|
74
|
-
4.
|
|
72
|
+
2. Use the **primary integration checkout** (`path` + `branch` from deps-update registry) — deps rollouts are integration-branch maintenance, not feature work. Do not create a feature worktree unless the user asked for a feature-branch deps experiment.
|
|
73
|
+
3. `git fetch origin && git checkout <branch> && git pull`
|
|
74
|
+
4. Working tree must be clean (or user explicitly approves stash).
|
|
75
|
+
5. Record `pnpm outdated -r` output for the commit summary.
|
|
75
76
|
|
|
76
77
|
---
|
|
77
78
|
|
|
@@ -206,7 +207,7 @@ git push origin <branch>
|
|
|
206
207
|
|
|
207
208
|
- se-core-product → `dev`
|
|
208
209
|
- All consumer repos → `develop`
|
|
209
|
-
- **Never** push to `main`/`master`
|
|
210
|
+
- **Never** push to `main`/`master`/`production` (or any production branch / production checkout)
|
|
210
211
|
|
|
211
212
|
---
|
|
212
213
|
|
|
@@ -99,7 +99,7 @@ Default mode for this repo: **site-first**.
|
|
|
99
99
|
### Branch policy
|
|
100
100
|
|
|
101
101
|
- Agents may commit and push **`develop`** and **`feature/*`** only.
|
|
102
|
-
- **Never** push to `main`, `master`, or production — human-only.
|
|
102
|
+
- **Never** push to `main`, `master`, `production`, or any production branch — human-only for all customer sites.
|
|
103
103
|
- Prefer **draft PRs** to `develop` over direct pushes when `gh` is available.
|
|
104
104
|
|
|
105
105
|
### Core vs customer placement
|
|
@@ -112,11 +112,11 @@ When work depends on a new `@se-studio/*` npm release: release from `se-core-pro
|
|
|
112
112
|
|
|
113
113
|
### Parallel features
|
|
114
114
|
|
|
115
|
-
One feature = one `feature/<scope>/<slug>` branch.
|
|
115
|
+
One feature = one `feature/<scope>/<slug>` branch. **Git worktree required** for feature work (registry `worktreesRoot`/`<feature-slug>`). CMS: `--session <feature-slug>`. Manifest: `~/source/se/se-core-product/work/active/<feature>.yaml` with `worktree:` set.
|
|
116
116
|
|
|
117
117
|
### Production handoff
|
|
118
118
|
|
|
119
|
-
Agents stop at handoff — they do not merge to `main
|
|
119
|
+
Agents stop at handoff — they do not merge to `main` / production or promote production deploys. Human-only. See skill `site-workflows-agent-session` Step 8.
|
|
120
120
|
|
|
121
121
|
## CMS editing (cms-edit)
|
|
122
122
|
|
|
@@ -19,7 +19,7 @@ Remove **dead weight** from an SE Studio site repo without changing product beha
|
|
|
19
19
|
|
|
20
20
|
**Default:** Plan mode first — present a classified audit table before deleting anything.
|
|
21
21
|
|
|
22
|
-
**Never:** push to `main`/`master
|
|
22
|
+
**Never:** push to `main`/`master`/`production` or promote production (human-only for all customer sites); delete `docs/cms-editor/` or committed `cms-edit/*/editor-pack/` without explicit user request; fix Dependabot alerts unless the user asks.
|
|
23
23
|
|
|
24
24
|
---
|
|
25
25
|
|
|
@@ -153,7 +153,7 @@ pnpm validate # or repo-specific validate from AGENTS.md
|
|
|
153
153
|
|
|
154
154
|
Commit on integration branch only. Suggested message: `chore: remove stale scripts, docs, and tooling`.
|
|
155
155
|
|
|
156
|
-
Hand off production promotion to the human — never push `main
|
|
156
|
+
Hand off production promotion to the human — never push `main` / `production` or use production checkouts to ship.
|
|
157
157
|
|
|
158
158
|
---
|
|
159
159
|
|