@se-studio/skills 1.6.10 → 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 CHANGED
@@ -1,5 +1,11 @@
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
+
3
9
  ## 1.6.10
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.10",
3
+ "version": "1.7.0",
4
4
  "description": "SE Studio agent skills for marketing site development with Contentful CMS",
5
5
  "repository": {
6
6
  "type": "git",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "canonicalPatchesScript": "~/source/se/se-core-product/scripts/check-no-pnpm-patches.mjs",
3
3
  "pinOverrides": {
4
- "next": "^15.5.21",
4
+ "next": "^16.3.1",
5
5
  "@types/node": "^24.13.3"
6
6
  },
7
7
  "pnpm": {
@@ -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 middleware (zero runtime work)
136
+ ### 4.2 Static proxy (zero runtime work)
137
137
 
138
- Create `middleware.ts` at the root of your Next app (alongside `next.config.ts`):
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 './src/generated/redirects'; // the file we just generated
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 './src/generated/abTests';
146
+ // import { testsByPath } from '@/generated/abTests';
147
147
 
148
- export async function middleware(request: NextRequest) {
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
 
@@ -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 15 and Node 24, updates pnpm to latest 11.x, enforces no pnpm patches everywhere. Validates, commits, and pushes to dev/develop. Use when asked to update outdated packages or bump dependencies."
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 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.
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: ^15.5.19
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` → 16 and `@types/node` → 26 without the overrides block. The overrides prevent that.
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@^15 @types/node@^24
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
- # Next.js: ALWAYS read docs before coding
79
+ <!-- BEGIN:nextjs-agent-rules -->
80
80
 
81
- Before any Next.js work, find and read the relevant doc in `node_modules/next/dist/docs/`. Your training data is outdated — the docs are the source of truth.
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