@activatus/code-standards 2.0.0 → 3.0.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/README.md +12 -14
- package/docs/Guides/_category_.json +2 -2
- package/docs/Guides/migrating.md +50 -25
- package/docs/Guides/setup.md +52 -17
- package/docs/Standards/_category_.json +2 -2
- package/docs/Standards/agent-skills.md +29 -29
- package/docs/Standards/agent-specs.md +17 -32
- package/docs/Standards/direnv.mdx +8 -8
- package/docs/Standards/documentation.md +5 -2
- package/docs/Standards/editorconfig.md +23 -21
- package/docs/Standards/eslint.md +593 -402
- package/docs/Standards/human-readable-names.md +62 -22
- package/docs/Standards/lint-errors.md +3 -7
- package/docs/Standards/prettier.md +35 -26
- package/docs/Standards/readable-code.md +30 -0
- package/docs/Standards/stylelint.md +26 -11
- package/docs/Standards/styling.md +9 -3
- package/docs/Standards/tech-stack.md +3 -2
- package/docs/Structure/_category_.json +2 -2
- package/docs/Structure/component-organization.md +9 -2
- package/docs/Structure/folder-structure.md +26 -13
- package/docs/Structure/naming-conventions.md +0 -2
- package/docs/intro.md +1 -3
- package/docs/ontology.md +21 -26
- package/docs/templates.mdx +12 -49
- package/docs/version-history.md +143 -10
- package/package.json +6 -2
- package/scripts/renameSymbol.mjs +230 -0
- package/static/templates/.editorconfig +8 -11
- package/static/templates/AGENTS.md +16 -13
- package/static/templates/docs/development/coding-standards.md +4 -0
- package/static/templates/docsSite/docusaurus.config.mjs +144 -0
- package/static/templates/docsSite/sidebars.mjs +7 -0
- package/static/templates/docsSite/src/css/custom.css +6 -0
- package/static/templates/docsSite/tsconfig.json +5 -5
- package/static/templates/eslint/base/eslint.config.mjs +95 -70
- package/static/templates/eslint/nextjs/eslint.config.mjs +170 -126
- package/static/templates/eslint/react/eslint.config.mjs +160 -125
- package/static/templates/eslint/typescript/eslint.config.mjs +143 -115
- package/static/templates/globals.css +9 -9
- package/static/templates/next.config.mjs +13 -10
- package/static/templates/prettier.config.mjs +26 -0
- package/static/templates/stylelint/css/stylelint.config.mjs +37 -25
- package/static/templates/stylelint/scss/stylelint.config.mjs +10 -7
- package/docs/Standards/branch-naming.md +0 -66
- package/docs/Standards/conventional-commits.md +0 -189
- package/static/templates/.commitlintrc.json +0 -3
- package/static/templates/docsSite/docusaurus.config.ts +0 -119
- package/static/templates/docsSite/sidebars.ts +0 -8
- package/static/templates/husky/commit-msg +0 -1
- package/static/templates/husky/pre-commit +0 -1
- package/static/templates/prettier.config.js +0 -17
package/docs/ontology.md
CHANGED
|
@@ -17,7 +17,7 @@ An ontology is a shared vocabulary. When a person or an agent says "component",
|
|
|
17
17
|
|
|
18
18
|
This page only holds **code words**: how code is written, named, tested, documented and reviewed.
|
|
19
19
|
|
|
20
|
-
**Product words live in each project's own ontology**, in `docs/product/ontology.md`: the words for what that project builds and how its team plans the work. Launchpad's Draft Ticket, Pitch and UAT are product words, so they are in Launchpad's ontology, not here.
|
|
20
|
+
**Product words live in each project's own ontology**, in `docs/product/ontology.md`: the words for what that project builds and how its team plans the work. **Project-management words live there too**: project, feature, ticket, branch, commit, Pull Request, release. Every project defines those for itself. Launchpad's Draft Ticket, Pitch and UAT are product words, so they are in Launchpad's ontology, not here.
|
|
21
21
|
|
|
22
22
|
| | Code words | Product words |
|
|
23
23
|
| ------------ | -------------------------------------------------------- | --------------------------------------------------- |
|
|
@@ -48,12 +48,10 @@ The words stay the same everywhere. Only the casing changes, to match where the
|
|
|
48
48
|
|
|
49
49
|
## The terms
|
|
50
50
|
|
|
51
|
-
###
|
|
51
|
+
### Docs
|
|
52
52
|
|
|
53
53
|
| Term | Means |
|
|
54
54
|
| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
55
|
-
| `project` | One product's code and docs. One project is exactly one repository |
|
|
56
|
-
| `repository` | The Git repository that holds a project's code and docs |
|
|
57
55
|
| `decision` | A choice made on purpose and written down, never left implied |
|
|
58
56
|
| `decision_doc` | One Markdown file that records one decision and why it was made. Every file in a project's `docs/` folder is one. See [Docs](/Standards/documentation) |
|
|
59
57
|
| `docs` | A project's `docs/` folder: its Decision Docs, in the same standard folders in every project |
|
|
@@ -62,17 +60,17 @@ The words stay the same everywhere. Only the casing changes, to match where the
|
|
|
62
60
|
|
|
63
61
|
### People and agents
|
|
64
62
|
|
|
65
|
-
| Term | Means
|
|
66
|
-
| --------------- |
|
|
67
|
-
| `human` | A person, as opposed to an agent
|
|
68
|
-
| `developer` | A human who writes code
|
|
69
|
-
| `agent` | An AI that writes or checks code, such as Claude Code. It follows every standard a developer does
|
|
70
|
-
| `agent_spec` | A project's `AGENTS.md` file: the first thing an agent reads, setting out how to work on that project. See [Agent Specs](/Standards/agent-specs)
|
|
71
|
-
| `agent_harness` | Everything around an agent that runs it: the program it runs in (such as Claude Code), its instructions, the tools and permissions it has, and the rules it follows. The ontology says what words mean; the harness says how an agent behaves
|
|
72
|
-
| `context` | Everything an agent is given to read for its task: the agent spec, the docs and the code it is working on
|
|
73
|
-
| `tool` | One action an agent is allowed to take, such as editing a file or running the tests. Tools come from the agent harness or an MCP server
|
|
74
|
-
| `model` | The AI model an agent thinks with
|
|
75
|
-
| `mcp` | Model Context Protocol: the standard way to connect an agent to outside tools and data, such as Linear or GitHub. An MCP server offers tools, and the agent calls them
|
|
63
|
+
| Term | Means |
|
|
64
|
+
| --------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
65
|
+
| `human` | A person, as opposed to an agent |
|
|
66
|
+
| `developer` | A human who writes code |
|
|
67
|
+
| `agent` | An AI that writes or checks code, such as Claude Code. It follows every standard a developer does |
|
|
68
|
+
| `agent_spec` | A project's `AGENTS.md` file: the first thing an agent reads, setting out how to work on that project. See [Agent Specs](/Standards/agent-specs) |
|
|
69
|
+
| `agent_harness` | Everything around an agent that runs it: the program it runs in (such as Claude Code), its instructions, the tools and permissions it has, and the rules it follows. The ontology says what words mean; the harness says how an agent behaves |
|
|
70
|
+
| `context` | Everything an agent is given to read for its task: the agent spec, the docs and the code it is working on |
|
|
71
|
+
| `tool` | One action an agent is allowed to take, such as editing a file or running the tests. Tools come from the agent harness or an MCP server |
|
|
72
|
+
| `model` | The AI model an agent thinks with |
|
|
73
|
+
| `mcp` | Model Context Protocol: the standard way to connect an agent to outside tools and data, such as Linear or GitHub. An MCP server offers tools, and the agent calls them |
|
|
76
74
|
|
|
77
75
|
### Code
|
|
78
76
|
|
|
@@ -84,7 +82,10 @@ The words stay the same everywhere. Only the casing changes, to match where the
|
|
|
84
82
|
| `page_component` | A component used by one page, or by a few pages in one section. It lives in a `components/` folder beside that page, or in the section's route group. See [Where components live](/Structure/folder-structure#-where-components-live) |
|
|
85
83
|
| `props` | The values a component takes. `props` is a [dictionary word](/Standards/human-readable-names#dictionary). Their type is named after the component and ends in `Props`: `ButtonProps` |
|
|
86
84
|
| `type` | A TypeScript type or interface. Its name ends in `Props` or `Type` |
|
|
85
|
+
| `dependency` | Something the code relies on but does not define itself: a package it installs, or the functions handed into a function as its `dependencies`. How tickets wait on each other is not a dependency here: each project names that itself, such as Launchpad's `blocked_by` |
|
|
87
86
|
| `utils` | Reusable functions that are not components, such as `formatCurrency`. They live in a `utils/` folder: global, for one section, or for one component. Each function has its own folder with its test file and an `index.ts`. `utils` is a [dictionary word](/Standards/human-readable-names#dictionary). Never `helpers` or `utilities`. See [Utils](/Structure/folder-structure#-utils) |
|
|
87
|
+
| `services` | The business logic: what the app does, its rules and operations. Pages, API routes and server actions stay thin and call into `services/`. See [utils, services and lib](/Structure/folder-structure#utils-services-and-lib) |
|
|
88
|
+
| `lib` | Code that connects the app to something outside it, such as integration clients in `lib/integrations/stripe/`, and app-wide setup: permissions, middleware, validation, constants, errors and shared types |
|
|
88
89
|
| `route` | A web address in the app, such as `/account-settings` or `/api/calendar-events`, and the folder or file that creates it. Route folders are kebab-case, because their names become the URL. In Next.js, routes are the folders under `app/`. See [API Routes](/Structure/api-routes) |
|
|
89
90
|
| `server_component` / `client_component` | A component that runs on the server, and one that runs in the browser. They live in separate files, and the server one wraps the client one |
|
|
90
91
|
| `test_file` | The file that tests one function or component, named after it: `formatCurrency.test.ts`. Every function and component has one |
|
|
@@ -93,16 +94,11 @@ The words stay the same everywhere. Only the casing changes, to match where the
|
|
|
93
94
|
| `third_party_code` | Code we did not write: `node_modules/`, and anything copied into `vendor/`. It is never linted, reformatted or renamed |
|
|
94
95
|
| `global_palette` | The colours defined in `app/globals.css`. Every colour in a project comes from it. See [Styling](/Standards/styling) |
|
|
95
96
|
|
|
96
|
-
###
|
|
97
|
+
### Checks
|
|
97
98
|
|
|
98
|
-
| Term
|
|
99
|
-
|
|
|
100
|
-
| `
|
|
101
|
-
| `commit` | A saved change, with a [Conventional Commits](/Standards/conventional-commits) message. Only humans make commits, unless the project says agents may |
|
|
102
|
-
| `pull_request` | A request to merge a branch into `main`, with a description of what changed and why |
|
|
103
|
-
| `pull_request_review` | Checking a Pull Request against these standards before it is merged, by a human or an agent |
|
|
104
|
-
| `lint_error` | A broken rule the linter reports. Fix the code; never switch the rule off without a comment saying why. See [Lint Errors](/Standards/lint-errors) |
|
|
105
|
-
| `production` | The live app that real users use |
|
|
99
|
+
| Term | Means |
|
|
100
|
+
| ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
101
|
+
| `lint_error` | A broken rule the linter reports. Fix the code; never switch the rule off without a comment saying why. See [Lint Errors](/Standards/lint-errors) |
|
|
106
102
|
|
|
107
103
|
---
|
|
108
104
|
|
|
@@ -114,11 +110,10 @@ These are the terms most easily confused. The **Not** column is the word we do n
|
|
|
114
110
|
| ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------- |
|
|
115
111
|
| **Decision / Decision Doc** | The choice itself vs the file that records it | |
|
|
116
112
|
| **Docs / Docs Site** | The Markdown files vs the viewer that shows them | |
|
|
117
|
-
| **Human / Agent** | By default only a human commits. An agent makes the change and leaves it for a human to review | |
|
|
118
113
|
| **Props** | The values a component takes | `properties` |
|
|
119
114
|
| **Utils** | Reusable functions | `helpers`, `utilities` |
|
|
120
115
|
| **Dictionary Word / Third-Party Name** | A short name we chose to keep vs a name someone else chose for us | |
|
|
121
|
-
| **Design System / Shared / Page Component** | The same in every project (`components/ui/`) vs used on several pages of this project (`components/shared/`) vs used by one page or section (beside it) |
|
|
116
|
+
| **Design System / Shared / Page Component** | The same in every project (`components/ui/`) vs used on several pages of this project (`components/shared/`) vs used by one page or section (beside it) | |
|
|
122
117
|
|
|
123
118
|
---
|
|
124
119
|
|
package/docs/templates.mdx
CHANGED
|
@@ -8,14 +8,13 @@ import eslintTypescript from "!!raw-loader!@site/static/templates/eslint/typescr
|
|
|
8
8
|
import eslintReact from "!!raw-loader!@site/static/templates/eslint/react/eslint.config.mjs";
|
|
9
9
|
import eslintNextjs from "!!raw-loader!@site/static/templates/eslint/nextjs/eslint.config.mjs";
|
|
10
10
|
import eslintBase from "!!raw-loader!@site/static/templates/eslint/base/eslint.config.mjs";
|
|
11
|
-
import prettier from "!!raw-loader!@site/static/templates/prettier.config.
|
|
11
|
+
import prettier from "!!raw-loader!@site/static/templates/prettier.config.mjs";
|
|
12
12
|
import stylelintCss from "!!raw-loader!@site/static/templates/stylelint/css/stylelint.config.mjs";
|
|
13
13
|
import stylelintScss from "!!raw-loader!@site/static/templates/stylelint/scss/stylelint.config.mjs";
|
|
14
14
|
import globalsCss from "!!raw-loader!@site/static/templates/globals.css";
|
|
15
15
|
import editorconfig from "!!raw-loader!@site/static/templates/.editorconfig";
|
|
16
16
|
import nvmrc from "!!raw-loader!@site/static/templates/.nvmrc";
|
|
17
17
|
import envrc from "!!raw-loader!@site/static/templates/.envrc";
|
|
18
|
-
import commitlint from "!!raw-loader!@site/static/templates/.commitlintrc.json";
|
|
19
18
|
import skillLint from "!!raw-loader!@site/static/templates/skills/lint.md";
|
|
20
19
|
import skillLintFix from "!!raw-loader!@site/static/templates/skills/lintFix.md";
|
|
21
20
|
import skillFormat from "!!raw-loader!@site/static/templates/skills/format.md";
|
|
@@ -25,8 +24,8 @@ import skillSecurityAudit from "!!raw-loader!@site/static/templates/skills/secur
|
|
|
25
24
|
import skillTypescript from "!!raw-loader!@site/static/templates/skills/typescript.md";
|
|
26
25
|
import skillTest from "!!raw-loader!@site/static/templates/skills/test.md";
|
|
27
26
|
import docsSitePackage from "!!raw-loader!@site/static/templates/docsSite/package.json.txt";
|
|
28
|
-
import docsSiteConfig from "!!raw-loader!@site/static/templates/docsSite/docusaurus.config.
|
|
29
|
-
import docsSiteSidebars from "!!raw-loader!@site/static/templates/docsSite/sidebars.
|
|
27
|
+
import docsSiteConfig from "!!raw-loader!@site/static/templates/docsSite/docusaurus.config.mjs";
|
|
28
|
+
import docsSiteSidebars from "!!raw-loader!@site/static/templates/docsSite/sidebars.mjs";
|
|
30
29
|
import docsSiteTsconfig from "!!raw-loader!@site/static/templates/docsSite/tsconfig.json";
|
|
31
30
|
import docsSiteWorkspace from "!!raw-loader!@site/static/templates/docsSite/pnpm-workspace.yaml";
|
|
32
31
|
import docsSiteCss from "!!raw-loader!@site/static/templates/docsSite/src/css/custom.css";
|
|
@@ -34,8 +33,6 @@ import docsSiteGitignore from "!!raw-loader!@site/static/templates/docsSite/giti
|
|
|
34
33
|
import decisionDoc from "!!raw-loader!@site/static/templates/decision-doc.md";
|
|
35
34
|
import docsSiteHome from "!!raw-loader!@site/static/templates/docsSite/src/pages/index.tsx";
|
|
36
35
|
import nextConfig from "!!raw-loader!@site/static/templates/next.config.mjs";
|
|
37
|
-
import huskyHook from "!!raw-loader!@site/static/templates/husky/commit-msg";
|
|
38
|
-
import huskyPreCommit from "!!raw-loader!@site/static/templates/husky/pre-commit";
|
|
39
36
|
|
|
40
37
|
# Templates
|
|
41
38
|
|
|
@@ -43,6 +40,8 @@ Ready-made files to copy into a project. Every config on this page is the exact
|
|
|
43
40
|
|
|
44
41
|
Each file is also served as a plain file, so a person or an AI agent can fetch it directly instead of copying from this page.
|
|
45
42
|
|
|
43
|
+
**Every config file is `.mjs`, even in a TypeScript project.** Never convert one to `.ts` or `.mts`. It works in both, so every project looks the same. A tool that cannot read `.mjs` keeps its own format.
|
|
44
|
+
|
|
46
45
|
| File | Copy to | Plain file |
|
|
47
46
|
| ------------------------------------------------ | ------------------------------------------ | ------------------------------------------------------------------------------------------------------------- |
|
|
48
47
|
| [AGENTS.md](#agents) | `AGENTS.md` in the project root | [`/templates/AGENTS.md`](pathname:///templates/AGENTS.md) |
|
|
@@ -50,16 +49,14 @@ Each file is also served as a plain file, so a person or an AI agent can fetch i
|
|
|
50
49
|
| [ESLint — React + TypeScript](#eslintreact) | `eslint.config.mjs` in the project root | [`/templates/eslint/react/eslint.config.mjs`](pathname:///templates/eslint/react/eslint.config.mjs) |
|
|
51
50
|
| [ESLint — Next.js](#eslintnextjs) | `eslint.config.mjs` in the project root | [`/templates/eslint/nextjs/eslint.config.mjs`](pathname:///templates/eslint/nextjs/eslint.config.mjs) |
|
|
52
51
|
| [ESLint — JavaScript / Node.js](#eslintbase) | `eslint.config.mjs` in the project root | [`/templates/eslint/base/eslint.config.mjs`](pathname:///templates/eslint/base/eslint.config.mjs) |
|
|
53
|
-
| [Prettier](#prettier) | `prettier.config.
|
|
52
|
+
| [Prettier](#prettier) | `prettier.config.mjs` in the project root | [`/templates/prettier.config.mjs`](pathname:///templates/prettier.config.mjs) |
|
|
54
53
|
| [Stylelint — CSS and CSS Modules](#stylelintcss) | `stylelint.config.mjs` in the project root | [`/templates/stylelint/css/stylelint.config.mjs`](pathname:///templates/stylelint/css/stylelint.config.mjs) |
|
|
55
54
|
| [Stylelint — SCSS](#stylelintscss) | `stylelint.config.mjs` in the project root | [`/templates/stylelint/scss/stylelint.config.mjs`](pathname:///templates/stylelint/scss/stylelint.config.mjs) |
|
|
56
55
|
| [Global styles and colour palette](#globalscss) | `app/globals.css` | [`/templates/globals.css`](pathname:///templates/globals.css) |
|
|
57
56
|
| [EditorConfig](#editorconfig) | `.editorconfig` in the project root | [`/templates/.editorconfig`](pathname:///templates/.editorconfig) |
|
|
58
57
|
| [Node version](#nvmrc) | `.nvmrc` in the project root | [`/templates/.nvmrc`](pathname:///templates/.nvmrc) |
|
|
59
58
|
| [direnv](#envrc) | `.envrc` in the project root | [`/templates/.envrc`](pathname:///templates/.envrc) |
|
|
60
|
-
| [Commitlint](#commitlint) | `.commitlintrc.json` in the project root | [`/templates/.commitlintrc.json`](pathname:///templates/.commitlintrc.json) |
|
|
61
59
|
| [Agent skills](#skills) | `.agents/skills/` and `.claude/commands/` | Eight files — see [below](#skills) |
|
|
62
|
-
| [Husky commit hook](#husky) | `.husky/commit-msg` | [`/templates/husky/commit-msg`](pathname:///templates/husky/commit-msg) |
|
|
63
60
|
| [Docs site](#docs-site) | `docsSite/` in the project root | Several files — see [below](#docs-site) |
|
|
64
61
|
| [`/docs` route](#docs-route) | `next.config.mjs` | [`/templates/next.config.mjs`](pathname:///templates/next.config.mjs) |
|
|
65
62
|
| [Document templates](#document-templates) | `docs/` in the project root | Several files — see [below](#document-templates) |
|
|
@@ -128,11 +125,11 @@ For plain JavaScript and Node.js projects.
|
|
|
128
125
|
|
|
129
126
|
## Prettier {#prettier}
|
|
130
127
|
|
|
131
|
-
**Copy to:** `prettier.config.
|
|
128
|
+
**Copy to:** `prettier.config.mjs` in the project root
|
|
132
129
|
|
|
133
130
|
See the [Prettier page](/Standards/prettier).
|
|
134
131
|
|
|
135
|
-
<CodeBlock language="js" title="prettier.config.
|
|
132
|
+
<CodeBlock language="js" title="prettier.config.mjs">
|
|
136
133
|
{prettier}
|
|
137
134
|
</CodeBlock>
|
|
138
135
|
|
|
@@ -210,18 +207,6 @@ Run `direnv allow` after adding it. See [direnv + nvm](/Standards/direnv).
|
|
|
210
207
|
|
|
211
208
|
---
|
|
212
209
|
|
|
213
|
-
## Commitlint {#commitlint}
|
|
214
|
-
|
|
215
|
-
**Copy to:** `.commitlintrc.json` in the project root
|
|
216
|
-
|
|
217
|
-
See [Conventional Commits](/Standards/conventional-commits).
|
|
218
|
-
|
|
219
|
-
<CodeBlock language="json" title=".commitlintrc.json">
|
|
220
|
-
{commitlint}
|
|
221
|
-
</CodeBlock>
|
|
222
|
-
|
|
223
|
-
---
|
|
224
|
-
|
|
225
210
|
## Agent skills {#skills}
|
|
226
211
|
|
|
227
212
|
**Copy to:** `.agents/skills/` in the project root, and again to `.claude/commands/` so Claude Code picks them up as slash commands.
|
|
@@ -305,28 +290,6 @@ Runs the test suite; reports failures grouped by cause, tests that never ran, an
|
|
|
305
290
|
|
|
306
291
|
---
|
|
307
292
|
|
|
308
|
-
## Husky commit hook {#husky}
|
|
309
|
-
|
|
310
|
-
**Copy to:** `.husky/commit-msg` in the project root
|
|
311
|
-
|
|
312
|
-
Refuses a commit whose message does not follow [Conventional Commits](/Standards/conventional-commits#enforcing-commit-messages). Plain file: [`/templates/husky/commit-msg`](pathname:///templates/husky/commit-msg)
|
|
313
|
-
|
|
314
|
-
<CodeBlock language="text" title=".husky/commit-msg">
|
|
315
|
-
{huskyHook}
|
|
316
|
-
</CodeBlock>
|
|
317
|
-
|
|
318
|
-
### Lint before commit {#husky-pre-commit}
|
|
319
|
-
|
|
320
|
-
**Copy to:** `.husky/pre-commit` in the project root
|
|
321
|
-
|
|
322
|
-
Refuses a commit while `pnpm lint` reports errors. Plain file: [`/templates/husky/pre-commit`](pathname:///templates/husky/pre-commit)
|
|
323
|
-
|
|
324
|
-
<CodeBlock language="text" title=".husky/pre-commit">
|
|
325
|
-
{huskyPreCommit}
|
|
326
|
-
</CodeBlock>
|
|
327
|
-
|
|
328
|
-
---
|
|
329
|
-
|
|
330
293
|
## Docs site {#docs-site}
|
|
331
294
|
|
|
332
295
|
**Copy to:** a `docsSite/` folder in the project root
|
|
@@ -336,8 +299,8 @@ The Docusaurus viewer that shows the project's `docs/` folder at `/docs`. Copy e
|
|
|
336
299
|
| File | Plain file |
|
|
337
300
|
| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------- |
|
|
338
301
|
| `package.json` | [`/templates/docsSite/package.json.txt`](pathname:///templates/docsSite/package.json.txt) — rename to `package.json` |
|
|
339
|
-
| `docusaurus.config.
|
|
340
|
-
| `sidebars.
|
|
302
|
+
| `docusaurus.config.mjs` | [`/templates/docsSite/docusaurus.config.mjs`](pathname:///templates/docsSite/docusaurus.config.mjs) |
|
|
303
|
+
| `sidebars.mjs` | [`/templates/docsSite/sidebars.mjs`](pathname:///templates/docsSite/sidebars.mjs) |
|
|
341
304
|
| `tsconfig.json` | [`/templates/docsSite/tsconfig.json`](pathname:///templates/docsSite/tsconfig.json) |
|
|
342
305
|
| `pnpm-workspace.yaml` | [`/templates/docsSite/pnpm-workspace.yaml`](pathname:///templates/docsSite/pnpm-workspace.yaml) |
|
|
343
306
|
| `src/css/custom.css` | [`/templates/docsSite/src/css/custom.css`](pathname:///templates/docsSite/src/css/custom.css) |
|
|
@@ -347,7 +310,7 @@ The Docusaurus viewer that shows the project's `docs/` folder at `/docs`. Copy e
|
|
|
347
310
|
|
|
348
311
|
Set `PROJECT_NAME` at the top of the config:
|
|
349
312
|
|
|
350
|
-
<CodeBlock language="
|
|
313
|
+
<CodeBlock language="js" title="docusaurus.config.mjs">
|
|
351
314
|
{docsSiteConfig}
|
|
352
315
|
</CodeBlock>
|
|
353
316
|
|
|
@@ -355,7 +318,7 @@ Set `PROJECT_NAME` at the top of the config:
|
|
|
355
318
|
{docsSitePackage}
|
|
356
319
|
</CodeBlock>
|
|
357
320
|
|
|
358
|
-
<CodeBlock language="
|
|
321
|
+
<CodeBlock language="js" title="sidebars.mjs">
|
|
359
322
|
{docsSiteSidebars}
|
|
360
323
|
</CodeBlock>
|
|
361
324
|
|
package/docs/version-history.md
CHANGED
|
@@ -21,21 +21,150 @@ sidebar_label: "Version History"
|
|
|
21
21
|
2. **Update the package:** `pnpm update @activatus/code-standards --latest`. Then read this page from `node_modules/@activatus/code-standards/docs/version-history.md`.
|
|
22
22
|
3. **Read each version newer than the project's**, oldest first. Skip any change to a standard the project opted out of: they are listed in `docs/development/coding-standards.md`.
|
|
23
23
|
4. **For each change, do the "What to do" steps**, then run the "How to check" searches. A search that still finds something means the change is not finished.
|
|
24
|
-
5. **
|
|
25
|
-
6. **
|
|
26
|
-
7. **Update the version number** in `AGENTS.md` once every change is done.
|
|
24
|
+
5. **Run `pnpm lint`, `pnpm test` and the build** after each change.
|
|
25
|
+
6. **Update the version number** in `AGENTS.md` once every change is done.
|
|
27
26
|
|
|
28
27
|
**When a change does not fit the project**, for example it renames a folder the project does not have, skip it. If you are not sure, ask; do not guess.
|
|
29
28
|
|
|
30
29
|
## Adding a version
|
|
31
30
|
|
|
32
|
-
Anyone changing the standards adds a version,
|
|
31
|
+
Anyone changing the standards adds a version, alongside the change:
|
|
33
32
|
|
|
34
|
-
- **One version per
|
|
33
|
+
- **One version per release**, numbered one higher than the last. Whole numbers only. A version can collect several changes before it is released.
|
|
35
34
|
- **Bump the package's major version to match** in `package.json`: version 3 is `3.0.0`. Then publish it to npm (npmjs.com) with `pnpm publish`. pnpm is the tool; npm is where the package lives, and projects install it from there with `pnpm add`.
|
|
36
35
|
- **For every change, write:** what changed, why, what to do in a project, and how to check it is done. Write it for an agent that has not read the rest of the standards.
|
|
37
36
|
- **If a project has nothing to do, say so.**
|
|
38
37
|
- **Newest version at the top.**
|
|
38
|
+
- **Work in progress goes under `## Version N — not released yet`**, with a line saying projects should not apply it yet. Changes can be added to it over time. To release it: drop "not released yet", add the **Released** date and **Updates from** line, set `package.json` to `N.0.0`, then publish.
|
|
39
|
+
- **Fixing a released version** bumps only the last number: `3.0.0` → `3.0.1`. Update the version's changes in place, and list what was fixed under its **Fixes**. Projects keep the same version number in `AGENTS.md`.
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## Version 3
|
|
44
|
+
|
|
45
|
+
**Released:** 2026-10-17 · **Updates from:** version 2 · **Latest fix:** 3.0.1
|
|
46
|
+
|
|
47
|
+
Install it with `pnpm add -D @activatus/code-standards@3.0.1`. Do change 1 first: it says which parts of the project's `AGENTS.md` are now the project's own to write.
|
|
48
|
+
|
|
49
|
+
**Fixes in 3.0.1.** If the project already applied 3.0.0, check these:
|
|
50
|
+
|
|
51
|
+
- Setup list numbers are permanent again: 19, 20 and 22 are marked removed, and AGENTS.md and the Ontology are back to 21 and 23. Choices recorded under the version 2 numbers are still right.
|
|
52
|
+
- The Husky lint hook is no longer a standard. Lint must pass before work is finished; how that is enforced is the project's choice.
|
|
53
|
+
- Every name ending in `Reference` uses `Ref`, not only React refs.
|
|
54
|
+
- The rename script takes a list of renames with `--list`.
|
|
55
|
+
|
|
56
|
+
### 1. Project workflow is no longer part of the standards
|
|
57
|
+
|
|
58
|
+
**Why:** The standards are a base for code. How a project runs its work — branch names, commit messages, Pull Requests, merging, releases, and whether AI agents may commit — is each project's own decision, and every project makes it differently.
|
|
59
|
+
|
|
60
|
+
**What to do:**
|
|
61
|
+
|
|
62
|
+
- The Branch Naming and Commit Messages standards are gone, along with standards 19, 20 and 22 from the setup list. Keep whatever the project already does, and make sure it is written up in the project's own docs, usually `docs/development/`.
|
|
63
|
+
- **Standards 19, 20 and 22 keep their numbers, marked as removed.** No other number changes. If `docs/development/coding-standards.md` records a choice for 19, 20 or 22, move that rule into Project workflow and take it off the list.
|
|
64
|
+
- In `AGENTS.md`, replace the "Development workflow" section with a **Project workflow** section, copied from the [template](/templates#agents). Fill it in with the project's own rules: who commits, branches, commit messages, Pull Requests, merging and releases. Put the most important rule for agents, usually whether they may commit, at the very top: one line, or a short section if it needs more.
|
|
65
|
+
- Remove the "Never commit code" and "Do not create, switch or delete branches" lines from "Out of scope for AI agents", unless they are the project's own rule. If they are, they belong in Project workflow.
|
|
66
|
+
- Commitlint and the Husky hooks (`.husky/commit-msg` and `.husky/pre-commit`) are no longer templates. Keep them if the project wants them: they are now the project's choice. The standard is only that `pnpm lint` passes before work is finished. See [When lint must pass](/Standards/lint-errors#when-lint-must-pass).
|
|
67
|
+
|
|
68
|
+
**How to check:** `AGENTS.md` has a Project workflow section, and every rule in it is written up in the project's docs.
|
|
69
|
+
|
|
70
|
+
### 2. `lib`, `ref` and `repo` are dictionary words, and `library/` is `lib/`
|
|
71
|
+
|
|
72
|
+
**Why:** They are the words developers use. `lib/` is the name Next.js and shadcn/ui use too.
|
|
73
|
+
|
|
74
|
+
**What to do:**
|
|
75
|
+
|
|
76
|
+
- Rename the `library/` folder to `lib/` with `git mv`, and fix the imports: `@/library/` → `@/lib/`.
|
|
77
|
+
- Rename every name ending in `Reference` to end in `Ref`, whatever it refers to: `inputReference` → `inputRef`, `surfaceReference` → `surfaceRef`. Rename `repository` back to `repo` where it is short for a Git repository, such as `repositoryName` → `repoName`. Use the editor's Rename Symbol (F2), or the [rename script](/Guides/migrating#renaming-from-the-command-line).
|
|
78
|
+
- Copy the new [ESLint config](/Standards/eslint). The naming rule now has `replacements: { docs: false, lib: false, props: false, ref: false, repo: false, utils: false }` and `allowList: { params: true, searchParams: true }`.
|
|
79
|
+
- Update the "Dictionary words stay short" line in `AGENTS.md` from the [template](/templates#agents), and remove `lib/` → `library/` and `repo` → `repository` from its Never / Always table.
|
|
80
|
+
|
|
81
|
+
**How to check:** There is no `library/` folder, `grep -rn "@/library" --exclude-dir=node_modules .` finds nothing, and `pnpm lint` passes.
|
|
82
|
+
|
|
83
|
+
### 3. utils, services and lib are defined
|
|
84
|
+
|
|
85
|
+
**Why:** It wasn't clear which functions go in `utils/`, `services/` or `lib/`. See [utils, services and lib](/Structure/folder-structure#utils-services-and-lib).
|
|
86
|
+
|
|
87
|
+
**What to do:** Check each function in those three folders against the definitions, and move any that are in the wrong one. The common one: a function in `utils/` that calls a database or an API belongs in `services/` or `lib/`. Shared constants and types live in `lib/constants/` and `lib/types/`; a component's own types stay in its `types.ts`. Move any root-level `constants/` or `types/` folder into `lib/`.
|
|
88
|
+
|
|
89
|
+
**How to check:** Nothing in `utils/` imports from `services/`, `lib/integrations/` or a database client, and there is no root-level `constants/` or `types/` folder.
|
|
90
|
+
|
|
91
|
+
### 4. The Ontology only holds code words
|
|
92
|
+
|
|
93
|
+
**Why:** Project-management words mean different things in different projects. Launchpad's "project" is a product made of several MVPs, and its Pull Requests go through `feature → dev → uat → main`.
|
|
94
|
+
|
|
95
|
+
**What to do:** The code [Ontology](/ontology) no longer defines `project`, `repository`, `branch`, `commit`, `pull_request`, `pull_request_review` or `production`, and `human`, `developer` and `agent` no longer say who may commit. If the project uses those words, define them in its own `docs/product/ontology.md`, the way the project actually works.
|
|
96
|
+
|
|
97
|
+
**How to check:** The project's ontology defines every project-management word it uses.
|
|
98
|
+
|
|
99
|
+
### 5. Every config file is `.mjs`
|
|
100
|
+
|
|
101
|
+
**Why:** `.mjs` works in TypeScript and JavaScript projects alike, so every project looks the same.
|
|
102
|
+
|
|
103
|
+
**What to do:**
|
|
104
|
+
|
|
105
|
+
- Rename each config file that is `.js`, `.ts` or `.mts` to `.mjs`, even in a TypeScript project, wherever the tool can read `.mjs`: `prettier.config.mjs`, `next.config.mjs`, `eslint.config.mjs`, `docsSite/docusaurus.config.mjs`, `docsSite/sidebars.mjs` and so on. Use `git mv`. Never convert a config to `.ts` or `.mts`.
|
|
106
|
+
- Remove any TypeScript-only syntax as you go. A type annotation becomes a JSDoc comment: `const config: NextConfig = {` becomes `/** @type {import("next").NextConfig} */ const config = {`. Copy the [`docsSite/` templates](/templates#docs-site), which are already `.mjs`.
|
|
107
|
+
- Update anything that names the old file, such as `sidebarPath: './sidebars.mjs'` in the docs site config.
|
|
108
|
+
|
|
109
|
+
**How to check:** `ls *.config.* docsSite/*.config.* docsSite/sidebars.*` shows only `.mjs` files, and `pnpm lint`, `pnpm format:check`, the build and `pnpm docs:build` still run.
|
|
110
|
+
|
|
111
|
+
### 6. Prettier: 70-character lines and tabs
|
|
112
|
+
|
|
113
|
+
**Why:** A lot of code is read and reviewed on a phone, where short lines fit the screen. Tabs let each person see the indent at the width they like.
|
|
114
|
+
|
|
115
|
+
**What to do:**
|
|
116
|
+
|
|
117
|
+
- Copy the new [`prettier.config.mjs`](/templates#prettier) and [`.editorconfig`](/templates#editorconfig). Prettier now has `printWidth: 70` and `useTabs: true`, and keeps spaces for Markdown and YAML. EditorConfig indents with tabs, except Markdown, YAML and Python.
|
|
118
|
+
- Run `pnpm format` once, on its own, with no other changes mixed in. It touches nearly every file, so keep it apart from real changes.
|
|
119
|
+
- If the project shows code on a web page, such as its docs site, add `pre, code { tab-size: 2; }` to its CSS, so tabs are not shown 8 characters wide. The [`docsSite/` template](/templates#docs-site) already has it.
|
|
120
|
+
|
|
121
|
+
**How to check:** `pnpm format:check` passes.
|
|
122
|
+
|
|
123
|
+
### 7. When a name clashes, rename our own thing first
|
|
124
|
+
|
|
125
|
+
**Why:** A third-party name is the name everyone knows it by, and a clash usually means our own name is too vague. Renaming an import for taste makes the code harder to search and to match against the package's docs.
|
|
126
|
+
|
|
127
|
+
**What to do:** Search for renamed imports: `grep -rn "import {[^}]* as " --include=*.ts --include=*.tsx --exclude-dir=node_modules .`. For each one:
|
|
128
|
+
|
|
129
|
+
- **If nothing in the file clashes with the original name**, undo the rename and use the original name.
|
|
130
|
+
- **If our own thing clashes**, rename ours to a more specific full-word name, with the editor's Rename Symbol or the [rename script](/Guides/migrating#renaming-from-the-command-line). Then undo the import rename. For example, our `createClient` becomes `createProjectDatabaseClient`, and Supabase's `createClient` keeps its name.
|
|
131
|
+
- **If both names are third-party, or ours is fixed by a framework** (such as a Next.js route's `GET`), keep the import renamed, as the owner plus the original name, never shortened: `Link as LucideLinkIcon`.
|
|
132
|
+
|
|
133
|
+
See [When a name clashes](/Standards/human-readable-names#when-a-name-clashes).
|
|
134
|
+
|
|
135
|
+
**How to check:** Every renamed import that is left clashes with another third-party name or a framework-fixed name, and starts with its owner's name.
|
|
136
|
+
|
|
137
|
+
### 8. Name a type after what it is, not the job it does
|
|
138
|
+
|
|
139
|
+
**Why:** A type named after its role in one function, such as `StartAgentRunDependenciesType`, is a second name for what is really part of that function's props.
|
|
140
|
+
|
|
141
|
+
**What to do:** Find types used for only one field of one `Props` type. Move each one inside that `Props` and delete the separate type. Where the object is built somewhere else, remove its type annotation: TypeScript checks it against the `Props` when it is passed in. See [Name a type after what it is](/Standards/readable-code#name-a-type-after-what-it-is-not-the-job-it-does).
|
|
142
|
+
|
|
143
|
+
**How to check:** No type is used only as the type of one field of one `Props`.
|
|
144
|
+
|
|
145
|
+
### 9. "go" means carry on
|
|
146
|
+
|
|
147
|
+
**Why:** People often send just "go" to nudge an agent along, for example when their connection drops and the agent looks stuck. An agent must never read it as permission to commit.
|
|
148
|
+
|
|
149
|
+
**What to do:** Copy the line that starts **"go" means carry on** from the top of the [`AGENTS.md` template](/templates#agents) into the top of the project's `AGENTS.md`.
|
|
150
|
+
|
|
151
|
+
**How to check:** The project's `AGENTS.md` has the line near the top.
|
|
152
|
+
|
|
153
|
+
### 10. Unfinished changes are recorded, not hidden
|
|
154
|
+
|
|
155
|
+
**Why:** A big change, such as switching on the standard ESLint config, may be finished later. The version number has to stay honest about that.
|
|
156
|
+
|
|
157
|
+
**What to do:** Add an "Unfinished changes" section to `docs/development/coding-standards.md`, from the [template](/templates#document-templates). List any change from any version that is not done yet, with what is left and where it is being done, or write "None". See [Finishing a change later](/Guides/setup#finishing-a-change-later).
|
|
158
|
+
|
|
159
|
+
**How to check:** `docs/development/coding-standards.md` has an "Unfinished changes" section.
|
|
160
|
+
|
|
161
|
+
### No action needed
|
|
162
|
+
|
|
163
|
+
- The [Ontology](/ontology) defines `dependency`: something the code relies on but does not define itself. Ticket relationships are not dependencies; each project names those itself.
|
|
164
|
+
- The package now ships a rename script for agents working from the command line, using TypeScript's own rename: `node node_modules/@activatus/code-standards/scripts/renameSymbol.mjs <file> <currentName> <newName>`. Pass `--list renames.txt` to do many renames in one run, one per line. It can't reach keys in untyped object literals, such as the expected value in a test's `toEqual({ … })`: search the tests for old names and fix those by hand. See [Renaming from the command line](/Guides/migrating#renaming-from-the-command-line).
|
|
165
|
+
- The [Setup](/Guides/setup) guide says the standards are a base for code only, and explains how to get past pnpm's `minimumReleaseAge` when a new version is too fresh to install.
|
|
166
|
+
- [Folder Structure](/Structure/folder-structure) explains each `lib/` folder in one line.
|
|
167
|
+
- The [ESLint page](/Standards/eslint#installation) says the config needs ESLint 10.4 or later, and the React configs explain why they set `settings.react.version`.
|
|
39
168
|
|
|
40
169
|
---
|
|
41
170
|
|
|
@@ -73,14 +202,17 @@ Anyone changing the standards adds a version, in the same pull request as the ch
|
|
|
73
202
|
**What to do:**
|
|
74
203
|
|
|
75
204
|
- Rename the folders with `git mv`: `documentation/` → `docs/`, `documentationSite/` → `docsSite/`.
|
|
205
|
+
- **If both `docsSite/` and `documentationSite/` exist**, merge them into `docsSite/`: move each tracked file from `documentationSite/` with `git mv`, keeping whichever copy is newer, then delete `documentationSite/`. Ask the person before deleting a file that exists in only one of them.
|
|
76
206
|
- Rename `docs/overview/writing-documentation.md` → `docs/overview/writing-docs.md`, and fix every link to it.
|
|
77
207
|
- Rename the environment variable `DOCUMENTATION_URL` → `DOCS_URL` in `next.config.mjs`, `.env.local`, `.env.example` and the hosting provider's settings.
|
|
78
208
|
- Rename the route `/documentation` → `/docs`. Copy the new rewrite from the [`next.config.mjs` template](/templates#docs-route).
|
|
79
|
-
-
|
|
209
|
+
- **Re-copy `docsSite/docusaurus.config.ts`** from the [`docsSite/` template](/templates#docs-site), keeping the project's name and theme. Version 2 changed it: `baseUrl: '/docs/'`, `path: '../docs'`, full-word variable names (`rest` → `remainingArguments`, `doc` → `page`), and `static/img` → `static/images`. Rename the project's `docsSite/static/img/` to `static/images/` to match.
|
|
80
210
|
- Rename the scripts in `package.json`: `documentation:install` → `docs:install`, `documentation:dev` → `docs:dev`, `documentation:build` → `docs:build`.
|
|
211
|
+
- If the docs site's generated folders were ever committed, stop tracking them: `git rm -r --cached docsSite/.docusaurus docsSite/build`. They are in the [`docsSite/` template's](/templates#docs-site) `.gitignore`.
|
|
81
212
|
- Update every mention in `AGENTS.md`, `README.md` and the docs themselves.
|
|
213
|
+
- **Update every ignore list** that names the old folders: ESLint, Prettier, `tsconfig.json`, Vitest or Jest, and `.gitignore`. A leftover docs site with its own `node_modules` makes test runners and linters run its files too.
|
|
82
214
|
|
|
83
|
-
**How to check:** `grep -rn "documentation/\|documentationSite\|DOCUMENTATION_URL\|documentation:" --exclude-dir=node_modules .` finds nothing. Normal sentences that say "documentation" are fine.
|
|
215
|
+
**How to check:** `grep -rn "documentation/\|'../documentation'\|documentationSite\|DOCUMENTATION_URL\|documentation:" --exclude-dir=node_modules .` finds nothing. Normal sentences that say "documentation" are fine.
|
|
84
216
|
|
|
85
217
|
### 4. `props` is a dictionary word: prop types end in `Props`
|
|
86
218
|
|
|
@@ -88,11 +220,12 @@ Anyone changing the standards adds a version, in the same pull request as the ch
|
|
|
88
220
|
|
|
89
221
|
**What to do:**
|
|
90
222
|
|
|
91
|
-
- Rename every type ending in `Properties` to end in `Props`: `ButtonProperties` → `ButtonProps`. Use the editor's Rename Symbol (F2),
|
|
223
|
+
- Rename every type ending in `Properties` to end in `Props`: `ButtonProperties` → `ButtonProps`. Never use find-and-replace. Use the editor's Rename Symbol (F2) or, for an agent working from the command line, the rename script in version 3 and later of the package: `node node_modules/@activatus/code-standards/scripts/renameSymbol.mjs <file> <currentName> <newName>`. Both use TypeScript's own rename, so they change every use and nothing else.
|
|
92
224
|
- Rename variables and parameters called `properties` to `props`, including spreads: `...buttonProperties` → `...buttonProps`.
|
|
93
|
-
-
|
|
225
|
+
- **If the project already uses the standard ESLint config**, copy the new [ESLint config](/Standards/eslint). It needs ESLint 10.4 or later. Two things changed in it:
|
|
94
226
|
- The type-name rule is now `(Props|Type)$`.
|
|
95
227
|
- `unicorn/name-replacements` now has `replacements: { docs: false, props: false, utils: false }`.
|
|
228
|
+
- **If the project never had the standard ESLint config**, do only the renames in this change. Switching the config on can find hundreds of problems, so do it separately with [Migrating an Existing Project](/Guides/migrating), one stage per Pull Request, and record it as unfinished: see [Finishing a change later](/Guides/setup#finishing-a-change-later).
|
|
96
229
|
|
|
97
230
|
**How to check:** `grep -rn "Properties\b" --include=*.ts --include=*.tsx --exclude-dir=node_modules .` finds nothing of ours, and `pnpm lint` passes.
|
|
98
231
|
|
|
@@ -179,7 +312,7 @@ Anyone changing the standards adds a version, in the same pull request as the ch
|
|
|
179
312
|
|
|
180
313
|
**Why:** Strict no commit is right for most projects, but a tool built to ship code with AI, such as Launchpad, needs agents to commit.
|
|
181
314
|
|
|
182
|
-
**What to do:** This is standard 22 in the list from change 2. If the person kept it, keep the template's "NEVER COMMIT CODE" lines for strict no commit. Otherwise, replace them with the project's own rule, saying exactly which agents may commit, push and open Pull Requests, and when. See [A project can choose otherwise](/Standards/agent-specs#
|
|
315
|
+
**What to do:** This is standard 22 in the list from change 2. If the person kept it, keep the template's "NEVER COMMIT CODE" lines for strict no commit. Otherwise, replace them with the project's own rule, saying exactly which agents may commit, push and open Pull Requests, and when. See [A project can choose otherwise](/Standards/agent-specs#project-workflow).
|
|
183
316
|
|
|
184
317
|
**How to check:** The top of `AGENTS.md` states the project's commit rule.
|
|
185
318
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@activatus/code-standards",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.1",
|
|
4
4
|
"description": "The Activatus code standards: the rules as Markdown, and the config files to copy. Install it so an AI agent can read the standards from node_modules.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
"homepage": "https://activatus-code-standards.vercel.app",
|
|
10
10
|
"files": [
|
|
11
11
|
"docs",
|
|
12
|
+
"scripts",
|
|
12
13
|
"static/templates",
|
|
13
14
|
"README.md"
|
|
14
15
|
],
|
|
@@ -27,6 +28,7 @@
|
|
|
27
28
|
"@mdx-js/react": "^3.0.0",
|
|
28
29
|
"clsx": "^2.0.0",
|
|
29
30
|
"pagefind": "^1.3.0",
|
|
31
|
+
"prettier": "^3.9.10",
|
|
30
32
|
"prism-react-renderer": "^2.3.0",
|
|
31
33
|
"raw-loader": "^4.0.2",
|
|
32
34
|
"react": "^18.3.1",
|
|
@@ -54,6 +56,8 @@
|
|
|
54
56
|
"build": "docusaurus build",
|
|
55
57
|
"serve": "docusaurus serve",
|
|
56
58
|
"clear": "docusaurus clear",
|
|
57
|
-
"typecheck": "tsc"
|
|
59
|
+
"typecheck": "tsc",
|
|
60
|
+
"format": "prettier --write .",
|
|
61
|
+
"format:check": "prettier --check ."
|
|
58
62
|
}
|
|
59
63
|
}
|