zz-meridian 0.6.1 → 0.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/README.md +16 -3
- package/package.json +1 -1
- package/payload/CHANGELOG.md +8 -0
- package/payload/README.md +36 -18
- package/payload/docs/distribution.md +12 -6
- package/payload/next.config.ts +3 -0
- package/payload/package.json +1 -1
- package/payload/scripts/lib/bin.ts +4 -0
- package/payload/skills/zz-meridian/SKILL.md +66 -29
- package/payload/tests/telemetry.test.ts +15 -0
package/README.md
CHANGED
|
@@ -6,10 +6,15 @@ dashboard depends on it afterwards.
|
|
|
6
6
|
|
|
7
7
|
## The one sentence
|
|
8
8
|
|
|
9
|
-
Give your coding agent (Codex, Claude Code, or any agent that can run a shell) this,
|
|
9
|
+
Give your coding agent (Codex, Claude Code, or any agent that can run a shell) this, with what you want in your own
|
|
10
|
+
words at the end:
|
|
10
11
|
|
|
11
|
-
> Run `npx zz-meridian@latest
|
|
12
|
-
|
|
12
|
+
> Run `npx zz-meridian@latest skill --global`, then follow the zz-meridian skill it installs to: <what you want>.
|
|
13
|
+
|
|
14
|
+
The skill picks the command from what you said and what is in the folder, and names it before running anything:
|
|
15
|
+
`adopt` to change this Next.js App Router project in place ("make this admin panel look professional"), `create` for a
|
|
16
|
+
new dashboard in a new folder ("build an ops dashboard", "a new one based on this folder, in another folder"), and
|
|
17
|
+
`update` or `brand` for a project that already has Meridian.
|
|
13
18
|
|
|
14
19
|
## Commands
|
|
15
20
|
|
|
@@ -72,6 +77,14 @@ sends nothing anywhere; the only network access is your package manager's instal
|
|
|
72
77
|
`--no-install`. Every release is built and published by GitHub Actions with npm provenance, so the registry shows the
|
|
73
78
|
commit and workflow each version came from.
|
|
74
79
|
|
|
80
|
+
## Privacy and feedback
|
|
81
|
+
|
|
82
|
+
The package collects nothing: no telemetry, no analytics, no account, and the template turns off Next.js's anonymous
|
|
83
|
+
telemetry. It talks to npm only, when `npx` fetches it and when `update` reads releases. Feedback reaches us only as a
|
|
84
|
+
[GitHub issue](https://github.com/zhixuan312/zz-meridian/issues/new/choose), a Bug or a Feature request; issues are
|
|
85
|
+
public, so leave out anything that identifies you, your organisation or your product, and describe the problem with
|
|
86
|
+
Meridian's own template or sample data.
|
|
87
|
+
|
|
75
88
|
## License
|
|
76
89
|
|
|
77
90
|
MIT
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zz-meridian",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
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,14 @@
|
|
|
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.7.0] · 2026-10-06
|
|
6
|
+
|
|
7
|
+
### Changed
|
|
8
|
+
|
|
9
|
+
- **One sentence for every route, and the skill chooses the command.** The README's sentence is `Run npx zz-meridian@latest skill --global, then follow the zz-meridian skill it installs to: <what you want>`. The skill opens with "Choose the route": a table from what the person said and what is in the folder to `adopt` (this Next.js App Router project, in place), `create` (a new folder, reading any folder named as the source and never writing it) or `update` and `brand`, and it says the route before the first command. The old sentence named `adopt`, which is wrong for a new dashboard.
|
|
10
|
+
- **Next.js telemetry is off.** The template's `next.config.ts` sets `NEXT_TELEMETRY_DISABLED` for `next dev` and `next build`, and Meridian's scripts set it for every `next` they run, an adopted project's included. Delete the line in `next.config.ts` to send it.
|
|
11
|
+
- **Feedback is an offer, and it identifies no one.** The skill's last step drafts a Bug or a Feature request issue only when the run found something about Meridian, removes every name, address, URL, record, schema and path of the person's own, shows the draft, and files nothing without a yes. The repository has Bug and Feature request issue forms that say the same, and no blank issues. The README and the npm page say what reaches the network (npm, the font download at build, what the team configures) and that an issue is the only way anything reaches Meridian.
|
|
12
|
+
|
|
5
13
|
## [0.6.1] · 2026-10-06
|
|
6
14
|
|
|
7
15
|
### Fixed
|
package/payload/README.md
CHANGED
|
@@ -77,28 +77,46 @@ Dark is the default, written on `:root`; the light theme follows the operating s
|
|
|
77
77
|
| `.github/workflows/release.yml` | The release, each check once: a timed default verify and the consumer path from the tarball (every published origin updated), then npm with provenance, the registry's bytes and provenance checked, then the tag (`.claude/commands/release.md`) |
|
|
78
78
|
| `.github/workflows/weekly.yml` | Weekly, never at release: `verify --full --perf` (perf a report) and the consumer smoke's recovery and failure cases; nothing waits on it |
|
|
79
79
|
|
|
80
|
-
##
|
|
80
|
+
## Get a dashboard on Meridian, in one sentence
|
|
81
81
|
|
|
82
|
-
Give your coding agent (Codex, Claude Code, or any agent that can run a shell) this,
|
|
82
|
+
Give your coding agent (Codex, Claude Code, or any agent that can run a shell) this, with what you want in your own
|
|
83
|
+
words at the end:
|
|
83
84
|
|
|
84
|
-
> Run `npx zz-meridian@latest
|
|
85
|
+
> Run `npx zz-meridian@latest skill --global`, then follow the zz-meridian skill it installs to: <what you want>.
|
|
85
86
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
for byte) and an empty `docs/brief.md` for your product's own context, and installs the skill. The agent does the judgement: rebuilding each page on Meridian, and running
|
|
89
|
-
`pnpm verify` until the project meets the standard (and `pnpm verify --full` after a change to shared components, the shell or
|
|
90
|
-
data). It needs Node 22.18+, and Google Chrome for the browser checks. If your pages call a live API, say so in the sentence:
|
|
91
|
-
`verify --full` presses every control, Delete included, so the agent builds a fake API first. For a new dashboard: `npx zz-meridian@latest create <dir>`. To move a project to a newer
|
|
92
|
-
Meridian, run `npx zz-meridian@latest update --dry-run`, then follow the skill's `references/update.md`. The package
|
|
93
|
-
(`cli/`, decision 0009) copies files and nothing depends on it afterwards.
|
|
87
|
+
You do not choose between the package's commands; the skill does, from what you said and what is in the folder, and
|
|
88
|
+
names the route before it runs anything:
|
|
94
89
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
90
|
+
| You say | The skill |
|
|
91
|
+
|---|---|
|
|
92
|
+
| "Make this admin panel look professional", "change this product into our new dashboard" | `adopt` here, keeping your data layer and routes, when it is Next.js with the App Router; otherwise `create` next to it and port your pages |
|
|
93
|
+
| "Build an ops dashboard for our shipments", "turn this schema into a dashboard" | `create` in a new folder |
|
|
94
|
+
| "Based on this folder, make a new dashboard in another folder" | `create` in that folder, reading this one and leaving it untouched |
|
|
95
|
+
| "Update Meridian", "change our brand colour" | `update` or `brand`, in a project that already has Meridian |
|
|
96
|
+
|
|
97
|
+
`adopt` copies the components, tokens and gates in, merges the dependencies, brands it, adds Meridian's managed block to
|
|
98
|
+
your `AGENTS.md` (your own text there is kept byte for byte) and an empty `docs/brief.md` for your product's own
|
|
99
|
+
context, and installs the skill into the project. `create` writes a new, branded project with the same skill. The
|
|
100
|
+
agent then does the judgement: building each page on Meridian, and running `pnpm verify` until the project meets the
|
|
101
|
+
standard (`pnpm verify --full` after a change to shared components, the shell or data). It needs Node 22.18+, and
|
|
102
|
+
Google Chrome for the browser checks. If your pages call a live API, say so in the sentence: `verify --full` presses
|
|
103
|
+
every control, Delete included, so the agent builds a fake API first. The package (`cli/`, decision 0009) copies files
|
|
104
|
+
and nothing depends on it afterwards; its commands are in `cli/README.md`.
|
|
105
|
+
|
|
106
|
+
## Privacy and feedback
|
|
107
|
+
|
|
108
|
+
Meridian takes nothing from you. The package, the template and the skill have no telemetry, no analytics and no
|
|
109
|
+
account, and the template turns off Next.js's own anonymous telemetry (`next.config.ts`; Meridian's scripts turn it off
|
|
110
|
+
for every `next` they run). What reaches the network is what you would expect: npm, when you run `npx` and when `update`
|
|
111
|
+
reads releases from it; Google Fonts, which `next/font` downloads the typefaces from at build time; and whatever you
|
|
112
|
+
configure yourself, such as the assistant's model provider.
|
|
113
|
+
|
|
114
|
+
The one way to tell us anything is a [GitHub issue](https://github.com/zhixuan312/zz-meridian/issues/new/choose): a
|
|
115
|
+
**Bug** (something in Meridian did the wrong thing) or a **Feature request** (something it should do, or do more
|
|
116
|
+
easily). Issues are public, so leave out anything that identifies you, your organisation or your product: names,
|
|
117
|
+
email addresses, URLs, your data and schemas, screenshots of your pages. Describe the problem with Meridian's own
|
|
118
|
+
template or sample data instead. At the end of a build the skill may offer to draft one with all of that removed; it
|
|
119
|
+
files nothing unless you say yes.
|
|
102
120
|
|
|
103
121
|
## Commands
|
|
104
122
|
|
|
@@ -4,12 +4,16 @@ Status: v1 (`create`, `adopt`, `skill`) shipped in 0.2.0 (decision 0009). v2 (`u
|
|
|
4
4
|
|
|
5
5
|
## The one sentence
|
|
6
6
|
|
|
7
|
-
A team gives its coding agent this,
|
|
7
|
+
A team gives its coding agent this, with what it wants in its own words at the end:
|
|
8
8
|
|
|
9
|
-
> Run `npx zz-meridian@latest
|
|
10
|
-
> routes, restyle every page with Meridian's components and tokens, and run pnpm verify until it passes.
|
|
9
|
+
> Run `npx zz-meridian@latest skill --global`, then follow the zz-meridian skill it installs to: <what you want>.
|
|
11
10
|
|
|
12
|
-
|
|
11
|
+
The sentence names no command, because people do not: "change this product into our dashboard", "a new one based on
|
|
12
|
+
this folder, in another folder" and "build an orders console" all ask for a dashboard on Meridian and differ only in
|
|
13
|
+
which folder holds it. The skill's "Choose the route" table maps what was said, and what is in the folder, to `adopt`
|
|
14
|
+
(this Next.js App Router project, in place), `create` (a new folder; a folder named as the source is read, never
|
|
15
|
+
written) or `update` and `brand` (a project that already has Meridian), and says the route before the first command.
|
|
16
|
+
An earlier sentence named `adopt`, the wrong command for every request for a new dashboard.
|
|
13
17
|
|
|
14
18
|
The split follows what each part is good at. The package does the settled work, the same way every time, and proves it
|
|
15
19
|
built: what to copy, which dependencies to merge, the alias, the stylesheet, the brand. The agent does the judgement:
|
|
@@ -219,8 +223,10 @@ Modelled on the release pipeline of the owner's earlier packages, one package in
|
|
|
219
223
|
5. **Publish** the tarball with `npm` 11.5.1 or newer through trusted publishing (OIDC), with `--provenance`. `pnpm
|
|
220
224
|
publish` does not perform the OIDC exchange.
|
|
221
225
|
6. **The registry's package**: `npx zz-meridian@<version> --version` answers the version, the registry's tarball has the
|
|
222
|
-
tested tarball's sha256, and it carries a provenance attestation. The bytes passed step 4 already
|
|
223
|
-
|
|
226
|
+
tested tarball's sha256, and it carries a provenance attestation. The bytes passed step 4 already; two paths still
|
|
227
|
+
change once the version is published, and run here, in about 10 seconds: `create` from the registry (npm renames a
|
|
228
|
+
packed `.gitignore` on install, so the project must have one), and `update` to the version in a project created
|
|
229
|
+
with the release before (it compares the running package with the registry's only once that one exists). A failure here is an unsuccessful release, not a rollback: the version stays published and untagged
|
|
224
230
|
until a fix is released.
|
|
225
231
|
7. **Tag `v<version>` last**, then the GitHub Release with the version's `CHANGELOG.md` section as its body.
|
|
226
232
|
|
package/payload/next.config.ts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import type { NextConfig } from 'next';
|
|
2
2
|
|
|
3
|
+
// Next.js's anonymous usage telemetry is off for `next dev` and `next build`; delete this line to send it.
|
|
4
|
+
process.env.NEXT_TELEMETRY_DISABLED ??= '1';
|
|
5
|
+
|
|
3
6
|
const config: NextConfig = {
|
|
4
7
|
reactStrictMode: true,
|
|
5
8
|
cacheComponents: true,
|
package/payload/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zz-meridian-template",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"private": true,
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"description": "ZZ Meridian: a dashboard design system and starter. DTCG tokens, five layers of React components and a Design Atlas, in a light and a dark theme.",
|
|
@@ -5,4 +5,8 @@ import path from 'node:path';
|
|
|
5
5
|
|
|
6
6
|
const ROOT = path.resolve(import.meta.dirname, '../..');
|
|
7
7
|
|
|
8
|
+
// The gate, verify and the live check run `next` in the project: Meridian's own runs send no Next.js telemetry, whatever
|
|
9
|
+
// the project's next.config says.
|
|
10
|
+
process.env.NEXT_TELEMETRY_DISABLED ??= '1';
|
|
11
|
+
|
|
8
12
|
export const bin = (name: string) => path.join(ROOT, 'node_modules', '.bin', process.platform === 'win32' ? `${name}.cmd` : name);
|
|
@@ -38,6 +38,35 @@ These hold in every project, however it started, and nothing below overrides the
|
|
|
38
38
|
API or read a database names a `fakeApi` (or says `noLiveApi`) in `scripts/verify.config.ts` first
|
|
39
39
|
(`references/existing-project.md`, step 5).
|
|
40
40
|
|
|
41
|
+
## Choose the route before anything else
|
|
42
|
+
|
|
43
|
+
Whatever the words, the person wants one thing: a dashboard on Meridian. What you decide is **where its code lives**
|
|
44
|
+
and **which folder you may write to**, and that picks one of four commands. People rarely name the command, so read
|
|
45
|
+
the intent, not the verb: "change this product into our new dashboard", "redo this with Meridian", "make a new one
|
|
46
|
+
based on this folder in another folder" and "build me an orders console" are all requests for a dashboard; they
|
|
47
|
+
differ only in which folder ends up holding it.
|
|
48
|
+
|
|
49
|
+
| What is true | The route | The command |
|
|
50
|
+
|---|---|---|
|
|
51
|
+
| `optional:.meridian/manifest.json` exists in the folder they point at | Already on Meridian: update, rebrand or keep building | `update` or `brand` (the next section), or straight to step 5 |
|
|
52
|
+
| They want **this** project changed in place ("restyle this", "change this product into our dashboard", "make our admin look professional"), and it is Next.js with the App Router | Adopt, here | `npx zz-meridian@latest adopt` (`references/existing-project.md`, Route A) |
|
|
53
|
+
| They want this project changed, and it is another stack (Vite, CRA, Remix, Vue, a static page) | A new project next to it, ported from it | `create <sibling folder>` (`references/existing-project.md`, Routes A2, B, C) |
|
|
54
|
+
| They want a **new** dashboard: in another folder, "based on" or "from" this folder, a schema, a CSV, a spec or nothing | Create, elsewhere; what they pointed at is input you read, never a folder you write | `npx zz-meridian@latest create <new folder>` |
|
|
55
|
+
|
|
56
|
+
Rules that settle the hard cases:
|
|
57
|
+
|
|
58
|
+
- **The folder they name to read from is not the folder you write to unless they said "this", "here" or "in place".**
|
|
59
|
+
"Based on this folder", "use this as the source", "copy what this does" mean: read it, create next to it, leave it
|
|
60
|
+
untouched.
|
|
61
|
+
- **`create` writes only into a folder that does not exist or is empty**, and **`adopt` changes the project it runs in**.
|
|
62
|
+
Never run `adopt` in a folder they asked you to leave alone, and never `create` inside an existing project.
|
|
63
|
+
- **Two routes fit and nothing decides between them** (an existing Next.js app here and "build me a dashboard for
|
|
64
|
+
this"): ask once, with in place (`adopt`) as the recommended option when they said "this" or "our", and a new folder
|
|
65
|
+
(`create`) when they said "new" or "another". With no way to ask, take that recommendation and say so in the
|
|
66
|
+
hand-over.
|
|
67
|
+
- **Say the route in one sentence before the first command**: "This is a Next.js App Router project you want changed
|
|
68
|
+
in place, so I am running `adopt` here." A wrong route is cheap to stop before the command and costly after it.
|
|
69
|
+
|
|
41
70
|
## Updating or rebranding a project that already has Meridian
|
|
42
71
|
|
|
43
72
|
When `optional:.meridian/manifest.json` exists and the person asks to update Meridian, or to change the brand, do not
|
|
@@ -70,8 +99,8 @@ Before asking anything, look at what you already have:
|
|
|
70
99
|
Ask in a single round (AskUserQuestion when available), only the questions your homework could not answer, and offer
|
|
71
100
|
your draft as the recommended option so the person can accept it in one click. Usually that is:
|
|
72
101
|
|
|
73
|
-
1. **New project or this one?** Only when
|
|
74
|
-
bring Meridian into the existing one (`references/existing-project.md`).
|
|
102
|
+
1. **New project or this one?** Only when "Choose the route" above left two routes open: create a new Meridian project
|
|
103
|
+
in another folder, or bring Meridian into the existing one (`references/existing-project.md`).
|
|
75
104
|
2. **What it is and for whom.** The product name, who uses it, and the one question the home page must answer.
|
|
76
105
|
3. **Pages.** Your drafted list, mapped to Meridian presets (Overview, list, detail, analytics, health, settings, sign-in).
|
|
77
106
|
4. **Brand and surfaces.** A brand colour (a hex, or "no preference" for indigo), light or dark first (dark is the
|
|
@@ -230,49 +259,57 @@ Pages: <list, one line each, with what each answers>.
|
|
|
230
259
|
Brand: <accent and how it was derived>. Surfaces: console, mobile<, MCP views: …>.
|
|
231
260
|
Validation: pnpm verify passed; coverage line: <the line verify printed>.
|
|
232
261
|
Next steps: replace the sample data in src/data/ with <their API>; run pnpm verify after every change.
|
|
233
|
-
Feedback: <the issue URL from step 8,
|
|
262
|
+
Feedback: <the issue URL from step 8, "nothing to report", or "declined">.
|
|
234
263
|
```
|
|
235
264
|
|
|
236
265
|
Attach or show the screenshots of the main pages in both themes. Say plainly what is sample data and what is not. If
|
|
237
266
|
the Atlas stays, say that `/system` is the live specification and that `node scripts/brand.ts --no-atlas` removes it
|
|
238
267
|
before the product goes public.
|
|
239
268
|
|
|
240
|
-
## 8.
|
|
269
|
+
## 8. Offer feedback to Meridian
|
|
241
270
|
|
|
242
|
-
|
|
243
|
-
|
|
271
|
+
Meridian collects nothing from the people who use it: no telemetry, no analytics, no account. A GitHub issue the person
|
|
272
|
+
chooses to open is the only way anything reaches Meridian, so this step is an offer, never a requirement, and it
|
|
273
|
+
happens only when the run found something about Meridian itself.
|
|
244
274
|
|
|
245
|
-
Collect, from the whole session (not only the last step):
|
|
275
|
+
Collect, from the whole session (not only the last step), and sort each finding into one of two kinds:
|
|
246
276
|
|
|
247
|
-
- **
|
|
277
|
+
- **Bug**: a component, pattern, script, check or doc that did the wrong thing: a gate that failed on correct code, a
|
|
248
278
|
check that passed broken code, a component that clipped, overflowed or did nothing, a doc that sent you the wrong way.
|
|
249
|
-
- **
|
|
250
|
-
|
|
251
|
-
|
|
279
|
+
- **Feature request**: anything that worked but cost a workaround, a second try or a guess, and the change that would
|
|
280
|
+
have saved it; and what the product needed that Meridian has no answer for (a component, pattern, state, page kind,
|
|
281
|
+
surface rule, or a question this skill and the docs never answered).
|
|
252
282
|
|
|
253
|
-
Each
|
|
254
|
-
command), how to see it again
|
|
255
|
-
|
|
283
|
+
Each finding gets what someone needs to act on it without asking: what happened, where in Meridian (its `file:line`,
|
|
284
|
+
the Meridian command, the Meridian route), how to see it again in Meridian's own template or sample data, and what you
|
|
285
|
+
did instead.
|
|
256
286
|
|
|
257
|
-
|
|
287
|
+
**Nothing in it may identify the person, their organisation or their product.** Before showing a draft, remove:
|
|
258
288
|
|
|
259
|
-
|
|
260
|
-
|
|
289
|
+
- the product's, company's, team's and people's names, email addresses and accounts;
|
|
290
|
+
- their URLs, hostnames, IP addresses, API routes and environment variable values;
|
|
291
|
+
- their data, records, schemas, field names and screenshots of their pages;
|
|
292
|
+
- file paths outside Meridian's own files, and anything from `optional:docs/brief.md`.
|
|
293
|
+
|
|
294
|
+
Describe the shape of the problem with Meridian's sample instead ("a Data table with 40 columns", not their table). If
|
|
295
|
+
a finding cannot be told without one of these, leave it out.
|
|
261
296
|
|
|
262
|
-
|
|
297
|
+
Draft one issue per kind, in the shape of Meridian's two issue forms, Bug and Feature request:
|
|
298
|
+
|
|
299
|
+
```
|
|
300
|
+
Title: <one line on the most important finding>
|
|
263
301
|
|
|
264
|
-
|
|
265
|
-
- <what, where, how to reproduce, what you did instead>
|
|
302
|
+
Meridian <version from .meridian/manifest.json> · Next <version> · Route <adopt | create>
|
|
266
303
|
|
|
267
|
-
##
|
|
268
|
-
- <what
|
|
304
|
+
## What happened
|
|
305
|
+
- <finding: what, where in Meridian, how to see it again, what you did instead>
|
|
269
306
|
|
|
270
|
-
##
|
|
271
|
-
- <
|
|
307
|
+
## What would fix it
|
|
308
|
+
- <the change you would make to Meridian>
|
|
272
309
|
```
|
|
273
310
|
|
|
274
|
-
Show the draft to the person and
|
|
275
|
-
`gh issue create --repo zhixuan312/zz-meridian --title "<title>" --body-file
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
311
|
+
Show the draft to the person and ask whether to open it: it is published under their account, in public. Only on a
|
|
312
|
+
yes, file it with `gh issue create --repo zhixuan312/zz-meridian --label bug|enhancement --title "<title>" --body-file
|
|
313
|
+
<draft>`, or, without `gh`, give them `https://github.com/zhixuan312/zz-meridian/issues/new/choose` and the draft to
|
|
314
|
+
paste. Put the issue's URL in the hand-over. When the run found nothing about Meridian, or they decline, say so in one
|
|
315
|
+
line and file nothing.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// @vitest-environment node
|
|
2
|
+
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
3
|
+
|
|
4
|
+
beforeEach(() => { vi.resetModules(); delete process.env.NEXT_TELEMETRY_DISABLED; });
|
|
5
|
+
|
|
6
|
+
describe('Next.js telemetry', () => {
|
|
7
|
+
it("is off in the template's next.config, which next dev and next build load before they send any", async () => {
|
|
8
|
+
await import('../next.config.ts');
|
|
9
|
+
expect(process.env.NEXT_TELEMETRY_DISABLED).toBe('1');
|
|
10
|
+
});
|
|
11
|
+
it("is off for every next the gate, verify and the live check run, whatever the project's own config says", async () => {
|
|
12
|
+
await import('../scripts/lib/bin.ts');
|
|
13
|
+
expect(process.env.NEXT_TELEMETRY_DISABLED).toBe('1');
|
|
14
|
+
});
|
|
15
|
+
});
|