@jml6m/skeletor 0.1.0-alpha.1 → 0.1.0-alpha.2
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 +140 -7
- package/package.json +33 -4
- package/src/index.js +316 -5
- package/templates/csharp/AGENTS.md +10 -0
- package/templates/csharp/Program.cs +18 -0
- package/templates/csharp/ProgramTests.cs +12 -0
- package/templates/csharp/README.md +12 -0
- package/templates/csharp/template.json +10 -0
- package/templates/csharp/{{PROJECT_NAME}}.csproj +17 -0
- package/templates/go/AGENTS.md +9 -0
- package/templates/go/README.md +13 -0
- package/templates/go/go.mod +5 -0
- package/templates/go/main.go +20 -0
- package/templates/go/main_test.go +11 -0
- package/templates/go/template.json +11 -0
- package/templates/java/AGENTS.md +9 -0
- package/templates/java/README.md +12 -0
- package/templates/java/pom.xml +38 -0
- package/templates/java/src/main/java/com/example/App.java +16 -0
- package/templates/java/src/test/java/com/example/AppTest.java +12 -0
- package/templates/java/template.json +10 -0
- package/templates/javascript/.editorconfig +16 -0
- package/templates/javascript/.eslintrc.json +82 -0
- package/templates/javascript/.github/workflows/README.md +7 -0
- package/templates/javascript/.github/workflows/ci.yml +39 -0
- package/templates/javascript/.husky/pre-commit +4 -0
- package/templates/javascript/.prettierrc.json +24 -0
- package/templates/javascript/AGENTS.md +110 -0
- package/templates/javascript/README.md +38 -0
- package/templates/javascript/docs/CODING_STANDARDS.md +14 -0
- package/templates/javascript/jest.config.js +7 -0
- package/templates/javascript/jsconfig.json +19 -0
- package/templates/javascript/knip.json +7 -0
- package/templates/javascript/package.json +60 -0
- package/templates/javascript/release.js +145 -0
- package/templates/javascript/scripts/generate-context.js +73 -0
- package/templates/javascript/scripts/reinstall.js +25 -0
- package/templates/javascript/src/config/env.config.js +25 -0
- package/templates/javascript/src/config/index.js +7 -0
- package/templates/javascript/src/constants/index.js +11 -0
- package/templates/javascript/src/index.js +19 -0
- package/templates/javascript/src/utils/logger.js +42 -0
- package/templates/javascript/template.json +13 -0
- package/templates/javascript/tests/example.test.js +10 -0
- package/templates/python/AGENTS.md +10 -0
- package/templates/python/README.md +16 -0
- package/templates/python/pyproject.toml +45 -0
- package/templates/python/src/app/__init__.py +7 -0
- package/templates/python/src/app/main.py +8 -0
- package/templates/python/template.json +12 -0
- package/templates/python/tests/test_main.py +9 -0
- package/templates/rust/AGENTS.md +9 -0
- package/templates/rust/Cargo.toml +10 -0
- package/templates/rust/README.md +12 -0
- package/templates/rust/src/main.rs +22 -0
- package/templates/rust/template.json +10 -0
- package/templates/typescript/.editorconfig +16 -0
- package/templates/typescript/.github/workflows/README.md +7 -0
- package/templates/typescript/.github/workflows/ci.yml +39 -0
- package/templates/typescript/.husky/pre-commit +4 -0
- package/templates/typescript/.prettierrc.json +24 -0
- package/templates/typescript/AGENTS.md +110 -0
- package/templates/typescript/README.md +38 -0
- package/templates/typescript/docs/CODING_STANDARDS.md +14 -0
- package/templates/typescript/eslint.config.js +55 -0
- package/templates/typescript/jest.config.js +7 -0
- package/templates/typescript/knip.json +7 -0
- package/templates/typescript/package.json +57 -0
- package/templates/typescript/release.js +145 -0
- package/templates/typescript/scripts/generate-context.js +73 -0
- package/templates/typescript/scripts/reinstall.js +25 -0
- package/templates/typescript/src/config/env.config.ts +25 -0
- package/templates/typescript/src/config/index.ts +7 -0
- package/templates/typescript/src/constants/index.ts +11 -0
- package/templates/typescript/src/index.ts +16 -0
- package/templates/typescript/src/utils/logger.ts +42 -0
- package/templates/typescript/template.json +14 -0
- package/templates/typescript/tests/example.test.js +10 -0
- package/templates/typescript/tsconfig.json +21 -0
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Java Project — Agent Guidelines
|
|
2
|
+
|
|
3
|
+
**Project:** {{PROJECT_NAME}}
|
|
4
|
+
**Language:** Java (Maven)
|
|
5
|
+
|
|
6
|
+
- Build with `mvn clean compile`, test with `mvn test`.
|
|
7
|
+
- Use JUnit 5 for tests.
|
|
8
|
+
- Follow standard package naming and clean architecture.
|
|
9
|
+
- Update this file with any team-specific Java conventions.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
|
2
|
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
3
|
+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
|
4
|
+
<modelVersion>4.0.0</modelVersion>
|
|
5
|
+
|
|
6
|
+
<groupId>com.example</groupId>
|
|
7
|
+
<artifactId>{{PROJECT_NAME}}</artifactId>
|
|
8
|
+
<version>0.1.0</version>
|
|
9
|
+
<packaging>jar</packaging>
|
|
10
|
+
|
|
11
|
+
<name>{{PROJECT_NAME}}</name>
|
|
12
|
+
<description>{{DESCRIPTION}}</description>
|
|
13
|
+
|
|
14
|
+
<properties>
|
|
15
|
+
<maven.compiler.source>17</maven.compiler.source>
|
|
16
|
+
<maven.compiler.target>17</maven.compiler.target>
|
|
17
|
+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
|
18
|
+
</properties>
|
|
19
|
+
|
|
20
|
+
<dependencies>
|
|
21
|
+
<dependency>
|
|
22
|
+
<groupId>org.junit.jupiter</groupId>
|
|
23
|
+
<artifactId>junit-jupiter</artifactId>
|
|
24
|
+
<version>5.10.2</version>
|
|
25
|
+
<scope>test</scope>
|
|
26
|
+
</dependency>
|
|
27
|
+
</dependencies>
|
|
28
|
+
|
|
29
|
+
<build>
|
|
30
|
+
<plugins>
|
|
31
|
+
<plugin>
|
|
32
|
+
<groupId>org.apache.maven.plugins</groupId>
|
|
33
|
+
<artifactId>maven-surefire-plugin</artifactId>
|
|
34
|
+
<version>3.2.5</version>
|
|
35
|
+
</plugin>
|
|
36
|
+
</plugins>
|
|
37
|
+
</build>
|
|
38
|
+
</project>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
package com.example;
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* {{PROJECT_NAME}}
|
|
5
|
+
*
|
|
6
|
+
* {{DESCRIPTION}}
|
|
7
|
+
*/
|
|
8
|
+
public class App {
|
|
9
|
+
public static void main(String[] args) {
|
|
10
|
+
System.out.println(hello("world"));
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
public static String hello(String name) {
|
|
14
|
+
return String.format("Hello, %s from {{PROJECT_NAME}}!", name);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
package com.example;
|
|
2
|
+
|
|
3
|
+
import org.junit.jupiter.api.Test;
|
|
4
|
+
import static org.junit.jupiter.api.Assertions.*;
|
|
5
|
+
|
|
6
|
+
class AppTest {
|
|
7
|
+
|
|
8
|
+
@Test
|
|
9
|
+
void helloReturnsGreeting() {
|
|
10
|
+
assertEquals("Hello, tester from {{PROJECT_NAME}}!", App.hello("tester"));
|
|
11
|
+
}
|
|
12
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Editor configuration, see https://editorconfig.org
|
|
2
|
+
root = true
|
|
3
|
+
|
|
4
|
+
[*]
|
|
5
|
+
charset = utf-8
|
|
6
|
+
indent_style = space
|
|
7
|
+
indent_size = 2
|
|
8
|
+
insert_final_newline = true
|
|
9
|
+
trim_trailing_whitespace = true
|
|
10
|
+
|
|
11
|
+
[*.js]
|
|
12
|
+
quote_type = single
|
|
13
|
+
|
|
14
|
+
[*.md]
|
|
15
|
+
max_line_length = off
|
|
16
|
+
trim_trailing_whitespace = false
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
{
|
|
2
|
+
"env": {
|
|
3
|
+
"node": true,
|
|
4
|
+
"es2021": true,
|
|
5
|
+
"commonjs": true,
|
|
6
|
+
"jest": true
|
|
7
|
+
},
|
|
8
|
+
"extends": ["eslint:recommended", "plugin:import/recommended"],
|
|
9
|
+
"plugins": ["unused-imports", "import"],
|
|
10
|
+
"parserOptions": {
|
|
11
|
+
"ecmaVersion": "latest"
|
|
12
|
+
},
|
|
13
|
+
"settings": {
|
|
14
|
+
"import/resolver": {
|
|
15
|
+
"jsconfig": {
|
|
16
|
+
"config": "jsconfig.json",
|
|
17
|
+
"extensions": [".js", ".json"]
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
"rules": {
|
|
22
|
+
"no-unused-vars": "off",
|
|
23
|
+
"unused-imports/no-unused-imports": "error",
|
|
24
|
+
"unused-imports/no-unused-vars": [
|
|
25
|
+
"warn",
|
|
26
|
+
{
|
|
27
|
+
"vars": "all",
|
|
28
|
+
"varsIgnorePattern": "^_",
|
|
29
|
+
"args": "after-used",
|
|
30
|
+
"argsIgnorePattern": "^_"
|
|
31
|
+
}
|
|
32
|
+
],
|
|
33
|
+
"no-restricted-syntax": [
|
|
34
|
+
"warn",
|
|
35
|
+
{
|
|
36
|
+
"selector": "CallExpression[callee.object.name='logger'][callee.property.name=/^(info|warn|error|debug|http|log)$/] > TemplateLiteral:first-child",
|
|
37
|
+
"message": "Avoid template literals in logger messages. Use a static string and pass variables as metadata: logger.info('Event description', { key: value })"
|
|
38
|
+
}
|
|
39
|
+
],
|
|
40
|
+
"no-console": "warn",
|
|
41
|
+
"no-empty": ["error", { "allowEmptyCatch": false }],
|
|
42
|
+
"no-undef": "error",
|
|
43
|
+
"no-restricted-imports": [
|
|
44
|
+
"error",
|
|
45
|
+
{
|
|
46
|
+
"patterns": [
|
|
47
|
+
{
|
|
48
|
+
"group": ["../*"],
|
|
49
|
+
"message": "Do not use parent imports. Use architectural aliases (e.g. @services, @utils) or sibling imports (./)."
|
|
50
|
+
}
|
|
51
|
+
]
|
|
52
|
+
}
|
|
53
|
+
],
|
|
54
|
+
"no-restricted-properties": [
|
|
55
|
+
"error",
|
|
56
|
+
{
|
|
57
|
+
"object": "process",
|
|
58
|
+
"property": "env",
|
|
59
|
+
"message": "Use @config (or equivalent) instead of process.env directly."
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"object": "process",
|
|
63
|
+
"property": "exit",
|
|
64
|
+
"message": "Direct process.exit() is discouraged. Use error handling or a dedicated shutdown utility."
|
|
65
|
+
}
|
|
66
|
+
]
|
|
67
|
+
},
|
|
68
|
+
"overrides": [
|
|
69
|
+
{
|
|
70
|
+
"files": ["knip.config.js", "release.js", "scripts/**/*.js", "tests/**/*.js"],
|
|
71
|
+
"rules": {
|
|
72
|
+
"no-console": "off"
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"files": ["release.js", "scripts/**/*.js", "tests/support/**/*.js"],
|
|
77
|
+
"rules": {
|
|
78
|
+
"no-restricted-properties": "off"
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
]
|
|
82
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
types: [opened, reopened, synchronize, ready_for_review]
|
|
6
|
+
push:
|
|
7
|
+
branches: [main, master]
|
|
8
|
+
|
|
9
|
+
permissions:
|
|
10
|
+
contents: read
|
|
11
|
+
|
|
12
|
+
concurrency:
|
|
13
|
+
group: ci-${{ github.ref }}
|
|
14
|
+
cancel-in-progress: true
|
|
15
|
+
|
|
16
|
+
jobs:
|
|
17
|
+
ci:
|
|
18
|
+
runs-on: ubuntu-latest
|
|
19
|
+
steps:
|
|
20
|
+
- name: Checkout
|
|
21
|
+
uses: actions/checkout@v4
|
|
22
|
+
|
|
23
|
+
- name: Setup Node.js
|
|
24
|
+
uses: actions/setup-node@v4
|
|
25
|
+
with:
|
|
26
|
+
node-version: '20'
|
|
27
|
+
cache: 'npm'
|
|
28
|
+
|
|
29
|
+
- name: Install dependencies
|
|
30
|
+
run: npm ci
|
|
31
|
+
|
|
32
|
+
- name: Run linter
|
|
33
|
+
run: npm run lint
|
|
34
|
+
|
|
35
|
+
- name: Run tests
|
|
36
|
+
run: npm test
|
|
37
|
+
|
|
38
|
+
- name: Run health checks (knip / dupes / circular)
|
|
39
|
+
run: npm run health:full || true
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"tabWidth": 2,
|
|
3
|
+
"printWidth": 165,
|
|
4
|
+
"useTabs": false,
|
|
5
|
+
"semi": true,
|
|
6
|
+
"singleQuote": true,
|
|
7
|
+
"trailingComma": "es5",
|
|
8
|
+
"plugins": ["prettier-plugin-organize-imports", "prettier-plugin-pkg"],
|
|
9
|
+
"overrides": [
|
|
10
|
+
{
|
|
11
|
+
"files": ["*.json", "*.jsonc", "*.json5"],
|
|
12
|
+
"options": {
|
|
13
|
+
"parser": "json",
|
|
14
|
+
"tabWidth": 2
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"files": "*.md",
|
|
19
|
+
"options": {
|
|
20
|
+
"tabWidth": 2
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
]
|
|
24
|
+
}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
# 🤖 Agent & AI Protocols (All Agents)
|
|
2
|
+
|
|
3
|
+
**Project:** {{PROJECT_NAME}} <br />
|
|
4
|
+
**Runtime:** Node.js (>=20.19.0) <br />
|
|
5
|
+
**Testing:** Jest
|
|
6
|
+
|
|
7
|
+
> **📌 Single Source of Truth**: This document is the authoritative reference for all coding standards, architecture rules, and project policies in this repository. If there is a conflict between this document and any other file, `AGENTS.md` takes precedence.
|
|
8
|
+
|
|
9
|
+
This document defines the operational parameters, architectural standards, and safety protocols for all AI agents working within this repository.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## 🛑 Critical Protocols (Read First)
|
|
14
|
+
|
|
15
|
+
### 1. The "Three Strike" Rule (Loop Prevention)
|
|
16
|
+
|
|
17
|
+
For unsupervised runs (e.g. automated fixes or refactors):
|
|
18
|
+
- If you attempt to fix an error and the **same** error persists after **3 attempts**:
|
|
19
|
+
- **STOP**.
|
|
20
|
+
- Revert to the last functioning state.
|
|
21
|
+
- Mark the test/code with `// FIXME: Agent worker failed` or `.skip`.
|
|
22
|
+
- Log the failure and move on.
|
|
23
|
+
|
|
24
|
+
### 2. Versioning & Release Policy
|
|
25
|
+
|
|
26
|
+
- **One PR = One Bump**: Version bump happens **once** using `npm run release:patch` when creating the PR.
|
|
27
|
+
- `npm run release:minor` only for substantial new features (coordinate with admin).
|
|
28
|
+
- ⛔ `npm run release:major` is **human-only**.
|
|
29
|
+
|
|
30
|
+
### 3. Command Execution Safety
|
|
31
|
+
|
|
32
|
+
**STRICTLY PROHIBITED for agents:**
|
|
33
|
+
- `npm publish`
|
|
34
|
+
- `git push` (agents propose; humans / CI push)
|
|
35
|
+
- Running migrations or prod start commands without explicit request
|
|
36
|
+
- Direct edits to core bootstrap / auth / secret-handling files (see Exclusions below)
|
|
37
|
+
|
|
38
|
+
### 4. Code Review & PR Interaction
|
|
39
|
+
|
|
40
|
+
- The agent **MUST** respond to comments from the primary (human) reviewer or when explicitly @-tagged.
|
|
41
|
+
- **No passive "Acknowledged" / "Will fix"**. Either make the change or discuss with technical reasoning.
|
|
42
|
+
- Human reviewer comments always take priority over bot threads.
|
|
43
|
+
|
|
44
|
+
### 5. Cross-Repo Coordination (when applicable)
|
|
45
|
+
|
|
46
|
+
When work spans multiple repositories, create paired issues and cross-link PRs in both Coordination sections.
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## 📐 Architecture & Coding Standards
|
|
51
|
+
|
|
52
|
+
- **Module aliases over relatives**: Never use `../`. Use `@src`, `@utils`, `@config`, `@services`, etc. (enforced by ESLint + jsconfig).
|
|
53
|
+
- **Configuration SSoT**: Never read `process.env` directly in feature code. Centralize in `@config`.
|
|
54
|
+
- **Layered architecture** (recommended): Routes/Controllers (thin) → Services (business logic) → Models/Mechanics (pure functions).
|
|
55
|
+
- **Zod where helpful**: Use for config validation and request/input schemas.
|
|
56
|
+
- **Logging**: Use a structured logger (Winston or equivalent). Static message strings + metadata object. Never `console.log` in production paths.
|
|
57
|
+
- **Error handling**: Use explicit `AppError` / error classes with constants for consistent responses.
|
|
58
|
+
|
|
59
|
+
See `docs/CODING_STANDARDS.md` (if present) for expanded examples.
|
|
60
|
+
|
|
61
|
+
### Code Style (enforced)
|
|
62
|
+
|
|
63
|
+
- Prettier (see `.prettierrc.json`): 2 spaces, single quotes, semicolons, printWidth 165, organize-imports.
|
|
64
|
+
- File names: `kebab-case.js` or `kebab-case.test.js`.
|
|
65
|
+
- Functions: `camelCase`, classes `PascalCase`, constants `SCREAMING_SNAKE_CASE`.
|
|
66
|
+
|
|
67
|
+
### ESLint highlights (see .eslintrc.json)
|
|
68
|
+
|
|
69
|
+
- `unused-imports/no-unused-imports`: error
|
|
70
|
+
- `no-restricted-imports`: `../*` forbidden
|
|
71
|
+
- `no-restricted-properties`: `process.env` and `process.exit` (with documented exceptions)
|
|
72
|
+
- `no-console`: warn (scripts/tests/config overrides allowed)
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## 🛡️ Logging & Error Handling (summary)
|
|
77
|
+
|
|
78
|
+
- Import the shared logger.
|
|
79
|
+
- Messages are **static strings**; data goes in the 2nd (metadata) argument.
|
|
80
|
+
- For errors: always log `{ error: err.message, stack: err.stack }`.
|
|
81
|
+
- See the full patterns in active reference projects (local-land-server etc.).
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## 🧪 Testing
|
|
86
|
+
|
|
87
|
+
- Unit tests: heavily mock external deps (DB, network, time).
|
|
88
|
+
- Integration: use in-memory or test harnesses where available.
|
|
89
|
+
- Follow AAA. Keep tests readable and deterministic.
|
|
90
|
+
- Run `npm run health:full` before opening PRs.
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## 🛑 Excluded Source Code (for AI context size & security)
|
|
95
|
+
|
|
96
|
+
The following are intentionally **not** provided in full to agents by default. Ask for snippets if you need to propose changes.
|
|
97
|
+
|
|
98
|
+
- `src/index.js` (or main entry / bootstrap)
|
|
99
|
+
- Authentication / token / JWT utilities
|
|
100
|
+
- Any file that would require hard-coding real secrets
|
|
101
|
+
|
|
102
|
+
**Never** output real secrets, tokens, or keys. Use config + env.
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## Additional Resources
|
|
107
|
+
|
|
108
|
+
- Your personal conventions are derived from analysis of multiple active GitHub-linked workspaces.
|
|
109
|
+
- Update this file when the project's architecture or policies evolve.
|
|
110
|
+
- `npm run prompt:gen` (or with `--all`) can be used to produce a full context dump for complex tasks.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# {{PROJECT_NAME}}
|
|
2
|
+
|
|
3
|
+
{{DESCRIPTION}}
|
|
4
|
+
|
|
5
|
+
## Standards
|
|
6
|
+
|
|
7
|
+
This project was scaffolded with [skeletor](https://github.com/jml6m/skeletor) and follows personal conventions extracted from active workspaces:
|
|
8
|
+
|
|
9
|
+
- Prettier + organize-imports + pkg plugin (printWidth 165, 2 spaces, single quotes)
|
|
10
|
+
- ESLint + unused-imports (strict), no parent relative imports (`../*`)
|
|
11
|
+
- Knip (dead code), jscpd (dupes), madge (circular) via `npm run health:full`
|
|
12
|
+
- Custom `release.js` (one bump per PR, major gates via GitHub issue labels `vN-required`)
|
|
13
|
+
- AGENTS.md as the Single Source of Truth for coding standards + AI agent protocols
|
|
14
|
+
- Path aliases (`@src`, `@utils`, etc.) enforced at lint + runtime (module-alias)
|
|
15
|
+
|
|
16
|
+
See [AGENTS.md](./AGENTS.md) for the full contract.
|
|
17
|
+
|
|
18
|
+
## Quick start
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
npm install
|
|
22
|
+
npm run format
|
|
23
|
+
npm run lint
|
|
24
|
+
npm test
|
|
25
|
+
npm run health:full
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Release flow (per conventions)
|
|
29
|
+
|
|
30
|
+
- Open PR → run `npm run release:patch` **once** at PR creation
|
|
31
|
+
- `npm run release:minor` only for substantial features (coordinate)
|
|
32
|
+
- Majors are human-only and gated by open issues labeled `vX-required`
|
|
33
|
+
|
|
34
|
+
## Tooling scripts
|
|
35
|
+
|
|
36
|
+
- `npm run npm:reinstall` — clean node_modules + lock then fresh install
|
|
37
|
+
- `npm run prompt:gen` — build prompt.md for AI context (respects excludes)
|
|
38
|
+
- `npm run health:*` — quality gates
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Coding Standards — {{PROJECT_NAME}}
|
|
2
|
+
|
|
3
|
+
See [AGENTS.md](../AGENTS.md) for the authoritative rules.
|
|
4
|
+
|
|
5
|
+
This document can be expanded with project-specific examples for:
|
|
6
|
+
|
|
7
|
+
- Layered architecture (routes / controllers / services / mechanics)
|
|
8
|
+
- Zod schema patterns for config + validation
|
|
9
|
+
- Logging examples (static msg + metadata)
|
|
10
|
+
- Alias usage and module-alias setup
|
|
11
|
+
- Error constants + AppError usage
|
|
12
|
+
- Jest testing patterns + test harness
|
|
13
|
+
|
|
14
|
+
Pull the detailed examples from reference projects (local-land-server, etc.) when you need them and adapt here.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"module": "commonjs",
|
|
4
|
+
"target": "es2021",
|
|
5
|
+
"checkJs": true,
|
|
6
|
+
"baseUrl": ".",
|
|
7
|
+
"paths": {
|
|
8
|
+
"@root/*": ["./*"],
|
|
9
|
+
"@src/*": ["src/*"],
|
|
10
|
+
"@config/*": ["src/config/*"],
|
|
11
|
+
"@constants/*": ["src/constants/*"],
|
|
12
|
+
"@config": ["src/config/index.js"],
|
|
13
|
+
"@services/*": ["src/services/*"],
|
|
14
|
+
"@mechanics/*": ["src/mechanics/*"],
|
|
15
|
+
"@utils/*": ["src/utils/*"]
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
"exclude": ["node_modules", "**/node_modules/*"]
|
|
19
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "{{PROJECT_NAME}}",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"private": true,
|
|
5
|
+
"description": "{{DESCRIPTION}}",
|
|
6
|
+
"main": "src/index.js",
|
|
7
|
+
"license": "UNLICENSED",
|
|
8
|
+
"scripts": {
|
|
9
|
+
"format": "prettier --write .",
|
|
10
|
+
"lint": "eslint .",
|
|
11
|
+
"prepare": "husky",
|
|
12
|
+
"start": "node src/index.js",
|
|
13
|
+
"test": "jest --verbose",
|
|
14
|
+
"test:coverage": "jest --coverage --verbose",
|
|
15
|
+
"release:patch": "node release.js patch",
|
|
16
|
+
"release:minor": "node release.js minor",
|
|
17
|
+
"release:major": "node release.js major",
|
|
18
|
+
"npm:reinstall": "node scripts/reinstall.js",
|
|
19
|
+
"prompt:gen": "node scripts/generate-context.js",
|
|
20
|
+
"health:dead": "knip --no-exit-code",
|
|
21
|
+
"health:dupes": "jscpd src || node -e \"process.exit(0)\"",
|
|
22
|
+
"health:circular": "madge --circular --extensions js src || node -e \"process.exit(0)\"",
|
|
23
|
+
"health:full": "npm-run-all --sequential health:dead health:dupes health:circular"
|
|
24
|
+
},
|
|
25
|
+
"dependencies": {
|
|
26
|
+
"module-alias": "^2.3.4"
|
|
27
|
+
},
|
|
28
|
+
"devDependencies": {
|
|
29
|
+
"cross-env": "^10.1.0",
|
|
30
|
+
"eslint": "^8.57.0",
|
|
31
|
+
"eslint-import-resolver-jsconfig": "^1.1.0",
|
|
32
|
+
"eslint-plugin-import": "^2.32.0",
|
|
33
|
+
"eslint-plugin-unused-imports": "^4.4.1",
|
|
34
|
+
"husky": "^9.1.7",
|
|
35
|
+
"jest": "^29.7.0",
|
|
36
|
+
"jscpd": "^4.0.0",
|
|
37
|
+
"knip": "^5.86.0",
|
|
38
|
+
"lint-staged": "^15.2.0",
|
|
39
|
+
"madge": "^8.0.0",
|
|
40
|
+
"npm-run-all": "^4.1.5",
|
|
41
|
+
"prettier": "^3.3.3",
|
|
42
|
+
"prettier-plugin-organize-imports": "^4.3.0",
|
|
43
|
+
"prettier-plugin-pkg": "^0.21.2"
|
|
44
|
+
},
|
|
45
|
+
"_moduleAliases": {
|
|
46
|
+
"@root": ".",
|
|
47
|
+
"@src": "src",
|
|
48
|
+
"@config": "src/config",
|
|
49
|
+
"@constants": "src/constants",
|
|
50
|
+
"@utils": "src/utils",
|
|
51
|
+
"@services": "src/services",
|
|
52
|
+
"@mechanics": "src/mechanics"
|
|
53
|
+
},
|
|
54
|
+
"lint-staged": {
|
|
55
|
+
"*.{js,json,md,yml,yaml}": "prettier --write"
|
|
56
|
+
},
|
|
57
|
+
"engines": {
|
|
58
|
+
"node": ">=20.19.0"
|
|
59
|
+
}
|
|
60
|
+
}
|