@ysk-kit/cli 1.2.2 → 1.2.3

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/package.json CHANGED
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "name": "@ysk-kit/cli",
3
- "version": "1.2.2",
3
+ "version": "1.2.3",
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.2",
11
- "@ysk-kit/contracts": "1.2.2",
10
+ "@ysk-kit/api-http": "1.2.3",
11
+ "@ysk-kit/contracts": "1.2.3",
12
12
  "zod": "^4.6.5"
13
13
  },
14
14
  "devDependencies": {
@@ -8,3 +8,4 @@ Local notes for `apps/api`. Root law: `AGENTS.md`.
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
10
  - Plan cases with `docs/skills/test-plan.md`. Write them with `docs/skills/write-tests.md`.
11
+ - LLM product features: `docs/skills/llm-feature.md`. Red tests: `docs/skills/debug-issue.md`.
@@ -8,3 +8,4 @@ Local notes for `@ysk-kit/contracts`. Root law: `AGENTS.md`.
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
10
  - Contract tests live in this package. Follow `docs/skills/write-tests.md`.
11
+ - DTO / path / error-code diffs: `docs/skills/contract-change.md`.
@@ -6,4 +6,4 @@ alwaysApply: false
6
6
 
7
7
  Local reminder. Law: `AGENTS.md` (also `apps/api/AGENTS.md`).
8
8
 
9
- Prisma stays in `src/modules/*/infra` and shared `src/infra`. Domain and application do not import Express, Fastify, Prisma, React, or BullMQ. JSON uses `{ ok: true, data }` / `{ ok: false, error }`. Tests use in-memory ports. Schema changes: `docs/skills/db-migration.md`.
9
+ Prisma stays in `src/modules/*/infra` and shared `src/infra`. Domain and application do not import Express, Fastify, Prisma, React, or BullMQ. JSON uses `{ ok: true, data }` / `{ ok: false, error }`. Tests use in-memory ports. Schema changes: `docs/skills/db-migration.md`. LLM product features: `docs/skills/llm-feature.md`.
@@ -6,4 +6,4 @@ alwaysApply: false
6
6
 
7
7
  Local reminder. Law: `AGENTS.md` (also `packages/contracts/AGENTS.md`).
8
8
 
9
- Add DTO + `OkSchema` / `ErrSchema` before handlers or clients. No TypeScript `enum`. This package does not import apps, Prisma, Express, Fastify, React, or BullMQ.
9
+ Add DTO + `OkSchema` / `ErrSchema` before handlers or clients. No TypeScript `enum`. This package does not import apps, Prisma, Express, Fastify, React, or BullMQ. Contract diffs: `docs/skills/contract-change.md`.
@@ -6,4 +6,4 @@ alwaysApply: false
6
6
 
7
7
  Local reminder. Law: `AGENTS.md`.
8
8
 
9
- Procedure: `docs/skills/security-review.md`. Org-scoped use cases check membership in `application/` (template: `requireBiller`). Never log OTP, JWT, Stripe `sk_`, or webhook secrets. Inbound webhooks: `docs/skills/webhook-handling.md`.
9
+ Procedure: `docs/skills/security-review.md`. Org-scoped use cases check membership in `application/` (template: `requireBiller`). Never log OTP, JWT, Stripe `sk_`, or webhook secrets. Inbound webhooks: `docs/skills/webhook-handling.md`. LLM product prompts: `docs/skills/llm-feature.md`.
@@ -6,4 +6,4 @@ alwaysApply: false
6
6
 
7
7
  Local reminder. Law: `AGENTS.md`.
8
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.
9
+ Plan with `docs/skills/test-plan.md`, then write with `docs/skills/write-tests.md`. Red CI or a user report: `docs/skills/debug-issue.md`. In-memory ports only. Assert `{ ok, data }` / `{ ok, error }`. Do not start Redis, Stripe, Twilio, FCM, Jaeger, or Grafana.
@@ -3,6 +3,15 @@ name: add-capability
3
3
  description: >
4
4
  Merge a catalogued YSK Kit capability (llm, team, billing, push, jobs, mail, …) with ysk-kit add.
5
5
  Use when the user wants ysk-kit add llm/team/billing/push, restore a thin capability, or /add-capability.
6
+ 中文:加能力、llm、billing、push、doctor。
7
+ Do not use to invent a capability outside the catalogue or to add industry domain.
6
8
  ---
7
9
 
8
10
  Read `docs/skills/add-capability.md`. Law: `AGENTS.md`.
11
+
12
+ 1. Catalogue name only. `billing` needs `team` first.
13
+ 2. `pnpm ysk-kit add <name>`. Prisma → db-migration.
14
+ 3. Before production: billing→webhook-handling, llm→llm-feature, push credentials, apikey scope/rotation. Then doctor.
15
+ Gotcha: second add is a no-op when the skip token exists.
16
+ Verify: `pnpm ysk-kit doctor` then the five verify commands.
17
+ Full steps: `docs/skills/add-capability.md`.
@@ -3,6 +3,15 @@ name: add-module
3
3
  description: >
4
4
  Add a hexagonal HTTP module with ysk-kit add module (contract, DTO, Express+Fastify, SDK, web page).
5
5
  Use when the user wants a new resource, new API route, ysk-kit add module, or /add-module.
6
+ 中文:加模組、HTTP 切片、org 範圍、Express 與 Fastify 測試。
7
+ Do not use to mkdir apps/api/src/modules by hand or to restore llm/team/billing/push (add-capability).
6
8
  ---
7
9
 
8
10
  Read `docs/skills/add-module.md`. Law: `AGENTS.md`.
11
+
12
+ 1. `pnpm ysk-kit add module <kebab> --prisma --web`. Do not mkdir the slice.
13
+ 2. Fill DTO then `application/` rules. Schema → db-migration. Org-scoped: requireBiller + negative test.
14
+ 3. App tests on Express AND Fastify. Then verify-change.
15
+ Gotcha: no parallel tree; no TypeScript enum; clients use the SDK only.
16
+ Verify: `pnpm layers && pnpm typecheck && pnpm test && pnpm gen:openapi && pnpm ysk-kit check agent`
17
+ Full steps: `docs/skills/add-module.md`.
@@ -0,0 +1,19 @@
1
+ ---
2
+ name: contract-change
3
+ description: >
4
+ Change YSK Kit contracts first: breaking-change table, gen:openapi diff
5
+ (optional oasdiff), deprecation, new error codes, lockstep changeset bump.
6
+ Use when editing packages/contracts, ts-rest paths, DTOs, error codes,
7
+ OpenAPI, or a client-visible field.
8
+ 中文:合約、OpenAPI、破壞性變更、錯誤碼、changeset。
9
+ Do not use for application-only rules with no DTO/path change, or for Prisma SQL (use db-migration).
10
+ ---
11
+
12
+ Read `docs/skills/contract-change.md`. Law: `AGENTS.md`.
13
+
14
+ 1. Classify additive vs breaking. Ask before dropping a published field.
15
+ 2. Edit `@ysk-kit/contracts` first. `pnpm gen:openapi` then `git diff --exit-code docs/openapi.yaml`.
16
+ 3. Lockstep changeset (all 26) + CHANGELOG. Optional `npx oasdiff`.
17
+ Gotcha: new error codes need ERROR_MESSAGE zh-HK+en and HTTP_STATUS.
18
+ Verify: `pnpm --filter @ysk-kit/contracts test && pnpm gen:openapi`
19
+ Full steps: `docs/skills/contract-change.md`.
@@ -0,0 +1,18 @@
1
+ ---
2
+ name: debug-issue
3
+ description: >
4
+ Debug a YSK Kit failure by building a red feedback loop first: memory-port
5
+ tests, then HTTP on Express AND Fastify, then SDK, then e2e, then git bisect.
6
+ Use when a test, CI job, or user report is red; a flake; or /debug-issue.
7
+ 中文:除錯、紅燈迴圈、回歸測試、bisect、日誌遮罩。
8
+ Do not use for green-field features (plan-feature) or a security audit (security-review).
9
+ ---
10
+
11
+ Read `docs/skills/debug-issue.md`. Law: `AGENTS.md`.
12
+
13
+ 1. Write or isolate a red test first (memory-port, then Express+Fastify HTTP).
14
+ 2. Triage by error code. Fix the cause. Keep the regression test.
15
+ 3. Climb to SDK / e2e / git bisect only if the lower loop cannot see it.
16
+ Gotcha: do not log OTP/sk_/whsec_. Do not set RATE_LIMIT_MAX=0 in production.
17
+ Verify: the named Vitest is green, then the five verify commands.
18
+ Full steps: `docs/skills/debug-issue.md`.
@@ -12,7 +12,9 @@ description: >
12
12
 
13
13
  Read `docs/skills/desktop-electron.md`. Law: `AGENTS.md`.
14
14
 
15
- 1. Keep contextIsolation, nodeIntegration false, sandbox, webSecurity. Add CSP.
16
- 2. Deny navigation / new windows by default; allowlist `https:` for openExternal.
17
- 3. Validate IPC `senderFrame`. `safeStorage` only — no plaintext token fallback.
15
+ 1. Keep contextIsolation, nodeIntegration false, sandbox, webSecurity, session CSP.
16
+ 2. Deny unexpected navigation / window.open. Validate IPC `senderFrame`.
17
+ 3. `safeStorage` only; memory if unavailable. No plaintext token file.
18
+ Gotcha: do not `openExternal` a renderer string without an allowlist.
19
+ Verify: `pnpm --filter @ysk-kit/desktop test`
18
20
  Full steps: `docs/skills/desktop-electron.md`.
@@ -3,6 +3,15 @@ name: envelope-api
3
3
  description: >
4
4
  Keep YSK Kit JSON routes on { ok, data } / { ok, error } unless the change is one of the four exceptions.
5
5
  Use when adding a route, SSE, PDF, error shape, or /envelope-api.
6
+ 中文:envelope、錯誤碼、AppError、webhook JSON。
7
+ Do not use to invent a parallel error JSON or a fifth envelope exception without asking.
6
8
  ---
7
9
 
8
10
  Read `docs/skills/envelope-api.md`. Law: `AGENTS.md`.
11
+
12
+ 1. DTO + OkSchema/ErrSchema first. `throw new AppError('<CODE>')`.
13
+ 2. JSON stays envelope. Exceptions: LLM SSE, invoice PDF 302, GET /docs, GET /openapi.json.
14
+ 3. Webhooks: still envelope, raw body, off ts-rest. Sync ERROR_MESSAGE zh-HK and en.
15
+ Gotcha: ask before a fifth exception. New codes need HTTP_STATUS too.
16
+ Verify: fixtures show `{ ok, data }` / `{ ok, error }`.
17
+ Full steps: `docs/skills/envelope-api.md`.
@@ -3,6 +3,15 @@ name: fix-layers
3
3
  description: >
4
4
  Repair a pnpm layers (dependency-cruiser) failure without disabling hexagonal rules.
5
5
  Use when pnpm layers fails, a client imported Prisma, or /fix-layers.
6
+ 中文:分層、dependency-cruiser、客戶端 Prisma。
7
+ Do not use to edit .dependency-cruiser.cjs without explicit approval.
6
8
  ---
7
9
 
8
10
  Read `docs/skills/fix-layers.md`. Law: `AGENTS.md`.
11
+
12
+ 1. Read the cruiser rule name (`clients-no-server-infra`, `domain-no-infra`, …).
13
+ 2. Move the import (SDK / port in infra / type in contracts). Do not disable the rule.
14
+ 3. Re-run `pnpm layers`, then verify-change.
15
+ Gotcha: never edit `.dependency-cruiser.cjs` without explicit this-turn approval.
16
+ Verify: `pnpm layers`
17
+ Full steps: `docs/skills/fix-layers.md`.
@@ -0,0 +1,19 @@
1
+ ---
2
+ name: llm-feature
3
+ description: >
4
+ Build a YSK Kit LLM feature with a server-owned prompt, Zod-validated
5
+ output, untrusted-content delimiting, quota, and createFakeLlm evals.
6
+ Use when adding or changing /v1/llm, a product prompt, streaming, or ysk-kit add llm.
7
+ 中文:LLM、system prompt、配額、createFakeLlm、評測。
8
+ Do not use for generic chat UI with no server prompt, or for a security
9
+ audit of non-LLM code (security-review).
10
+ ---
11
+
12
+ Read `docs/skills/llm-feature.md`. Law: `AGENTS.md`.
13
+
14
+ 1. Client roles are user/assistant only (`LlmClientRoleSchema`). Server prepends `LLM_SYSTEM_PROMPT`.
15
+ 2. Fence untrusted user text. Parse structured output with Zod in application/.
16
+ 3. Quota `LLM_QUOTA_*` → RATE_LIMITED. Evals: ≥5 normal + ≥3 adversarial `createFakeLlm`. No live provider in CI.
17
+ Gotcha: v1.2.2 already removed client `system` and added quota — describe current code, do not list those as gaps.
18
+ Verify: `pnpm --filter @ysk-kit/api exec vitest run src/modules/llm`
19
+ Full steps: `docs/skills/llm-feature.md`.
@@ -3,6 +3,15 @@ name: new-product
3
3
  description: >
4
4
  Scaffold a product from YSK Kit with create-ysk-app (flavor, preset, database).
5
5
  Use when the user wants a new product, create-ysk-app, or /new-product.
6
+ 中文:開新產品、create-ysk-app、flavor、doctor。
7
+ Do not use to add a module inside this kit (add-module) or to invent a parallel monorepo.
6
8
  ---
7
9
 
8
10
  Read `docs/skills/new-product.md`. Law: `AGENTS.md`.
11
+
12
+ 1. Pick flavor (saas default; desktop / gateway / php-bridge / trading / static-web3).
13
+ 2. `pnpm create @ysk-kit/app <name> --preset thin --db mysql --flavor saas --yes`.
14
+ 3. migrate/seed when the flavor has an API. Run `pnpm ysk-kit doctor`.
15
+ Gotcha: leave `eas.json` / `app.config.ts` projectId as `replace-me` for a human.
16
+ Verify: `pnpm ysk-kit doctor`
17
+ Full steps: `docs/skills/new-product.md`.
@@ -3,6 +3,15 @@ name: plan-feature
3
3
  description: >
4
4
  Write a YSK Kit feature plan to docs/plans/<yyyy-mm-dd>-<slug>.md before contracts and code.
5
5
  Use when the user wants a plan, plan.md, design, or a multi-surface change.
6
+ 中文:計劃、plan.md、合約之前。
7
+ Do not use for typo-only or one-file mechanical renames.
6
8
  ---
7
9
 
8
10
  Read `docs/skills/plan-feature.md`. Law: `AGENTS.md`.
11
+
12
+ 1. Confirm a plan is required. Explore the tree (modules, contracts, SDK) first.
13
+ 2. `pnpm ysk-kit plan <slug>` and fill every template heading.
14
+ 3. `pnpm ysk-kit plan --check` both language files. Wait for approval.
15
+ Gotcha: do not implement first and backfill. If rejected as too short, expand.
16
+ Verify: `pnpm ysk-kit plan --check docs/plans/<date>-<slug>.md`
17
+ Full steps: `docs/skills/plan-feature.md`.
@@ -0,0 +1,20 @@
1
+ ---
2
+ name: review-change
3
+ description: >
4
+ Review a YSK Kit diff on two axes: Law (AGENTS.md hard rules, definition of
5
+ done, Do-not list) and Spec (the dated plan's scope and checklist). Flag
6
+ high-risk items for a human.
7
+ Use when asked to review a PR, a branch vs main, or uncommitted work; or /review-change.
8
+ 中文:審查、法律軸、計劃軸、高風險人工、合理化表。
9
+ Do not use for implementing the change (plan-feature) or a dedicated
10
+ security/Prisma deep dive (security-review, db-migration).
11
+ ---
12
+
13
+ Read `docs/skills/review-change.md`. Law: `AGENTS.md`.
14
+
15
+ 1. Diff is the report. Score Law (hard rules/DoD/Do-not) and Spec (dated plan).
16
+ 2. Flag authz, webhooks, SQL DROP, secrets, LLM, breaking contracts for a human.
17
+ 3. Run verify-change. Fill the rationalization table (no empty reasons).
18
+ Gotcha: do not self-approve high-risk; link security-review / db-migration.
19
+ Verify: `pnpm layers && pnpm typecheck && pnpm test && pnpm gen:openapi && pnpm ysk-kit check agent`
20
+ Full steps: `docs/skills/review-change.md`.
@@ -5,6 +5,15 @@ description: >
5
5
  mapped to contract, memory-port, API, SDK, client, and Playwright layers.
6
6
  Use when the user asks how to test a feature, what cases to cover, or for a QA
7
7
  checklist before writing tests or shipping.
8
+ 中文:測試計劃、風險、given/when/then。
9
+ Do not use for comment-only edits or to write the tests themselves (write-tests).
8
10
  ---
9
11
 
10
12
  Read `docs/skills/test-plan.md`. Law: `AGENTS.md`.
13
+
14
+ 1. Restate the change. Rank data loss, auth, money, tenancy, secrets first.
15
+ 2. Map each risk to a layer and file. Write given/when/then cases.
16
+ 3. Name in-memory fixtures and explicit out of scope. Then write-tests.
17
+ Gotcha: do not start Redis or Stripe to plan tests. E2E stays thin.
18
+ Verify: every case has layer + file; out of scope is written.
19
+ Full steps: `docs/skills/test-plan.md`.
@@ -4,6 +4,15 @@ description: >
4
4
  Design and implement YSK Kit UI with existing tokens, @ysk-kit/ui, WCAG 2.2 AA,
5
5
  forms mapped from the API envelope, and no generic AI-slop chrome.
6
6
  Use when adding or changing web, admin, mobile, or desktop screens.
7
+ 中文:畫面、zinc、表單、可及性。
8
+ Do not use for API-only changes or to invent a second component library.
7
9
  ---
8
10
 
9
11
  Read `docs/skills/ui-design.md`. Law: `AGENTS.md`.
12
+
13
+ 1. Reuse `@ysk-kit/ui` zinc tokens (`rounded-md`, `h-9`). No new palette.
14
+ 2. Loading / empty / error / disabled. Forms: FormField + contracts Zod.
15
+ 3. WCAG 2.2 AA, `zh-HK` length, no raw fetch. Then ui-review.
16
+ Gotcha: no purple gradients, no placeholder-as-label, no `div` buttons.
17
+ Verify: ui-review checklist, then verify-change.
18
+ Full steps: `docs/skills/ui-design.md`.
@@ -4,6 +4,15 @@ description: >
4
4
  QA checklist before declaring YSK Kit UI work done: visual, a11y, responsive,
5
5
  states, copy, performance — with Playwright, keyboard, and axe verification.
6
6
  Use when finishing a screen or when the user asks to review UI / UX / a11y.
7
+ 中文:UI 審查、鍵盤、375 視埠。
8
+ Do not use to design the screen (ui-design) or to treat one screenshot as proof.
7
9
  ---
8
10
 
9
11
  Read `docs/skills/ui-review.md`. Law: `AGENTS.md`.
12
+
13
+ 1. Walk visual, a11y, states, copy. Fail if any required box is unchecked.
14
+ 2. Keyboard-only on web/admin/desktop. Check 375 / 768 / 1280.
15
+ 3. Exercise the flow (click, type, submit). Screenshot is not proof.
16
+ Gotcha: do not add axe or screenshot diffs to CI unless asked.
17
+ Verify: checklist + `pnpm e2e` when login/shell changed.
18
+ Full steps: `docs/skills/ui-review.md`.
@@ -3,6 +3,15 @@ name: verify-change
3
3
  description: >
4
4
  Run the YSK Kit verification chain after every feature (layers, typecheck, test, OpenAPI, check agent).
5
5
  Use when finishing a change, after add module/capability, or /verify-change.
6
+ 中文:驗證、layers、typecheck、OpenAPI、check agent。
7
+ Do not use to skip commands and claim done, or to start Redis/Stripe in unit tests.
6
8
  ---
7
9
 
8
10
  Read `docs/skills/verify-change.md`. Law: `AGENTS.md`.
11
+
12
+ 1. Run `pnpm layers && pnpm typecheck && pnpm test && pnpm gen:openapi && pnpm ysk-kit check agent`.
13
+ 2. `git diff --exit-code docs/openapi.yaml` (commit YAML if HTTP changed).
14
+ 3. Conditional: lint, check:links, zh pair, lockstep changeset, e2e.
15
+ Gotcha: never claim done without running the five commands in this turn.
16
+ Verify: emit the verification report in the skill output format.
17
+ Full steps: `docs/skills/verify-change.md`.
@@ -12,7 +12,9 @@ description: >
12
12
 
13
13
  Read `docs/skills/webhook-handling.md`. Law: `AGENTS.md`.
14
14
 
15
- 1. Mount raw body before JSON parsers (Express + Fastify). Verify signature.
16
- 2. Persist event id, return `{ ok: true, data: { received: true } }`, fulfil via jobs.
17
- 3. Do not trust event order. Replay tests in memory; never call Stripe in CI.
15
+ 1. Mount raw body before JSON parsers on Express and Fastify.
16
+ 2. Verify HMAC; persist Stripe `event.id`; 200 envelope; skip duplicates.
17
+ 3. Replay tests in-memory. Do not call Stripe in CI.
18
+ Gotcha: 401 on bad signature. Fulfilment should queue, not block the ack.
19
+ Verify: `pnpm --filter @ysk-kit/api test`
18
20
  Full steps: `docs/skills/webhook-handling.md`.
@@ -4,6 +4,15 @@ description: >
4
4
  Write professional YSK Kit tests: trophy per layer, in-memory ports, given/when/then,
5
5
  deterministic fixtures, envelope and authz cases, exact Vitest/Playwright commands.
6
6
  Use when adding tests, fixing a bug, or after test-plan.
7
+ 中文:寫測試、Vitest、Playwright、回歸。
8
+ Do not use to plan cases (test-plan) or to start Redis/Stripe in CI.
7
9
  ---
8
10
 
9
11
  Read `docs/skills/write-tests.md`. Law: `AGENTS.md`.
12
+
13
+ 1. Put the case at the lowest layer that can fail it. Extend the generator test file.
14
+ 2. given/when/then; envelope `ok` / `error.code`; other-tenant negative when owned.
15
+ 3. Bug fixes: red regression test first. Express and Fastify for HTTP.
16
+ Gotcha: in-memory ports only. Never mock Prisma from a client.
17
+ Verify: `pnpm --filter @ysk-kit/<pkg> exec vitest run <file>`
18
+ Full steps: `docs/skills/write-tests.md`.
@@ -3,4 +3,4 @@ description: YSK Kit agent law — follow root AGENTS.md
3
3
  alwaysApply: true
4
4
  ---
5
5
 
6
- Follow `AGENTS.md` at the repo root (Chinese: `AGENTS.zh.md`). Do not copy that file here. Procedures: `docs/skills/`. Plan first when required: `pnpm ysk-kit plan <slug>` → `docs/plans/<yyyy-mm-dd>-<slug>.md`. New HTTP features start with `pnpm ysk-kit add module <kebab-name> --prisma --web`. Verify with `pnpm layers && pnpm typecheck && pnpm test && pnpm gen:openapi && pnpm ysk-kit check agent`. Security / Prisma / webhooks / Electron: `docs/skills/security-review.md`, `db-migration.md`, `webhook-handling.md`, `desktop-electron.md`.
6
+ Follow `AGENTS.md` at the repo root (Chinese: `AGENTS.zh.md`). Do not copy that file here. Procedures: `docs/skills/`. Plan first when required: `pnpm ysk-kit plan <slug>` → `docs/plans/<yyyy-mm-dd>-<slug>.md`. New HTTP features start with `pnpm ysk-kit add module <kebab-name> --prisma --web`. Verify with `pnpm layers && pnpm typecheck && pnpm test && pnpm gen:openapi && pnpm ysk-kit check agent`. Daily loop: `contract-change`, `debug-issue`, `review-change`, `llm-feature`. Security / Prisma / webhooks / Electron: `docs/skills/security-review.md`, `db-migration.md`, `webhook-handling.md`, `desktop-electron.md`.