@se-studio/skills 1.6.9 → 1.7.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 +12 -0
- package/package.json +1 -1
- package/references/agent-session/cms-edit-prod-merge.md +35 -0
- package/references/agent-session/customer-agents-block.md +3 -4
- package/references/deps-update/projects.registry.json +1 -1
- package/skills/se-marketing-sites-create-page/SKILL.md +1 -1
- package/skills/se-marketing-sites-redirects/SKILL.md +7 -7
- package/skills/se-marketing-sites-smoke-test-setup/SKILL.md +1 -1
- package/skills/site-workflows-agent-session/SKILL.md +13 -12
- package/skills/site-workflows-deps-update/SKILL.md +7 -6
- package/skills/site-workflows-new-project/SKILL.md +13 -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.7.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 8e94be2: Support Next.js 16.3 while remaining compatible with Next.js 15.5 (peer `>=15.5.0 <17`). CMS webhooks call `revalidateTag(tag, { expire: 0 })` so published content is not served stale. Template apps use `proxy.ts` on Next 16. Not-found metadata uses `title.absolute` so layout `title.template` does not produce duplicated site names.
|
|
8
|
+
|
|
9
|
+
## 1.6.10
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- 41cfadb: Allow agents to merge customer production only for cms-edit-only diffs (host package / editor-pack), one site at a time with a live health check.
|
|
14
|
+
|
|
3
15
|
## 1.6.9
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
package/package.json
CHANGED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# cms-edit-only production merge
|
|
2
|
+
|
|
3
|
+
The **only** agent exception to “no production git”. Marketing site source, core `main`, and Vercel CLI deploys stay human-only.
|
|
4
|
+
|
|
5
|
+
## When it applies
|
|
6
|
+
|
|
7
|
+
All of the following must be true:
|
|
8
|
+
|
|
9
|
+
1. The user asked to ship **hosted cms-edit** (host package bump, editor-pack-only, or continue a cms-edit host rollout).
|
|
10
|
+
2. Any required `@se-studio/contentful-cms` version is **already on npm**.
|
|
11
|
+
3. The merge is **customer** `develop` → that site’s production branch (`main`, HSD **`production`**). Never `se-core-product` `main`.
|
|
12
|
+
4. `git diff --name-only origin/<productionBranch>...origin/develop` is **only**:
|
|
13
|
+
- `cms-edit/**`
|
|
14
|
+
- root `package.json` and/or `pnpm-lock.yaml` (and `pnpm-workspace.yaml` only if it already listed the package)
|
|
15
|
+
5. Those package/lock changes are **only** `@se-studio/contentful-cms` (plus lockfile transitives). No `src/`, `apps/` marketing, smoke, server-config, or other dependency bumps.
|
|
16
|
+
6. Merge **one customer repo at a time**. Wait for that repo’s cms-edit Vercel **production** deployment **Ready**. Then check live `https://<host>/api/health`: `ok`, `cmsEdit.version` matches npm, `redis` and `oauth` checks ok. Probe `/.well-known/oauth-authorization-server` (200). **Stop at the first failure.**
|
|
17
|
+
|
|
18
|
+
## How to merge
|
|
19
|
+
|
|
20
|
+
From the **develop** checkout (not `productionPath`):
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
git fetch origin
|
|
24
|
+
git diff --name-only origin/<productionBranch>...origin/develop # must pass the path gate
|
|
25
|
+
gh pr create --base <productionBranch> --head develop --title "cms-edit: <version or editor-pack>"
|
|
26
|
+
# or ff-only merge via gh
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Do **not** use HSD `production-hsd-website` (or any `productionPath`) as the working tree. Do **not** run `pnpm cms-edit:deploy`, `vercel deploy`, or `./scripts/deploy-cms-edit-host.sh`.
|
|
30
|
+
|
|
31
|
+
## After a successful host
|
|
32
|
+
|
|
33
|
+
Reconnect Grok `/mcps` → `i` is an editor step if OAuth tokens were dead — not a substitute for the health check.
|
|
34
|
+
|
|
35
|
+
If the diff is not cms-edit-only, **stop and hand off** — no production merge.
|
|
@@ -6,9 +6,8 @@ Default mode for this repo: **site-first**.
|
|
|
6
6
|
|
|
7
7
|
### Branch policy
|
|
8
8
|
|
|
9
|
-
- Agents may commit and push **`develop`** and **`feature
|
|
10
|
-
- **Never**
|
|
11
|
-
- Do **not** ship from a production checkout (e.g. HSD `~/source/customers/hopskipdrive/production-hsd-website`). Use the develop checkout only.
|
|
9
|
+
- Agents may commit and push **`develop`** and **`feature/*`**. Customer production (`main`, HSD `production`) only when the **cms-edit-only** gate passes (`se-core-product` `packages/skills/references/agent-session/cms-edit-prod-merge.md`).
|
|
10
|
+
- **Never** merge marketing `src/` to production. **Never** ship from a production checkout (e.g. HSD `production-hsd-website`). Use the develop checkout only.
|
|
12
11
|
- Prefer **draft PRs** to `develop` over direct pushes when `gh` is available.
|
|
13
12
|
|
|
14
13
|
### Core vs customer placement
|
|
@@ -56,4 +55,4 @@ Never hand-edit `package.json` dependency versions.
|
|
|
56
55
|
|
|
57
56
|
### Production handoff
|
|
58
57
|
|
|
59
|
-
When
|
|
58
|
+
When **marketing** work is ready, agents **stop** and hand off. **cms-edit-only** host rollouts may merge `develop` → production one site at a time (health-check, stop at first failure). No `vercel deploy`. See skill Step 7–8 and `cms-edit-prod-merge.md`.
|
|
@@ -121,7 +121,7 @@ If a route needs a different layout (e.g. no header/footer), create `layout.tsx`
|
|
|
121
121
|
|
|
122
122
|
## A/B Test Variant Route (`page-test`)
|
|
123
123
|
|
|
124
|
-
When A/B testing is enabled, variant pages are served through a `/page-test/[...slugs]` route that the middleware rewrites to. This route **must** use:
|
|
124
|
+
When A/B testing is enabled, variant pages are served through a `/page-test/[...slugs]` route that the proxy (Next 16) or middleware (Next 15) rewrites to. This route **must** use:
|
|
125
125
|
|
|
126
126
|
- **`generatePageTestMetadata`** (not `generatePageMetadata`) so that `robots`/`indexed` comes from the **canonical/control** page — variant entries are intentionally `indexed: false` in Contentful.
|
|
127
127
|
- **`generatePageTest`** (not `generatePage`) so breadcrumbs, `model.href`, and JSON-LD use the **control/canonical** path while variant **content** still renders.
|
|
@@ -11,7 +11,7 @@ This skill adds the ability for **non-technical content editors** to manage redi
|
|
|
11
11
|
- Editors create `redirect` entries (they can **pick** existing Pages/Articles/etc. via the single From/To internal pickers or type raw paths).
|
|
12
12
|
- On publish, a Contentful webhook calls your Vercel **Deploy Hook**.
|
|
13
13
|
- The next build fetches the current redirects (via the normal CDA helpers), runs `buildRedirectMap`, and writes a tiny static file.
|
|
14
|
-
- Your `middleware.ts` imports that file and does the redirect **synchronously with zero runtime cost**.
|
|
14
|
+
- Your `proxy.ts` (Next 16) or `middleware.ts` (Next 15) imports that file and does the redirect **synchronously with zero runtime cost**.
|
|
15
15
|
- Propagation time = normal Vercel build (usually 1–3 minutes). Robust, no extra tokens or Edge Config required.
|
|
16
16
|
|
|
17
17
|
A faster "seconds" path (Edge Config) is explicitly **not** included in v1 per product direction — the model and helpers are forward-compatible if you add it later.
|
|
@@ -133,19 +133,19 @@ Wire it into the build:
|
|
|
133
133
|
|
|
134
134
|
(You can also call it from a `next.config.ts` `webpack` hook or a turbo pipeline step — whatever is consistent with how you generate the A/B static data.)
|
|
135
135
|
|
|
136
|
-
### 4.2 Static
|
|
136
|
+
### 4.2 Static proxy (zero runtime work)
|
|
137
137
|
|
|
138
|
-
|
|
138
|
+
On Next 16 create `src/proxy.ts` (Next 15: `src/middleware.ts` + `export function middleware`). Canonical template: `apps/example-empty/src/proxy.ts`.
|
|
139
139
|
|
|
140
140
|
```ts
|
|
141
141
|
import { NextResponse, type NextRequest } from 'next/server';
|
|
142
|
-
import { redirects } from '
|
|
142
|
+
import { redirects } from '@/generated/redirects';
|
|
143
143
|
|
|
144
144
|
// If you also use A/B testing static middleware, import and compose here.
|
|
145
145
|
import { createStaticAbTestMiddleware } from '@se-studio/ab-testing/middleware';
|
|
146
|
-
// import { testsByPath } from '
|
|
146
|
+
// import { testsByPath } from '@/generated/abTests';
|
|
147
147
|
|
|
148
|
-
export async function
|
|
148
|
+
export async function proxy(request: NextRequest) {
|
|
149
149
|
const { pathname } = request.nextUrl;
|
|
150
150
|
|
|
151
151
|
// 1. Redirects first (cheap object lookup)
|
|
@@ -177,7 +177,7 @@ export const config = {
|
|
|
177
177
|
};
|
|
178
178
|
```
|
|
179
179
|
|
|
180
|
-
If you already have a `middleware.ts` for A/B or other things, just add the redirect check at the very top (before any other logic).
|
|
180
|
+
If you already have a `proxy.ts` (or Next 15 `middleware.ts`) for A/B or other things, just add the redirect check at the very top (before any other logic).
|
|
181
181
|
|
|
182
182
|
### 4.2.1 Redirects and sitemaps
|
|
183
183
|
|
|
@@ -370,7 +370,7 @@ Restricts request-time Next.js APIs in:
|
|
|
370
370
|
|
|
371
371
|
Banned: `next/headers` (headers, cookies, draftMode), `connection` from `next/server`, `unstable_noStore` from `next/cache`. `unstable_cache` and other `next/cache` exports remain allowed.
|
|
372
372
|
|
|
373
|
-
Dynamic by design (no restriction): `(cms-dev)`, `preview`, `api`, `middleware.ts
|
|
373
|
+
Dynamic by design (no restriction): `(cms-dev)`, `preview`, `api`, `proxy.ts` (Next 16) / `middleware.ts` (Next 15).
|
|
374
374
|
|
|
375
375
|
Lint is necessary but not sufficient — route policy + production smoke still required.
|
|
376
376
|
|
|
@@ -5,7 +5,7 @@ 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**. **Humans only** merge
|
|
8
|
+
Orchestrates **where** to work, **where code belongs**, and **how to isolate parallel features**. **Humans only** merge marketing production and core `main` — except **cms-edit-only** customer merges (reference `cms-edit-prod-merge.md`).
|
|
9
9
|
|
|
10
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
|
|
|
@@ -57,12 +57,12 @@ feature/<scope>/<short-slug>
|
|
|
57
57
|
|
|
58
58
|
Integration branches (agents push feature branches here via PR or merge — **never production**):
|
|
59
59
|
|
|
60
|
-
| Repo type | Integration branch | Production
|
|
61
|
-
|
|
62
|
-
| `se-core-product` | `dev` | `main` |
|
|
63
|
-
| Customer sites | `develop` (or registry override) | Usually `main`; HSD
|
|
60
|
+
| Repo type | Integration branch | Production |
|
|
61
|
+
|-----------|-------------------|------------|
|
|
62
|
+
| `se-core-product` | `dev` | `main` — **never** agent |
|
|
63
|
+
| Customer sites | `develop` (or registry override) | Usually `main`; HSD **`production`**. Marketing: human-only. **cms-edit-only:** agents may merge — see below |
|
|
64
64
|
|
|
65
|
-
**Never**
|
|
65
|
+
**Never** work in `productionPath`. Agent work uses `path` (develop checkout) only.
|
|
66
66
|
|
|
67
67
|
---
|
|
68
68
|
|
|
@@ -253,8 +253,9 @@ Agents may push to:
|
|
|
253
253
|
|
|
254
254
|
- `dev` / `develop` (via feature branch merge or direct if user prefers)
|
|
255
255
|
- `feature/*` branches
|
|
256
|
+
- Customer production (`main`, HSD `production`) **only** when the [cms-edit-only gate](../../references/agent-session/cms-edit-prod-merge.md) passes
|
|
256
257
|
|
|
257
|
-
Agents must **never** push
|
|
258
|
+
Agents must **never** push **se-core-product** `main`, or customer production when the diff is not cms-edit-only. Agents must **never** ship from a registry `productionPath` (e.g. HSD `~/source/customers/hopskipdrive/production-hsd-website`).
|
|
258
259
|
|
|
259
260
|
**Preferred:** open a **draft PR** targeting the integration branch:
|
|
260
261
|
|
|
@@ -268,7 +269,7 @@ If `gh` is unavailable or user prefers direct push, push `feature/*` and note in
|
|
|
268
269
|
|
|
269
270
|
## Step 8 — Handoff (production-ready)
|
|
270
271
|
|
|
271
|
-
When work is ready for
|
|
272
|
+
When **marketing** work is ready for production, **stop** — do not merge to `main` / `production`. **Exception:** cms-edit-only (Step 7 + [`cms-edit-prod-merge.md`](../../references/agent-session/cms-edit-prod-merge.md)) — merge one customer repo at a time, wait for cms-edit host Ready, verify `/api/health`, stop at the first failure.
|
|
272
273
|
|
|
273
274
|
1. Set manifest `status: ready_for_review`
|
|
274
275
|
2. Deliver handoff using template below
|
|
@@ -300,9 +301,9 @@ When work is ready for human review / production promotion, **stop** — do not
|
|
|
300
301
|
2. <customer pnpm update @se-studio/...>
|
|
301
302
|
3. <customer PR>
|
|
302
303
|
|
|
303
|
-
### Production
|
|
304
|
-
|
|
305
|
-
|
|
304
|
+
### Production
|
|
305
|
+
Marketing: human-only (`main` or site `productionBranch`).
|
|
306
|
+
cms-edit-only: agent may merge per `cms-edit-prod-merge.md` (not `productionPath`, not `vercel deploy`).
|
|
306
307
|
```
|
|
307
308
|
|
|
308
309
|
---
|
|
@@ -341,7 +342,7 @@ Agent must load this skill, write manifest (with `worktree` path), run placement
|
|
|
341
342
|
|
|
342
343
|
## Quick reference — project keys
|
|
343
344
|
|
|
344
|
-
| key | Integration | Production
|
|
345
|
+
| key | Integration | Production | Type |
|
|
345
346
|
|-----|-------------|-------------------------|------|
|
|
346
347
|
| `se-core-product` | `dev` | `main` | core monorepo |
|
|
347
348
|
| `se2026` | `develop` | `main` | customer |
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: site-workflows-deps-update
|
|
3
|
-
description: "Update npm dependencies to latest across se-core-product and consumer SE Studio sites, one repo at a time. Pins Next.js
|
|
3
|
+
description: "Update npm dependencies to latest across se-core-product and consumer SE Studio sites, one repo at a time. Pins Next.js 16.3 and Node 24, updates pnpm to latest 11.x, enforces no pnpm patches everywhere. Validates, commits, and pushes to dev/develop. PointMe stays on Next 15.5 until its dedicated upgrade. Use when asked to update outdated packages or bump dependencies."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# SE dependency update (one project at a time)
|
|
@@ -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`/`production` or any production branch; promote from production checkouts (e.g. HSD `production-hsd-website`); bump Next to
|
|
14
|
+
**Never:** push to `main`/`master`/`production` or any production branch; promote from production checkouts (e.g. HSD `production-hsd-website`); bump Next to 17; 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. **PointMe:** keep `overrides.next` on `^15.5.x` until the Next 16 site wave — do not pull it to 16 during a routine deps update.
|
|
15
15
|
|
|
16
16
|
---
|
|
17
17
|
|
|
@@ -101,15 +101,16 @@ minimumReleaseAgeExclude:
|
|
|
101
101
|
- '@se-studio/*'
|
|
102
102
|
|
|
103
103
|
overrides:
|
|
104
|
-
next: ^
|
|
104
|
+
next: ^16.3.1
|
|
105
105
|
'@types/node': ^24.13.2
|
|
106
106
|
```
|
|
107
107
|
|
|
108
108
|
- **`minimumReleaseAge: 1440`** — do not install packages published in the last 24 hours (supply-chain guard).
|
|
109
109
|
- **`@se-studio/*` exclude** — our own packages may update immediately after npm publish.
|
|
110
110
|
- **Keep repo-specific additional excludes** when present (e.g. vitest pins in se-core-product, `@emnapi/runtime` in se-website-2026, PointMe `mapbox-gl` / `react-day-picker` overrides).
|
|
111
|
+
- **PointMe exception:** leave `next: ^15.5.x` until that site’s Next 16 wave.
|
|
111
112
|
|
|
112
|
-
`pnpm update -r --latest` would bump `next`
|
|
113
|
+
`pnpm update -r --latest` would bump `next` past the supported 16.3 line and `@types/node` → 26 without the overrides block. The overrides prevent that.
|
|
113
114
|
|
|
114
115
|
**Never bypass `minimumReleaseAge`** during dependency updates. Do not remove the block, comment it out, or use undocumented pnpm flags. If a non-`@se-studio` package was published within 24 hours, it stays at the current version until it ages out — note that in the report and re-run later if needed.
|
|
115
116
|
|
|
@@ -162,7 +163,7 @@ pnpm update -r \
|
|
|
162
163
|
Safety re-pin after update:
|
|
163
164
|
|
|
164
165
|
```bash
|
|
165
|
-
pnpm update -r next@^
|
|
166
|
+
pnpm update -r next@^16.3.1 @types/node@^24
|
|
166
167
|
pnpm install
|
|
167
168
|
```
|
|
168
169
|
|
|
@@ -217,7 +218,7 @@ Include in the summary:
|
|
|
217
218
|
|
|
218
219
|
- Major dependency bumps (from the Step 1 audit diff)
|
|
219
220
|
- pnpm version: before → after
|
|
220
|
-
- Confirmed pins: Next 15.x, Node 24, `@types/node` ^24
|
|
221
|
+
- Confirmed pins: Next 16.3.x (PointMe: Next 15.5.x until its upgrade), Node 24, `@types/node` ^24
|
|
221
222
|
- Confirmed `minimumReleaseAge: 1440` and `@se-studio/*` exclude present
|
|
222
223
|
- Packages still outdated because they are inside the 24-hour release window (if any)
|
|
223
224
|
- Patches check bootstrapped (yes/no)
|
|
@@ -76,14 +76,24 @@ Write `AGENTS.md` at the project root. Fill in the user's email address (from me
|
|
|
76
76
|
Include the **agent session workflow block** from [`packages/skills/references/agent-session/customer-agents-block.md`](../../references/agent-session/customer-agents-block.md) (branch policy, placement, parallel features, handoff).
|
|
77
77
|
|
|
78
78
|
```markdown
|
|
79
|
-
|
|
79
|
+
<!-- BEGIN:nextjs-agent-rules -->
|
|
80
80
|
|
|
81
|
-
|
|
81
|
+
# This is NOT the Next.js you know
|
|
82
|
+
|
|
83
|
+
This version has breaking changes — APIs, conventions, and file structure may all differ from your training data. Read the relevant guide in `node_modules/next/dist/docs/` (resolved from this file's directory; in monorepos the `next` package may not be visible from the repo root) before writing any code. Heed deprecation notices.
|
|
84
|
+
|
|
85
|
+
This block is written and re-added by `next dev` — verify at `node_modules/next/dist/server/lib/generate-agent-files.js`. Removing it from a diff only re-creates the uncommitted change; committing it with your work keeps the tree clean.
|
|
86
|
+
|
|
87
|
+
<!-- END:nextjs-agent-rules -->
|
|
88
|
+
|
|
89
|
+
<!-- BEGIN:se-studio-package-rules -->
|
|
82
90
|
|
|
83
91
|
# @se-studio packages: ALWAYS read docs before coding
|
|
84
92
|
|
|
85
93
|
Before using any `@se-studio/*` package, read the relevant `node_modules/@se-studio/<package>/docs/llms.md`.
|
|
86
94
|
|
|
95
|
+
<!-- END:se-studio-package-rules -->
|
|
96
|
+
|
|
87
97
|
# userEmail
|
|
88
98
|
The user's email address is [USER_EMAIL].
|
|
89
99
|
|
|
@@ -116,7 +126,7 @@ One feature = one `feature/<scope>/<slug>` branch. **Git worktree required** for
|
|
|
116
126
|
|
|
117
127
|
### Production handoff
|
|
118
128
|
|
|
119
|
-
Agents stop at handoff
|
|
129
|
+
Agents stop at handoff for **marketing** production. cms-edit-only host merges: see `site-workflows-agent-session` and `cms-edit-prod-merge.md`.
|
|
120
130
|
|
|
121
131
|
## CMS editing (cms-edit)
|
|
122
132
|
|
|
@@ -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
|
|
22
|
+
**Never:** push marketing production or use production checkouts (cms-edit-only gate is in `cms-edit-prod-merge.md`); 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
|
|
156
|
+
Hand off **marketing** production. Do not use production checkouts. cms-edit-only: `cms-edit-prod-merge.md`.
|
|
157
157
|
|
|
158
158
|
---
|
|
159
159
|
|