zz-meridian 0.18.0 → 0.18.1
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/dist/adopt.js +3 -3
- package/dist/files.js +5 -0
- package/dist/reconcile.js +1 -1
- package/dist/session.js +2 -2
- package/package.json +1 -1
- package/payload/CHANGELOG.md +14 -0
- package/payload/docs/distribution.md +3 -2
- package/payload/package.json +17 -16
- package/payload/pnpm-lock.yaml +918 -892
- package/payload/pnpm-workspace.yaml +0 -2
- package/payload/skills/zz-meridian/references/live.md +9 -8
- package/payload/src/lib/live.ts +10 -9
- package/payload/tests/live-client.test.tsx +37 -1
package/dist/adopt.js
CHANGED
|
@@ -8,12 +8,12 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import fs from 'node:fs';
|
|
10
10
|
import path from 'node:path';
|
|
11
|
-
import { VERSION, brandArgs, effectiveBrand, inside, installSkill, jsoncExtras, packageManager, payloadBytes, payloadFiles, readJsonc, readPayload, relativeImports, run, runTool, sha256, writeIn, writeManifest, } from './files.js';
|
|
11
|
+
import { VERSION, brandArgs, effectiveBrand, inside, installArgs, installSkill, jsoncExtras, packageManager, payloadBytes, payloadFiles, readJsonc, readPayload, relativeImports, run, runTool, sha256, writeIn, writeManifest, } from './files.js';
|
|
12
12
|
import { BRIEF_TEMPLATE, managedBlock, upsertManagedBlock } from './context.js';
|
|
13
13
|
import { FIXED, adoptSetOf, managedPaths } from './ownership.js';
|
|
14
14
|
/** The template's dependencies a dashboard built from these files needs. */
|
|
15
15
|
const DEPS = ['next', 'react', 'react-dom', 'radix-ui', 'lucide-react', 'clsx', 'tailwind-merge', 'react-markdown', 'remark-gfm', 'ai', '@ai-sdk/react', 'zod'];
|
|
16
|
-
const DEV_DEPS = ['typescript', '@types/node', '@types/react', '@types/react-dom', 'tailwindcss', '@tailwindcss/postcss', 'eslint', 'eslint-config-next', 'vitest', '@vitejs/plugin-react', 'jsdom', '@testing-library/react', '@testing-library/jest-dom'];
|
|
16
|
+
const DEV_DEPS = ['typescript', '@types/node', '@types/react', '@types/react-dom', 'tailwindcss', '@tailwindcss/postcss', 'eslint', 'eslint-config-next', 'vitest', '@vitejs/plugin-react', 'jsdom', '@testing-library/react', '@testing-library/dom', '@testing-library/jest-dom'];
|
|
17
17
|
const SCRIPTS = ['typecheck', 'test', 'tokens', 'check', 'contrast', 'gate', 'audit', 'verify', 'brand', 'shot', 'interactions', 'keyboard', 'vitals'];
|
|
18
18
|
const major = (spec) => Number(/(\d+)/.exec(spec)?.[1] ?? NaN);
|
|
19
19
|
const TS = /\.(ts|tsx)$/;
|
|
@@ -356,7 +356,7 @@ Rename or move them, then run adopt again.`);
|
|
|
356
356
|
let typed = 'not run (--no-install)';
|
|
357
357
|
if (o.install) {
|
|
358
358
|
say(`\nInstalling with ${pm}…`);
|
|
359
|
-
if (run(pm,
|
|
359
|
+
if (run(pm, installArgs(pm), root).status !== 0)
|
|
360
360
|
return fail(`${pm} install failed (above). Fix it, then run ${pm} install and ${pm} run typecheck.`);
|
|
361
361
|
// Route types first (LayoutProps, PageProps), as the gate does.
|
|
362
362
|
runTool(root, 'next/dist/bin/next', ['typegen']);
|
package/dist/files.js
CHANGED
|
@@ -77,6 +77,11 @@ export function packageManager(root) {
|
|
|
77
77
|
return 'bun';
|
|
78
78
|
return 'npm';
|
|
79
79
|
}
|
|
80
|
+
/**
|
|
81
|
+
* The install that follows Meridian's own edit to package.json. pnpm freezes the lockfile where `CI` is set and refuses
|
|
82
|
+
* the edit it was run to take in, so it is asked to write the lockfile; the other managers write it as they are.
|
|
83
|
+
*/
|
|
84
|
+
export const installArgs = (pm) => (pm === 'pnpm' ? ['install', '--no-frozen-lockfile'] : ['install']);
|
|
80
85
|
/** A tool in the project's node_modules, run as `node <its script>`: no shell and no .cmd shim on any platform. */
|
|
81
86
|
export function runTool(root, entry, args, quiet = true) {
|
|
82
87
|
return spawnSync(process.execPath, [path.join(root, 'node_modules', entry), ...args], { cwd: root, encoding: 'utf8', stdio: quiet ? 'pipe' : 'inherit' });
|
package/dist/reconcile.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import { builtinModules } from 'node:module';
|
|
4
4
|
import { upsertManagedBlock } from './context.js';
|
|
5
5
|
/** Adopt's dev dependencies and scripts, which `update` also needs. They mirror `DEV_DEPS` and `SCRIPTS` in adopt.ts. */
|
|
6
|
-
export const TOOLCHAIN = ['typescript', '@types/node', '@types/react', '@types/react-dom', 'tailwindcss', '@tailwindcss/postcss', 'eslint', 'eslint-config-next', 'vitest', '@vitejs/plugin-react', 'jsdom', '@testing-library/react', '@testing-library/jest-dom'];
|
|
6
|
+
export const TOOLCHAIN = ['typescript', '@types/node', '@types/react', '@types/react-dom', 'tailwindcss', '@tailwindcss/postcss', 'eslint', 'eslint-config-next', 'vitest', '@vitejs/plugin-react', 'jsdom', '@testing-library/react', '@testing-library/dom', '@testing-library/jest-dom'];
|
|
7
7
|
export const MERIDIAN_SCRIPTS = ['typecheck', 'test', 'tokens', 'check', 'contrast', 'gate', 'audit', 'verify', 'brand', 'shot', 'interactions', 'keyboard', 'vitals'];
|
|
8
8
|
const isObj = (v) => typeof v === 'object' && v !== null && !Array.isArray(v);
|
|
9
9
|
/**
|
package/dist/session.js
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
import fs from 'node:fs';
|
|
8
8
|
import path from 'node:path';
|
|
9
9
|
import { managedBlock } from './context.js';
|
|
10
|
-
import { inside, packageManager, run as spawn, sha256 } from './files.js';
|
|
10
|
+
import { inside, installArgs, packageManager, run as spawn, sha256 } from './files.js';
|
|
11
11
|
import { aliasesOf, canonicalImports } from './imports.js';
|
|
12
12
|
import { changedPaths, takeInventory } from './inventory.js';
|
|
13
13
|
import { renderMergeReport } from './merge-report.js';
|
|
@@ -273,7 +273,7 @@ function install(ctx, session, j, pm) {
|
|
|
273
273
|
if (before.exists && !fs.existsSync(backup))
|
|
274
274
|
writeAtomic(backup, fs.readFileSync(inside(root, lock)));
|
|
275
275
|
const t0 = performance.now();
|
|
276
|
-
const r = ctx.run(pm,
|
|
276
|
+
const r = ctx.run(pm, installArgs(pm), root);
|
|
277
277
|
const ms = performance.now() - t0;
|
|
278
278
|
writeAtomic(path.join(session, 'evidence', '0-install.log'), r.output);
|
|
279
279
|
j.validation = [{ command: `${pm} install`, exitCode: r.status, evidenceFile: 'evidence/0-install.log' }, ...j.validation.filter((v) => !isInstall(v))];
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zz-meridian",
|
|
3
|
-
"version": "0.18.
|
|
3
|
+
"version": "0.18.1",
|
|
4
4
|
"description": "Bring ZZ Meridian, a dashboard design system, into a Next.js project, or start a new dashboard on it. Copies the files in; nothing depends on this package at runtime.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
package/payload/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,20 @@
|
|
|
2
2
|
|
|
3
3
|
Every release of ZZ Meridian, newest first. Versions follow semver: a removed or renamed token, prop or card is major; a new card, token or variant is minor; a corrected value is a patch. Each entry says what breaks and what to do instead.
|
|
4
4
|
|
|
5
|
+
## [0.18.1] · 2026-10-19
|
|
6
|
+
|
|
7
|
+
### Changed
|
|
8
|
+
|
|
9
|
+
- **Next.js 16.4.2**, from 16.3.8. 16.4.1 carries fixes for two critical advisories, remote code execution through a `use cache` function that returns a typed array (GHSA-673q-mjm6-r5xr) and through the Image Optimization API with SVG files (GHSA-2464-fhr4-w9xw), and a high one, denial of service through Server Actions (GHSA-p3m5-59mp-jv5r); 16.3 has no release that carries them. `npx zz-meridian@latest update` raises `next` and `eslint-config-next` to `16.4.2` in a project's `package.json`; run your package manager's install after it.
|
|
10
|
+
- **The other dependencies, within their majors**: React 19.3.1, `ai` 7.0.143 with `@ai-sdk/react` 4.0.147, `@ai-sdk/anthropic` 4.0.82 and `@ai-sdk/openai-compatible` 3.0.71, `radix-ui` 1.8.1, `lucide-react` 1.59.0, `zod` 4.6.7, and for development `vitest` 5.0.5, `jsdom` 30.1.3 and `@vitejs/plugin-react` 6.1.2.
|
|
11
|
+
- **`@testing-library/jest-dom` 7**, which needs `@testing-library/dom` as a dependency of the project's own. `adopt` and `update` add `@testing-library/dom` `^10.4.2` to `devDependencies`; `update` raises jest-dom to 7 where Meridian wrote it and asks you to where you chose your own. The matchers are unchanged.
|
|
12
|
+
- TypeScript stays at 5.9 and ESLint at 9: `typescript-eslint` supports TypeScript below 6.1, and `eslint-plugin-react`, `eslint-plugin-import` and `eslint-plugin-jsx-a11y`, which `eslint-config-next` installs, do not yet declare ESLint 10.
|
|
13
|
+
|
|
14
|
+
### Fixed
|
|
15
|
+
|
|
16
|
+
- **`update` and `adopt` install where `CI` is set.** Both change `package.json` and then run the project's install, and pnpm freezes the lockfile where `CI` is set, so an update that raised a dependency failed with `ERR_PNPM_OUTDATED_LOCKFILE` in CI or under an agent that sets it. With pnpm they now run `pnpm install --no-frozen-lockfile`; npm, yarn and bun run `install` as before.
|
|
17
|
+
- **A client navigation no longer reads the new page's collections again** ([#54](https://github.com/zhixuan312/zz-meridian/issues/54)). 0.18.0 sent the revisions a page was served only on the tab's first stream, so a press in the rail to a page that follows other collections reopened the stream without them, and every collection that page follows was read by its server and again by the stream's resync. `src/lib/live.ts` now sends them on every open that follows a change of the names, and only a reopen after a gap (an error, a tab shown again, the poll's retry) resyncs every name. A created project takes the fix with `npx zz-meridian@latest update`.
|
|
18
|
+
|
|
5
19
|
## [0.18.0] · 2026-10-19
|
|
6
20
|
|
|
7
21
|
### Breaking
|
|
@@ -75,7 +75,7 @@ Then, in this order:
|
|
|
75
75
|
the accent and the contrast gate. Then it writes Meridian's managed block into their `AGENTS.md`, and `docs/brief.md`
|
|
76
76
|
when they have none.
|
|
77
77
|
5. Installs the skill and writes the manifest.
|
|
78
|
-
6. Runs their package manager's install, `next typegen` and `tsc --noEmit`, and prints the result and the next step:
|
|
78
|
+
6. Runs their package manager's install (pnpm with `--no-frozen-lockfile`, since adopt has just changed `package.json`), `next typegen` and `tsc --noEmit`, and prints the result and the next step:
|
|
79
79
|
the skill's Route A from step 2, with the template to read from at the same version.
|
|
80
80
|
|
|
81
81
|
Three things make the copy safe in someone else's project. Meridian's own files import each other by relative path,
|
|
@@ -107,7 +107,8 @@ three edits named below. It needs a project that adopted or created Meridian 0.3
|
|
|
107
107
|
2. **Update.** `npx zz-meridian@latest update` from a clean git tree (or with `--allow-dirty`). It writes the plan first
|
|
108
108
|
(`.meridian/update/<version>/state.json`, the journal, `MERGE.md`, an empty `resolutions.json`, the `base/`, `ours/`
|
|
109
109
|
and `new/` copies of every staged file, and a `backup/` preimage of every path it changes), then applies the safe
|
|
110
|
-
changes, then runs the install
|
|
110
|
+
changes, then runs the install (pnpm with `--no-frozen-lockfile`, which CI would otherwise refuse after the edit to
|
|
111
|
+
`package.json`). Applied: untouched replacements, additions and untouched removals. Staged: every
|
|
111
112
|
managed file the team changed or deleted, or collided with. The only team files it edits are `package.json` (missing
|
|
112
113
|
dependencies and scripts, older ones of the same major, and entries still exactly as the earlier release wrote them;
|
|
113
114
|
the framework `next`, `react` and `react-dom` is always among them), the managed block in `AGENTS.md`, and the
|
package/payload/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zz-meridian-template",
|
|
3
|
-
"version": "0.18.
|
|
3
|
+
"version": "0.18.1",
|
|
4
4
|
"private": true,
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"description": "ZZ Meridian: a dashboard design system and starter. Six layers, from DTCG tokens through four layers of React components to product workspaces, and a Design Atlas, in a light and a dark theme.",
|
|
@@ -30,34 +30,35 @@
|
|
|
30
30
|
"keyboard": "node scripts/keyboard.ts"
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@ai-sdk/anthropic": "4.0.
|
|
34
|
-
"@ai-sdk/openai-compatible": "3.0.
|
|
35
|
-
"@ai-sdk/react": "4.0.
|
|
36
|
-
"ai": "7.0.
|
|
33
|
+
"@ai-sdk/anthropic": "4.0.82",
|
|
34
|
+
"@ai-sdk/openai-compatible": "3.0.71",
|
|
35
|
+
"@ai-sdk/react": "4.0.147",
|
|
36
|
+
"ai": "7.0.143",
|
|
37
37
|
"clsx": "^2.1.1",
|
|
38
|
-
"lucide-react": "^1.
|
|
39
|
-
"next": "16.
|
|
40
|
-
"radix-ui": "^1.
|
|
41
|
-
"react": "19.3.
|
|
42
|
-
"react-dom": "19.3.
|
|
38
|
+
"lucide-react": "^1.59.0",
|
|
39
|
+
"next": "16.4.2",
|
|
40
|
+
"radix-ui": "^1.8.1",
|
|
41
|
+
"react": "19.3.1",
|
|
42
|
+
"react-dom": "19.3.1",
|
|
43
43
|
"react-markdown": "^10.1.0",
|
|
44
44
|
"remark-gfm": "^4.0.1",
|
|
45
45
|
"tailwind-merge": "^3.7.0",
|
|
46
|
-
"zod": "4.6.
|
|
46
|
+
"zod": "4.6.7"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
49
|
"@tailwindcss/postcss": "^4.3.3",
|
|
50
|
-
"@testing-library/
|
|
50
|
+
"@testing-library/dom": "^10.4.2",
|
|
51
|
+
"@testing-library/jest-dom": "^7.0.1",
|
|
51
52
|
"@testing-library/react": "^16.3.3",
|
|
52
53
|
"@types/node": "^24",
|
|
53
54
|
"@types/react": "^19.3.0",
|
|
54
55
|
"@types/react-dom": "^19.3.0",
|
|
55
|
-
"@vitejs/plugin-react": "^6.1.
|
|
56
|
+
"@vitejs/plugin-react": "^6.1.2",
|
|
56
57
|
"eslint": "^9.39.5",
|
|
57
|
-
"eslint-config-next": "16.
|
|
58
|
-
"jsdom": "^30.1.
|
|
58
|
+
"eslint-config-next": "16.4.2",
|
|
59
|
+
"jsdom": "^30.1.3",
|
|
59
60
|
"tailwindcss": "^4.3.3",
|
|
60
61
|
"typescript": "5.9.3",
|
|
61
|
-
"vitest": "^5.0.
|
|
62
|
+
"vitest": "^5.0.5"
|
|
62
63
|
}
|
|
63
64
|
}
|