@se-studio/skills 1.6.1 → 1.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @se-studio/skills
2
2
 
3
+ ## 1.6.2
4
+
5
+ ### Patch Changes
6
+
7
+ - 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.
8
+
3
9
  ## 1.6.1
4
10
 
5
11
  ### Patch Changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@se-studio/skills",
3
- "version": "1.6.1",
3
+ "version": "1.6.2",
4
4
  "description": "SE Studio agent skills for marketing site development with Contentful CMS",
5
5
  "repository": {
6
6
  "type": "git",
@@ -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
- - Use a **git worktree** when multiple features touch this repo at once
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`. See skill Step 8.
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
- worktree: null # e.g. ~/source/worktrees/om1-my-feature-slug — required when parallel features share a repo
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-extended-port",
72
- "displayName": "HopSkipDrive Extended Port",
73
- "path": "~/source/customers/hopskipdrive/hsd-extended-port",
74
- "branch": "extended-port",
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
- "contentfulSpaceIds": ["gqa3p93n5wse"],
77
- "hostedMcp": ["cms-edit-hsd"],
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 extended-port | `extended-port` | `main` (if production checks enabled) |
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 (e.g. `extended-port`).
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-extended-port | audit | n/a |
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-extended-port",
72
- "displayName": "HopSkipDrive Extended Port",
73
- "path": "~/source/customers/hopskipdrive/hsd-extended-port",
74
- "branch": "extended-port",
75
- "wipNote": "Parity port complete (2026-07-07). Work on extended-port only — not develop/production until cutover. Rollouts tracked in work/tracker.yaml.",
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-extended-port | yes | yes (extended-port) | n/a | yes |
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
 
@@ -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. Non-`develop` integration branches (e.g. HSD `extended-port`): adjust ref checks in both jobs.
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**. Human merges to `main` / production — agents stop at handoff.
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` | Optional | Separate checkout path when parallel features share a repo |
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 `main`**):
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, e.g. `extended-port`) |
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
- ### Single feature in repo
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
- git checkout -b <branch> origin/<integration-branch>
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
- ### Parallel features in same repo
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
- Use a **git worktree** per feature:
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
- git worktree add <worktree-path> -b <branch> origin/<integration-branch>
181
+ cd <primary_repo>
182
+ git fetch origin
183
+ git checkout -b <branch> origin/<integration-branch>
155
184
  ```
156
185
 
157
- Record `worktree` in manifest. Do not commit unrelated features on the same branch.
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 production branches.
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. Agent will not push production.
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, confirm branch/worktree, then proceed.
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 branch | Type |
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-extended-port` | `extended-port` | customer |
307
-
308
- Full paths and MCP keys: `projects.registry.json`.
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`; 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).
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-extended-port` | HopSkipDrive Extended Port | `extended-port` |
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 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`.
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. `git fetch origin && git checkout <branch> && git pull`
73
- 3. Working tree must be clean (or user explicitly approves stash).
74
- 4. Record `pnpm outdated -r` output for the commit summary.
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. Use git worktrees for parallel work on this repo. CMS: `--session <feature-slug>`. Manifest: `~/source/se/se-core-product/work/active/<feature>.yaml`.
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`. See skill `site-workflows-agent-session` Step 8.
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`; delete `docs/cms-editor/` or committed `cms-edit/*/editor-pack/` without explicit user request; fix Dependabot alerts unless the user asks.
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