@ysk-kit/cli 1.2.0 → 1.2.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/help.d.ts.map +1 -1
- package/dist/help.js +5 -0
- package/dist/help.js.map +1 -1
- package/dist/index.js +17 -1
- package/dist/index.js.map +1 -1
- package/dist/plan.d.ts +18 -0
- package/dist/plan.d.ts.map +1 -1
- package/dist/plan.js +78 -0
- package/dist/plan.js.map +1 -1
- package/package.json +3 -3
- package/templates/agent/nested/api.md +1 -0
- package/templates/agent/nested/clients.md +1 -0
- package/templates/agent/nested/contracts.md +1 -0
- package/templates/agent/rules/tests.mdc +9 -0
- package/templates/agent/rules/ui.mdc +9 -0
- package/templates/agent/skills/test-plan/SKILL.md +10 -0
- package/templates/agent/skills/ui-design/SKILL.md +9 -0
- package/templates/agent/skills/ui-review/SKILL.md +9 -0
- package/templates/agent/skills/write-tests/SKILL.md +9 -0
package/dist/help.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../src/help.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,IAAI,
|
|
1
|
+
{"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../src/help.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,IAAI,QAyEhB,CAAC"}
|
package/dist/help.js
CHANGED
|
@@ -9,6 +9,7 @@ Usage:
|
|
|
9
9
|
pnpm ysk-kit check agent
|
|
10
10
|
pnpm ysk-kit doctor [--json]
|
|
11
11
|
pnpm ysk-kit plan <kebab-slug> [--date YYYY-MM-DD] [--force]
|
|
12
|
+
pnpm ysk-kit plan --check <file>
|
|
12
13
|
|
|
13
14
|
Commands:
|
|
14
15
|
add module <name>
|
|
@@ -51,6 +52,10 @@ Commands:
|
|
|
51
52
|
bilingual template, plus a gitignored root plan.md pointer.
|
|
52
53
|
Slug must be kebab-case. --date defaults to today. --force overwrites.
|
|
53
54
|
|
|
55
|
+
plan --check <file>
|
|
56
|
+
Verify a plan file has every required template heading and no
|
|
57
|
+
required section is still placeholder-only. Exit 1 on failure.
|
|
58
|
+
|
|
54
59
|
doctor [--json]
|
|
55
60
|
Check a generated product: Node and pnpm versus engines, required
|
|
56
61
|
env vars, insecure defaults (JWT_SECRET placeholder or shorter than
|
package/dist/help.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"help.js","sourceRoot":"","sources":["../src/help.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,MAAM,CAAC,MAAM,IAAI,GAAG
|
|
1
|
+
{"version":3,"file":"help.js","sourceRoot":"","sources":["../src/help.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,MAAM,CAAC,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;;;;;sBAwBE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiD5C,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
1
2
|
import { dirname, resolve } from 'node:path';
|
|
2
3
|
import { fileURLToPath } from 'node:url';
|
|
3
4
|
import { addCapability } from './add-capability';
|
|
@@ -6,7 +7,7 @@ import { checkAgent, formatAgentFindings } from './check-agent';
|
|
|
6
7
|
import { doctor, formatDoctorReport } from './doctor';
|
|
7
8
|
import { generateOpenApi } from './generate-openapi';
|
|
8
9
|
import { HELP } from './help';
|
|
9
|
-
import { localIsoDate, writePlan } from './plan';
|
|
10
|
+
import { checkPlan, localIsoDate, writePlan } from './plan';
|
|
10
11
|
import { upgrade } from './upgrade';
|
|
11
12
|
const args = process.argv.slice(2);
|
|
12
13
|
const kitRoot = resolve(dirname(fileURLToPath(import.meta.url)), '../../..');
|
|
@@ -49,6 +50,21 @@ try {
|
|
|
49
50
|
console.log(formatDoctorReport(report));
|
|
50
51
|
process.exit(report.ok ? 0 : 1);
|
|
51
52
|
}
|
|
53
|
+
if (args[0] === 'plan' && args[1] === '--check') {
|
|
54
|
+
const fileArg = args[2];
|
|
55
|
+
if (!fileArg || fileArg.startsWith('-')) {
|
|
56
|
+
throw new Error('plan --check requires a markdown file');
|
|
57
|
+
}
|
|
58
|
+
const resolved = existsSync(resolve(fileArg)) ? resolve(fileArg) : resolve(root, fileArg);
|
|
59
|
+
const result = checkPlan({ file: resolved, kitRoot });
|
|
60
|
+
if (result.ok) {
|
|
61
|
+
console.log('ysk-kit plan --check: ok');
|
|
62
|
+
process.exit(0);
|
|
63
|
+
}
|
|
64
|
+
for (const line of result.errors)
|
|
65
|
+
console.error(line);
|
|
66
|
+
process.exit(1);
|
|
67
|
+
}
|
|
52
68
|
if (args[0] === 'plan' && args[1] && !args[1].startsWith('-')) {
|
|
53
69
|
const dateFlag = args.indexOf('--date');
|
|
54
70
|
const dateArg = dateFlag >= 0 ? args[dateFlag + 1] : localIsoDate();
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/plan.d.ts
CHANGED
|
@@ -12,4 +12,22 @@ export declare const planPaths: (productRoot: string, date: string, slug: string
|
|
|
12
12
|
session: string;
|
|
13
13
|
};
|
|
14
14
|
export declare const writePlan: (opts: WritePlanOptions) => string[];
|
|
15
|
+
export type PlanCheckOptions = {
|
|
16
|
+
file: string;
|
|
17
|
+
kitRoot: string;
|
|
18
|
+
};
|
|
19
|
+
export type PlanCheckResult = {
|
|
20
|
+
ok: boolean;
|
|
21
|
+
errors: string[];
|
|
22
|
+
};
|
|
23
|
+
export declare const parsePlanFileName: (file: string) => {
|
|
24
|
+
date: string;
|
|
25
|
+
slug: string;
|
|
26
|
+
zh: boolean;
|
|
27
|
+
} | undefined;
|
|
28
|
+
export declare const markdownH2Sections: (text: string) => {
|
|
29
|
+
heading: string;
|
|
30
|
+
body: string;
|
|
31
|
+
}[];
|
|
32
|
+
export declare const checkPlan: (opts: PlanCheckOptions) => PlanCheckResult;
|
|
15
33
|
//# sourceMappingURL=plan.d.ts.map
|
package/dist/plan.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../src/plan.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;CAChB,CAAC;AAYF,eAAO,MAAM,YAAY,GAAI,UAAgB,KAAG,MAK/C,CAAC;AAEF,eAAO,MAAM,SAAS,GACpB,aAAa,MAAM,EACnB,MAAM,MAAM,EACZ,MAAM,MAAM,KACX;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAI1C,CAAC;AAEH,eAAO,MAAM,SAAS,GAAI,MAAM,gBAAgB,KAAG,MAAM,EAsCxD,CAAC"}
|
|
1
|
+
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../src/plan.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;CAChB,CAAC;AAYF,eAAO,MAAM,YAAY,GAAI,UAAgB,KAAG,MAK/C,CAAC;AAEF,eAAO,MAAM,SAAS,GACpB,aAAa,MAAM,EACnB,MAAM,MAAM,EACZ,MAAM,MAAM,KACX;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAI1C,CAAC;AAEH,eAAO,MAAM,SAAS,GAAI,MAAM,gBAAgB,KAAG,MAAM,EAsCxD,CAAC;AAQF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC5B,MAAM,MAAM,KACX;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,OAAO,CAAA;CAAE,GAAG,SAQhD,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,MAAM,MAAM,KAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAYlF,CAAC;AAqBF,eAAO,MAAM,SAAS,GAAI,MAAM,gBAAgB,KAAG,eAmClD,CAAC"}
|
package/dist/plan.js
CHANGED
|
@@ -52,4 +52,82 @@ This session scratch points at the dated plan. Edit the dated file. Law: \`AGENT
|
|
|
52
52
|
];
|
|
53
53
|
};
|
|
54
54
|
const dateSlug = (date, slug) => `docs/plans/${date}-${slug}.md`;
|
|
55
|
+
const PLAN_FILE_RE = /(\d{4}-\d{2}-\d{2})-([a-z][a-z0-9-]*)(\.zh)?\.md$/;
|
|
56
|
+
const ALLOWED_SHORT = /^(none\.?|n\/a|nil|no\.?|沒有。?|不適用。?)$/i;
|
|
57
|
+
export const parsePlanFileName = (file) => {
|
|
58
|
+
const base = file.split(/[/\\]/).pop() ?? file;
|
|
59
|
+
const match = PLAN_FILE_RE.exec(base);
|
|
60
|
+
if (!match)
|
|
61
|
+
return undefined;
|
|
62
|
+
const date = match[1];
|
|
63
|
+
const slug = match[2];
|
|
64
|
+
if (!date || !slug)
|
|
65
|
+
return undefined;
|
|
66
|
+
return { date, slug, zh: match[3] === '.zh' };
|
|
67
|
+
};
|
|
68
|
+
export const markdownH2Sections = (text) => {
|
|
69
|
+
const lines = text.split(/\r?\n/);
|
|
70
|
+
const sections = [];
|
|
71
|
+
for (const line of lines) {
|
|
72
|
+
if (/^## [^#]/.test(line)) {
|
|
73
|
+
sections.push({ heading: line.slice(3).trim(), body: [] });
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
const current = sections[sections.length - 1];
|
|
77
|
+
if (current)
|
|
78
|
+
current.body.push(line);
|
|
79
|
+
}
|
|
80
|
+
return sections.map((section) => ({ heading: section.heading, body: section.body.join('\n') }));
|
|
81
|
+
};
|
|
82
|
+
const collapse = (text) => text.replace(/\s+/g, ' ').trim();
|
|
83
|
+
const extraSubstance = (planBody, templateBody) => {
|
|
84
|
+
const plan = collapse(planBody);
|
|
85
|
+
const tmpl = collapse(templateBody);
|
|
86
|
+
if (plan.length === 0)
|
|
87
|
+
return '';
|
|
88
|
+
if (plan === tmpl)
|
|
89
|
+
return '';
|
|
90
|
+
if (tmpl.length > 0 && plan.startsWith(tmpl))
|
|
91
|
+
return collapse(plan.slice(tmpl.length));
|
|
92
|
+
if (tmpl.length > 0 && plan.includes(tmpl))
|
|
93
|
+
return collapse(plan.replace(tmpl, ' '));
|
|
94
|
+
return plan;
|
|
95
|
+
};
|
|
96
|
+
const sectionIsPlaceholder = (planBody, templateBody) => {
|
|
97
|
+
const extra = extraSubstance(planBody, templateBody);
|
|
98
|
+
if (extra.length === 0)
|
|
99
|
+
return true;
|
|
100
|
+
if (ALLOWED_SHORT.test(extra))
|
|
101
|
+
return false;
|
|
102
|
+
return extra.length < 8;
|
|
103
|
+
};
|
|
104
|
+
export const checkPlan = (opts) => {
|
|
105
|
+
if (!existsSync(opts.file)) {
|
|
106
|
+
return { ok: false, errors: [`plan file missing: ${opts.file}`] };
|
|
107
|
+
}
|
|
108
|
+
const parsed = parsePlanFileName(opts.file);
|
|
109
|
+
const zh = parsed?.zh ?? opts.file.endsWith('.zh.md');
|
|
110
|
+
const templatePath = join(opts.kitRoot, zh ? 'docs/plans/_template.zh.md' : 'docs/plans/_template.md');
|
|
111
|
+
if (!existsSync(templatePath)) {
|
|
112
|
+
return { ok: false, errors: ['docs/plans/_template.md pair missing in kit'] };
|
|
113
|
+
}
|
|
114
|
+
const date = parsed?.date ?? '1970-01-01';
|
|
115
|
+
const slug = parsed?.slug ?? 'plan';
|
|
116
|
+
const filled = fill(readFileSync(templatePath, 'utf8'), slug, date, titleFromSlug(slug));
|
|
117
|
+
const required = markdownH2Sections(filled);
|
|
118
|
+
const actual = markdownH2Sections(readFileSync(opts.file, 'utf8'));
|
|
119
|
+
const actualByHeading = new Map(actual.map((section) => [section.heading, section.body]));
|
|
120
|
+
const errors = [];
|
|
121
|
+
for (const section of required) {
|
|
122
|
+
const body = actualByHeading.get(section.heading);
|
|
123
|
+
if (body === undefined) {
|
|
124
|
+
errors.push(`missing heading: ${section.heading}`);
|
|
125
|
+
continue;
|
|
126
|
+
}
|
|
127
|
+
if (sectionIsPlaceholder(body, section.body)) {
|
|
128
|
+
errors.push(`placeholder-only section: ${section.heading}`);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return { ok: errors.length === 0, errors };
|
|
132
|
+
};
|
|
55
133
|
//# sourceMappingURL=plan.js.map
|
package/dist/plan.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../src/plan.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../src/plan.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ysk-kit/cli",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"bin": {
|
|
6
6
|
"ysk-kit": "./dist/index.js",
|
|
7
7
|
"yskk": "./dist/index.js"
|
|
8
8
|
},
|
|
9
9
|
"dependencies": {
|
|
10
|
-
"@ysk-kit/api-http": "1.2.
|
|
11
|
-
"@ysk-kit/contracts": "1.2.
|
|
10
|
+
"@ysk-kit/api-http": "1.2.1",
|
|
11
|
+
"@ysk-kit/contracts": "1.2.1",
|
|
12
12
|
"zod": "^4.6.5"
|
|
13
13
|
},
|
|
14
14
|
"devDependencies": {
|
|
@@ -7,3 +7,4 @@ Local notes for `apps/api`. Root law: `AGENTS.md`.
|
|
|
7
7
|
- JSON routes return `{ ok: true, data }` / `{ ok: false, error }`.
|
|
8
8
|
- Envelope exceptions stay listed in the root guide. Do not add one silently.
|
|
9
9
|
- Tests use in-memory ports. Do not start Redis, Stripe, Twilio, FCM, Jaeger, or Grafana.
|
|
10
|
+
- Plan cases with `docs/skills/test-plan.md`. Write them with `docs/skills/write-tests.md`.
|
|
@@ -5,3 +5,4 @@ Local notes for this client app. Root law: `AGENTS.md`. The same rule applies to
|
|
|
5
5
|
- Call the API only through `@ysk-kit/sdk` (React Query via `@ysk-kit/web-sdk`).
|
|
6
6
|
- No raw `fetch` to kit paths. No `@prisma/client`, `@ysk-kit/db-prisma`, or `apps/api/src/generated`.
|
|
7
7
|
- Do not import `@ysk-kit/observability`, Express, Fastify, jobs, mail, push, or the AWS SDK.
|
|
8
|
+
- Screens: `docs/skills/ui-design.md`. Not done until `docs/skills/ui-review.md` is green.
|
|
@@ -7,3 +7,4 @@ Local notes for `@ysk-kit/contracts`. Root law: `AGENTS.md`.
|
|
|
7
7
|
- No TypeScript `enum`. Use `as const` + Zod.
|
|
8
8
|
- Do not import apps, Prisma, Express, Fastify, React, or BullMQ.
|
|
9
9
|
- After path changes run `pnpm gen:openapi`. Still call paths through `@ysk-kit/sdk`.
|
|
10
|
+
- Contract tests live in this package. Follow `docs/skills/write-tests.md`.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Tests — in-memory ports, envelope, given/when/then
|
|
3
|
+
globs: "**/*.test.ts,**/*.test.tsx,**/*.spec.ts,apps/web/e2e/**/*"
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Local reminder. Law: `AGENTS.md`.
|
|
8
|
+
|
|
9
|
+
Plan with `docs/skills/test-plan.md`, then write with `docs/skills/write-tests.md`. In-memory ports only. Assert `{ ok, data }` / `{ ok, error }`. Do not start Redis, Stripe, Twilio, FCM, Jaeger, or Grafana.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: UI — kit tokens, @ysk-kit/ui, ui-review before done
|
|
3
|
+
globs: "packages/ui/**/*,packages/ui-logic/**/*,apps/web/src/**/*.tsx,apps/admin/src/**/*.tsx,apps/mobile/src/**/*.tsx,apps/desktop/src/renderer/**/*.tsx"
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Local reminder. Law: `AGENTS.md`.
|
|
8
|
+
|
|
9
|
+
Reuse `@ysk-kit/ui` and the zinc theme (`docs/skills/ui-design.md`). Do not invent a parallel design system. A screen is not done until `docs/skills/ui-review.md` is green. No raw `fetch`.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: test-plan
|
|
3
|
+
description: >
|
|
4
|
+
Produce a risk-ranked YSK Kit test plan (given/when/then, fixtures, out of scope)
|
|
5
|
+
mapped to contract, memory-port, API, SDK, client, and Playwright layers.
|
|
6
|
+
Use when the user asks how to test a feature, what cases to cover, or for a QA
|
|
7
|
+
checklist before writing tests or shipping.
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
Read `docs/skills/test-plan.md`. Law: `AGENTS.md`.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ui-design
|
|
3
|
+
description: >
|
|
4
|
+
Design and implement YSK Kit UI with existing tokens, @ysk-kit/ui, WCAG 2.2 AA,
|
|
5
|
+
forms mapped from the API envelope, and no generic AI-slop chrome.
|
|
6
|
+
Use when adding or changing web, admin, mobile, or desktop screens.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
Read `docs/skills/ui-design.md`. Law: `AGENTS.md`.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ui-review
|
|
3
|
+
description: >
|
|
4
|
+
QA checklist before declaring YSK Kit UI work done: visual, a11y, responsive,
|
|
5
|
+
states, copy, performance — with Playwright, keyboard, and axe verification.
|
|
6
|
+
Use when finishing a screen or when the user asks to review UI / UX / a11y.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
Read `docs/skills/ui-review.md`. Law: `AGENTS.md`.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: write-tests
|
|
3
|
+
description: >
|
|
4
|
+
Write professional YSK Kit tests: trophy per layer, in-memory ports, given/when/then,
|
|
5
|
+
deterministic fixtures, envelope and authz cases, exact Vitest/Playwright commands.
|
|
6
|
+
Use when adding tests, fixing a bug, or after test-plan.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
Read `docs/skills/write-tests.md`. Law: `AGENTS.md`.
|