@harness-engineering/cli 1.13.1 → 1.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. package/dist/agents/skills/claude-code/harness-brainstorming/SKILL.md +39 -0
  2. package/dist/agents/skills/claude-code/harness-code-review/SKILL.md +44 -0
  3. package/dist/agents/skills/claude-code/harness-execution/SKILL.md +44 -0
  4. package/dist/agents/skills/claude-code/harness-planning/SKILL.md +39 -0
  5. package/dist/agents/skills/claude-code/harness-release-readiness/SKILL.md +3 -3
  6. package/dist/agents/skills/claude-code/harness-verification/SKILL.md +35 -0
  7. package/dist/agents/skills/claude-code/initialize-harness-project/SKILL.md +11 -3
  8. package/dist/agents/skills/gemini-cli/harness-brainstorming/SKILL.md +39 -0
  9. package/dist/agents/skills/gemini-cli/harness-code-review/SKILL.md +44 -0
  10. package/dist/agents/skills/gemini-cli/harness-execution/SKILL.md +44 -0
  11. package/dist/agents/skills/gemini-cli/harness-planning/SKILL.md +39 -0
  12. package/dist/agents/skills/gemini-cli/harness-release-readiness/SKILL.md +3 -3
  13. package/dist/agents/skills/gemini-cli/harness-verification/SKILL.md +35 -0
  14. package/dist/agents/skills/gemini-cli/initialize-harness-project/SKILL.md +11 -3
  15. package/dist/agents-md-YTYQDA3P.js +8 -0
  16. package/dist/{architecture-2R5Z4ZAF.js → architecture-JQZYM4US.js} +4 -4
  17. package/dist/bin/harness-mcp.js +14 -14
  18. package/dist/bin/harness.js +24 -24
  19. package/dist/{check-phase-gate-2OFZ7OWW.js → check-phase-gate-L3RADYWO.js} +4 -4
  20. package/dist/{chunk-QY4T6YAZ.js → chunk-3C2MLBPJ.js} +4 -4
  21. package/dist/{chunk-UAX4I5ZE.js → chunk-6KTUUFRN.js} +2 -2
  22. package/dist/{chunk-ND6PNADU.js → chunk-7IP4JIFL.js} +9 -9
  23. package/dist/{chunk-C2ERUR3L.js → chunk-7MJAPE3Z.js} +165 -49
  24. package/dist/{chunk-PQ5YK4AY.js → chunk-ABQHQ6I5.js} +1583 -1169
  25. package/dist/{chunk-QPEH2QPG.js → chunk-DBSOCI3G.js} +53 -54
  26. package/dist/{chunk-MHBMTPW7.js → chunk-ERS5EVUZ.js} +9 -0
  27. package/dist/{chunk-JSTQ3AWB.js → chunk-FIAPHX37.js} +1 -1
  28. package/dist/{chunk-IMFVFNJE.js → chunk-FTMXDOR6.js} +1 -1
  29. package/dist/{chunk-72GHBOL2.js → chunk-GZKSBLQL.js} +1 -1
  30. package/dist/{chunk-K6XAPGML.js → chunk-H7Y5CKTM.js} +1 -1
  31. package/dist/{chunk-4ZMOCPYO.js → chunk-NLVUVUGD.js} +1 -1
  32. package/dist/{chunk-Z77YQRQT.js → chunk-O5OJVPL6.js} +16 -5
  33. package/dist/{chunk-NKDM3FMH.js → chunk-OD3S2NHN.js} +1 -1
  34. package/dist/{chunk-65FRIL4D.js → chunk-OSXBPAMK.js} +1 -1
  35. package/dist/{chunk-DZS7CJKL.js → chunk-OXLLOSSR.js} +45 -47
  36. package/dist/{chunk-TS3XWPW5.js → chunk-RCWZBSK5.js} +1 -1
  37. package/dist/{chunk-NOPU4RZ4.js → chunk-S2FXOWOR.js} +3 -3
  38. package/dist/{chunk-VUCPTQ6G.js → chunk-SD3SQOZ2.js} +1 -1
  39. package/dist/{chunk-IM32EEDM.js → chunk-TPOTOBR7.js} +9 -9
  40. package/dist/{chunk-SSKDAOX5.js → chunk-XKECDXJS.js} +436 -340
  41. package/dist/{chunk-TKJZKICB.js → chunk-YPYGXRDR.js} +7 -7
  42. package/dist/{chunk-Q6AB7W5Z.js → chunk-YQ6KC6TE.js} +1 -1
  43. package/dist/{chunk-NERR4TAO.js → chunk-YZD2MRNQ.js} +972 -747
  44. package/dist/ci-workflow-EQZFVX3P.js +8 -0
  45. package/dist/{dist-HXHWB7SV.js → dist-B26DFXMP.js} +571 -478
  46. package/dist/{dist-L7LAAQAS.js → dist-DZ63LLUD.js} +1 -1
  47. package/dist/{dist-2B363XUH.js → dist-HWXF2C3R.js} +18 -2
  48. package/dist/{dist-D4RYGUZE.js → dist-USY2C5JL.js} +3 -1
  49. package/dist/{docs-FZOPM4GK.js → docs-7ECGYMAV.js} +4 -4
  50. package/dist/engine-EG4EH4IX.js +8 -0
  51. package/dist/{entropy-LVHJMFGH.js → entropy-5USWKLVS.js} +3 -3
  52. package/dist/{feedback-IHLVLMRD.js → feedback-UTBXZZHF.js} +1 -1
  53. package/dist/{generate-agent-definitions-64S3CLEZ.js → generate-agent-definitions-3PM5EU7V.js} +4 -4
  54. package/dist/{graph-loader-GJZ4FN4Y.js → graph-loader-2M2HXDQI.js} +1 -1
  55. package/dist/index.d.ts +148 -9
  56. package/dist/index.js +24 -24
  57. package/dist/loader-ZPALXIVR.js +10 -0
  58. package/dist/{mcp-JQUI7BVZ.js → mcp-362EZHF4.js} +14 -14
  59. package/dist/{performance-ZTVSUANN.js → performance-OQAFMJUD.js} +3 -3
  60. package/dist/{review-pipeline-76JHKGSV.js → review-pipeline-C4GCFVGP.js} +1 -1
  61. package/dist/runtime-7YLVK453.js +9 -0
  62. package/dist/{security-FWQZF2IZ.js → security-PZOX7AQS.js} +1 -1
  63. package/dist/templates/axum/Cargo.toml.hbs +8 -0
  64. package/dist/templates/axum/src/main.rs +12 -0
  65. package/dist/templates/axum/template.json +16 -0
  66. package/dist/templates/django/manage.py.hbs +19 -0
  67. package/dist/templates/django/requirements.txt.hbs +1 -0
  68. package/dist/templates/django/src/settings.py.hbs +44 -0
  69. package/dist/templates/django/src/urls.py +6 -0
  70. package/dist/templates/django/src/wsgi.py.hbs +9 -0
  71. package/dist/templates/django/template.json +21 -0
  72. package/dist/templates/express/package.json.hbs +15 -0
  73. package/dist/templates/express/src/app.ts +12 -0
  74. package/dist/templates/express/src/lib/.gitkeep +0 -0
  75. package/dist/templates/express/template.json +16 -0
  76. package/dist/templates/fastapi/requirements.txt.hbs +2 -0
  77. package/dist/templates/fastapi/src/main.py +8 -0
  78. package/dist/templates/fastapi/template.json +20 -0
  79. package/dist/templates/gin/go.mod.hbs +5 -0
  80. package/dist/templates/gin/main.go +15 -0
  81. package/dist/templates/gin/template.json +19 -0
  82. package/dist/templates/go-base/.golangci.yml +16 -0
  83. package/dist/templates/go-base/AGENTS.md.hbs +35 -0
  84. package/dist/templates/go-base/go.mod.hbs +3 -0
  85. package/dist/templates/go-base/harness.config.json.hbs +17 -0
  86. package/dist/templates/go-base/main.go +7 -0
  87. package/dist/templates/go-base/template.json +14 -0
  88. package/dist/templates/java-base/AGENTS.md.hbs +35 -0
  89. package/dist/templates/java-base/checkstyle.xml +20 -0
  90. package/dist/templates/java-base/harness.config.json.hbs +16 -0
  91. package/dist/templates/java-base/pom.xml.hbs +39 -0
  92. package/dist/templates/java-base/src/main/java/App.java.hbs +5 -0
  93. package/dist/templates/java-base/template.json +13 -0
  94. package/dist/templates/nestjs/nest-cli.json +5 -0
  95. package/dist/templates/nestjs/package.json.hbs +18 -0
  96. package/dist/templates/nestjs/src/app.module.ts +8 -0
  97. package/dist/templates/nestjs/src/lib/.gitkeep +0 -0
  98. package/dist/templates/nestjs/src/main.ts +11 -0
  99. package/dist/templates/nestjs/template.json +16 -0
  100. package/dist/templates/nextjs/template.json +15 -1
  101. package/dist/templates/python-base/.python-version +1 -0
  102. package/dist/templates/python-base/AGENTS.md.hbs +32 -0
  103. package/dist/templates/python-base/harness.config.json.hbs +16 -0
  104. package/dist/templates/python-base/pyproject.toml.hbs +18 -0
  105. package/dist/templates/python-base/ruff.toml +5 -0
  106. package/dist/templates/python-base/src/__init__.py +0 -0
  107. package/dist/templates/python-base/template.json +13 -0
  108. package/dist/templates/react-vite/index.html +12 -0
  109. package/dist/templates/react-vite/package.json.hbs +18 -0
  110. package/dist/templates/react-vite/src/App.tsx +7 -0
  111. package/dist/templates/react-vite/src/lib/.gitkeep +0 -0
  112. package/dist/templates/react-vite/src/main.tsx +9 -0
  113. package/dist/templates/react-vite/template.json +19 -0
  114. package/dist/templates/react-vite/vite.config.ts +6 -0
  115. package/dist/templates/rust-base/AGENTS.md.hbs +35 -0
  116. package/dist/templates/rust-base/Cargo.toml.hbs +6 -0
  117. package/dist/templates/rust-base/clippy.toml +2 -0
  118. package/dist/templates/rust-base/harness.config.json.hbs +17 -0
  119. package/dist/templates/rust-base/src/main.rs +3 -0
  120. package/dist/templates/rust-base/template.json +14 -0
  121. package/dist/templates/spring-boot/pom.xml.hbs +50 -0
  122. package/dist/templates/spring-boot/src/main/java/Application.java.hbs +19 -0
  123. package/dist/templates/spring-boot/template.json +15 -0
  124. package/dist/templates/vue/index.html +12 -0
  125. package/dist/templates/vue/package.json.hbs +16 -0
  126. package/dist/templates/vue/src/App.vue +7 -0
  127. package/dist/templates/vue/src/lib/.gitkeep +0 -0
  128. package/dist/templates/vue/src/main.ts +4 -0
  129. package/dist/templates/vue/template.json +19 -0
  130. package/dist/templates/vue/vite.config.ts +6 -0
  131. package/dist/{validate-GCHZJIL7.js → validate-FD3Z6VJD.js} +4 -4
  132. package/dist/validate-cross-check-WNJM6H2D.js +8 -0
  133. package/package.json +5 -5
  134. package/dist/agents-md-XU3BHE22.js +0 -8
  135. package/dist/ci-workflow-EHV65NQB.js +0 -8
  136. package/dist/engine-OL4T6NZS.js +0 -8
  137. package/dist/loader-DPYFB6R6.js +0 -10
  138. package/dist/runtime-X7U6SC7K.js +0 -9
  139. package/dist/validate-cross-check-STFHYMAZ.js +0 -8
@@ -0,0 +1,12 @@
1
+ use axum::{routing::get, Router};
2
+
3
+ async fn root() -> &'static str {
4
+ "Hello, world!"
5
+ }
6
+
7
+ #[tokio::main]
8
+ async fn main() {
9
+ let app = Router::new().route("/", get(root));
10
+ let listener = tokio::net::TcpListener::bind("127.0.0.1:3000").await.unwrap();
11
+ axum::serve(listener, app).await.unwrap();
12
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "name": "axum",
3
+ "description": "Axum web framework scaffold",
4
+ "version": 1,
5
+ "language": "rust",
6
+ "framework": "axum",
7
+ "extends": "rust-base",
8
+ "tooling": {
9
+ "packageManager": "cargo",
10
+ "linter": "clippy",
11
+ "formatter": "rustfmt",
12
+ "buildTool": "cargo",
13
+ "testRunner": "cargo test"
14
+ },
15
+ "detect": [{ "file": "Cargo.toml", "contains": "axum" }]
16
+ }
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env python
2
+ """Django's command-line utility for administrative tasks."""
3
+ import os
4
+ import sys
5
+
6
+
7
+ def main():
8
+ os.environ.setdefault("DJANGO_SETTINGS_MODULE", "{{projectName}}.settings")
9
+ try:
10
+ from django.core.management import execute_from_command_line
11
+ except ImportError as exc:
12
+ raise ImportError(
13
+ "Couldn't import Django. Are you sure it's installed?"
14
+ ) from exc
15
+ execute_from_command_line(sys.argv)
16
+
17
+
18
+ if __name__ == "__main__":
19
+ main()
@@ -0,0 +1 @@
1
+ django>=4.2
@@ -0,0 +1,44 @@
1
+ """Django settings for {{projectName}} project."""
2
+
3
+ import os
4
+ from pathlib import Path
5
+
6
+ BASE_DIR = Path(__file__).resolve().parent.parent
7
+
8
+ SECRET_KEY = os.environ.get("DJANGO_SECRET_KEY", "dev-only-insecure-key-change-in-production")
9
+
10
+ DEBUG = True
11
+
12
+ ALLOWED_HOSTS = []
13
+
14
+ INSTALLED_APPS = [
15
+ "django.contrib.admin",
16
+ "django.contrib.auth",
17
+ "django.contrib.contenttypes",
18
+ "django.contrib.sessions",
19
+ "django.contrib.messages",
20
+ "django.contrib.staticfiles",
21
+ ]
22
+
23
+ MIDDLEWARE = [
24
+ "django.middleware.security.SecurityMiddleware",
25
+ "django.contrib.sessions.middleware.SessionMiddleware",
26
+ "django.middleware.common.CommonMiddleware",
27
+ "django.middleware.csrf.CsrfViewMiddleware",
28
+ "django.contrib.auth.middleware.AuthenticationMiddleware",
29
+ "django.contrib.messages.middleware.MessageMiddleware",
30
+ "django.middleware.clickjacking.XFrameOptionsMiddleware",
31
+ ]
32
+
33
+ ROOT_URLCONF = "{{projectName}}.urls"
34
+
35
+ WSGI_APPLICATION = "{{projectName}}.wsgi.application"
36
+
37
+ DATABASES = {
38
+ "default": {
39
+ "ENGINE": "django.db.backends.sqlite3",
40
+ "NAME": BASE_DIR / "db.sqlite3",
41
+ }
42
+ }
43
+
44
+ DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"
@@ -0,0 +1,6 @@
1
+ from django.contrib import admin
2
+ from django.urls import path
3
+
4
+ urlpatterns = [
5
+ path("admin/", admin.site.urls),
6
+ ]
@@ -0,0 +1,9 @@
1
+ """WSGI config for {{projectName}} project."""
2
+
3
+ import os
4
+
5
+ from django.core.wsgi import get_wsgi_application
6
+
7
+ os.environ.setdefault("DJANGO_SETTINGS_MODULE", "{{projectName}}.settings")
8
+
9
+ application = get_wsgi_application()
@@ -0,0 +1,21 @@
1
+ {
2
+ "name": "django",
3
+ "description": "Django web framework scaffold",
4
+ "version": 1,
5
+ "language": "python",
6
+ "framework": "django",
7
+ "extends": "python-base",
8
+ "tooling": {
9
+ "packageManager": "pip",
10
+ "linter": "ruff",
11
+ "formatter": "ruff",
12
+ "buildTool": "setuptools",
13
+ "testRunner": "pytest",
14
+ "lockFile": "requirements.txt"
15
+ },
16
+ "detect": [
17
+ { "file": "requirements.txt", "contains": "django" },
18
+ { "file": "pyproject.toml", "contains": "django" },
19
+ { "file": "manage.py", "contains": "django" }
20
+ ]
21
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "name": "{{projectName}}",
3
+ "scripts": {
4
+ "dev": "tsx watch src/app.ts",
5
+ "build": "tsc",
6
+ "start": "node dist/app.js"
7
+ },
8
+ "dependencies": {
9
+ "express": "^4.0.0"
10
+ },
11
+ "devDependencies": {
12
+ "@types/express": "^4.0.0",
13
+ "tsx": "^4.0.0"
14
+ }
15
+ }
@@ -0,0 +1,12 @@
1
+ import express from 'express';
2
+
3
+ const app = express();
4
+ const port = process.env.PORT || 3000;
5
+
6
+ app.get('/', (_req, res) => {
7
+ res.json({ message: 'Welcome to your Harness Engineering project' });
8
+ });
9
+
10
+ app.listen(port, () => {
11
+ console.log(`Server running on port ${port}`);
12
+ });
File without changes
@@ -0,0 +1,16 @@
1
+ {
2
+ "name": "express",
3
+ "description": "Express.js framework overlay",
4
+ "framework": "express",
5
+ "version": 1,
6
+ "language": "typescript",
7
+ "tooling": {
8
+ "packageManager": "npm",
9
+ "linter": "eslint",
10
+ "formatter": "prettier",
11
+ "buildTool": "tsc",
12
+ "testRunner": "vitest",
13
+ "lockFile": "package-lock.json"
14
+ },
15
+ "detect": [{ "file": "package.json", "contains": "express" }]
16
+ }
@@ -0,0 +1,2 @@
1
+ fastapi>=0.100.0
2
+ uvicorn[standard]>=0.23.0
@@ -0,0 +1,8 @@
1
+ from fastapi import FastAPI
2
+
3
+ app = FastAPI()
4
+
5
+
6
+ @app.get("/")
7
+ async def root():
8
+ return {"message": "Hello, world!"}
@@ -0,0 +1,20 @@
1
+ {
2
+ "name": "fastapi",
3
+ "description": "FastAPI web framework scaffold",
4
+ "version": 1,
5
+ "language": "python",
6
+ "framework": "fastapi",
7
+ "extends": "python-base",
8
+ "tooling": {
9
+ "packageManager": "pip",
10
+ "linter": "ruff",
11
+ "formatter": "ruff",
12
+ "buildTool": "setuptools",
13
+ "testRunner": "pytest",
14
+ "lockFile": "requirements.txt"
15
+ },
16
+ "detect": [
17
+ { "file": "requirements.txt", "contains": "fastapi" },
18
+ { "file": "pyproject.toml", "contains": "fastapi" }
19
+ ]
20
+ }
@@ -0,0 +1,5 @@
1
+ module {{goModulePath}}
2
+
3
+ go 1.21
4
+
5
+ require github.com/gin-gonic/gin v1.9.1
@@ -0,0 +1,15 @@
1
+ package main
2
+
3
+ import (
4
+ "net/http"
5
+
6
+ "github.com/gin-gonic/gin"
7
+ )
8
+
9
+ func main() {
10
+ r := gin.Default()
11
+ r.GET("/", func(c *gin.Context) {
12
+ c.JSON(http.StatusOK, gin.H{"message": "Hello, world!"})
13
+ })
14
+ r.Run(":8080")
15
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": "gin",
3
+ "description": "Gin web framework scaffold",
4
+ "version": 1,
5
+ "language": "go",
6
+ "framework": "gin",
7
+ "extends": "go-base",
8
+ "tooling": {
9
+ "packageManager": "go",
10
+ "linter": "golangci-lint",
11
+ "formatter": "gofmt",
12
+ "buildTool": "go",
13
+ "testRunner": "go test"
14
+ },
15
+ "detect": [
16
+ { "file": "go.mod", "contains": "gin-gonic" },
17
+ { "file": "go.sum", "contains": "gin-gonic" }
18
+ ]
19
+ }
@@ -0,0 +1,16 @@
1
+ linters:
2
+ enable:
3
+ - errcheck
4
+ - govet
5
+ - staticcheck
6
+ - unused
7
+ - gosimple
8
+ - ineffassign
9
+ disable:
10
+ - depguard
11
+
12
+ run:
13
+ timeout: 5m
14
+
15
+ issues:
16
+ max-issues-per-linter: 50
@@ -0,0 +1,35 @@
1
+ # {{projectName}} Knowledge Map
2
+
3
+ ## About This Project
4
+
5
+ {{projectName}} -- A Go project managed with Harness Engineering practices.
6
+
7
+ ## Language & Tooling
8
+
9
+ - **Language:** Go
10
+ - **Module:** {{goModulePath}}
11
+ - **Linter:** golangci-lint
12
+ - **Formatter:** gofmt
13
+ - **Test runner:** go test
14
+
15
+ ## Directory Structure
16
+
17
+ - `main.go` -- Application entry point
18
+ - `go.mod` -- Module definition and dependencies
19
+ - `internal/` -- Private application packages (by convention)
20
+ - `pkg/` -- Public library packages (by convention)
21
+
22
+ ## Conventions
23
+
24
+ - Follow Effective Go guidelines
25
+ - Use `gofmt` for formatting (enforced by golangci-lint)
26
+ - Tests live alongside source files as `_test.go` suffix
27
+ - Error handling: always check returned errors, never discard
28
+ - Package names are lowercase, single-word, no underscores
29
+
30
+ ## Harness Skills
31
+
32
+ - Use `harness-brainstorming` for design exploration
33
+ - Use `harness-planning` to break features into atomic tasks
34
+ - Use `harness-execution` to implement tasks with TDD
35
+ - Refer to `harness.config.json` for project tooling configuration
@@ -0,0 +1,3 @@
1
+ module {{goModulePath}}
2
+
3
+ go 1.21
@@ -0,0 +1,17 @@
1
+ {
2
+ "version": 1,
3
+ "name": "{{projectName}}",
4
+ "agentsMapPath": "./AGENTS.md",
5
+ "docsDir": "./docs",
6
+ "template": {
7
+ "language": "go",
8
+ "version": 1
9
+ },
10
+ "tooling": {
11
+ "packageManager": "go",
12
+ "linter": "golangci-lint",
13
+ "formatter": "gofmt",
14
+ "buildTool": "go",
15
+ "testRunner": "go test"
16
+ }
17
+ }
@@ -0,0 +1,7 @@
1
+ package main
2
+
3
+ import "fmt"
4
+
5
+ func main() {
6
+ fmt.Println("Hello, world!")
7
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "name": "go-base",
3
+ "description": "Go language base scaffold with golangci-lint",
4
+ "version": 1,
5
+ "language": "go",
6
+ "tooling": {
7
+ "packageManager": "go",
8
+ "linter": "golangci-lint",
9
+ "formatter": "gofmt",
10
+ "buildTool": "go",
11
+ "testRunner": "go test"
12
+ },
13
+ "mergeStrategy": { "json": "deep-merge", "files": "overlay-wins" }
14
+ }
@@ -0,0 +1,35 @@
1
+ # {{projectName}} Knowledge Map
2
+
3
+ ## About This Project
4
+
5
+ {{projectName}} -- A Java project managed with Harness Engineering practices.
6
+
7
+ ## Language & Tooling
8
+
9
+ - **Language:** Java 17
10
+ - **Build tool:** Maven
11
+ - **Linter:** Checkstyle
12
+ - **Test runner:** JUnit 5
13
+ - **Group ID:** {{javaGroupId}}
14
+
15
+ ## Directory Structure
16
+
17
+ - `src/main/java/` -- Application source code
18
+ - `src/test/java/` -- Test files (JUnit 5)
19
+ - `pom.xml` -- Maven project configuration
20
+ - `checkstyle.xml` -- Code style rules
21
+
22
+ ## Conventions
23
+
24
+ - Follow Google Java Style Guide (Checkstyle enforced)
25
+ - Use Java 17 language features
26
+ - Tests live in `src/test/java/` mirroring `src/main/java/` structure
27
+ - Use JUnit 5 assertions and lifecycle annotations
28
+ - Prefer dependency injection over static methods
29
+
30
+ ## Harness Skills
31
+
32
+ - Use `harness-brainstorming` for design exploration
33
+ - Use `harness-planning` to break features into atomic tasks
34
+ - Use `harness-execution` to implement tasks with TDD
35
+ - Refer to `harness.config.json` for project tooling configuration
@@ -0,0 +1,20 @@
1
+ <?xml version="1.0"?>
2
+ <!DOCTYPE module PUBLIC
3
+ "-//Checkstyle//DTD Checkstyle Configuration 1.3//EN"
4
+ "https://checkstyle.org/dtds/configuration_1_3.dtd">
5
+ <module name="Checker">
6
+ <property name="charset" value="UTF-8"/>
7
+ <module name="TreeWalker">
8
+ <module name="WhitespaceAround"/>
9
+ <module name="NeedBraces"/>
10
+ <module name="LeftCurly"/>
11
+ <module name="RightCurly"/>
12
+ <module name="EmptyBlock"/>
13
+ <module name="AvoidStarImport"/>
14
+ <module name="UnusedImports"/>
15
+ </module>
16
+ <module name="FileLength">
17
+ <property name="max" value="500"/>
18
+ </module>
19
+ <module name="NewlineAtEndOfFile"/>
20
+ </module>
@@ -0,0 +1,16 @@
1
+ {
2
+ "version": 1,
3
+ "name": "{{projectName}}",
4
+ "agentsMapPath": "./AGENTS.md",
5
+ "docsDir": "./docs",
6
+ "template": {
7
+ "language": "java",
8
+ "version": 1
9
+ },
10
+ "tooling": {
11
+ "packageManager": "maven",
12
+ "linter": "checkstyle",
13
+ "buildTool": "maven",
14
+ "testRunner": "junit"
15
+ }
16
+ }
@@ -0,0 +1,39 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project xmlns="http://maven.apache.org/POM/4.0.0"
3
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5
+ <modelVersion>4.0.0</modelVersion>
6
+
7
+ <groupId>{{javaGroupId}}</groupId>
8
+ <artifactId>{{projectName}}</artifactId>
9
+ <version>0.1.0</version>
10
+ <packaging>jar</packaging>
11
+
12
+ <properties>
13
+ <maven.compiler.source>17</maven.compiler.source>
14
+ <maven.compiler.target>17</maven.compiler.target>
15
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
16
+ </properties>
17
+
18
+ <dependencies>
19
+ <dependency>
20
+ <groupId>org.junit.jupiter</groupId>
21
+ <artifactId>junit-jupiter</artifactId>
22
+ <version>5.10.0</version>
23
+ <scope>test</scope>
24
+ </dependency>
25
+ </dependencies>
26
+
27
+ <build>
28
+ <plugins>
29
+ <plugin>
30
+ <groupId>org.apache.maven.plugins</groupId>
31
+ <artifactId>maven-checkstyle-plugin</artifactId>
32
+ <version>3.3.0</version>
33
+ <configuration>
34
+ <configLocation>checkstyle.xml</configLocation>
35
+ </configuration>
36
+ </plugin>
37
+ </plugins>
38
+ </build>
39
+ </project>
@@ -0,0 +1,5 @@
1
+ public class App {
2
+ public static void main(String[] args) {
3
+ System.out.println("Hello, world!");
4
+ }
5
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "name": "java-base",
3
+ "description": "Java language base scaffold with Checkstyle and Maven",
4
+ "version": 1,
5
+ "language": "java",
6
+ "tooling": {
7
+ "packageManager": "maven",
8
+ "linter": "checkstyle",
9
+ "buildTool": "maven",
10
+ "testRunner": "junit"
11
+ },
12
+ "mergeStrategy": { "json": "deep-merge", "files": "overlay-wins" }
13
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "$schema": "https://json.schemastore.org/nest-cli",
3
+ "collection": "@nestjs/schematics",
4
+ "sourceRoot": "src"
5
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "name": "{{projectName}}",
3
+ "scripts": {
4
+ "dev": "nest start --watch",
5
+ "build": "nest build",
6
+ "start": "node dist/main.js"
7
+ },
8
+ "dependencies": {
9
+ "@nestjs/common": "^10.0.0",
10
+ "@nestjs/core": "^10.0.0",
11
+ "@nestjs/platform-express": "^10.0.0",
12
+ "reflect-metadata": "^0.2.0",
13
+ "rxjs": "^7.0.0"
14
+ },
15
+ "devDependencies": {
16
+ "@nestjs/cli": "^10.0.0"
17
+ }
18
+ }
@@ -0,0 +1,8 @@
1
+ import { Module } from '@nestjs/common';
2
+
3
+ @Module({
4
+ imports: [],
5
+ controllers: [],
6
+ providers: [],
7
+ })
8
+ export class AppModule {}
File without changes
@@ -0,0 +1,11 @@
1
+ import { NestFactory } from '@nestjs/core';
2
+ import { AppModule } from './app.module';
3
+
4
+ async function bootstrap() {
5
+ const app = await NestFactory.create(AppModule);
6
+ const port = process.env.PORT || 3000;
7
+ await app.listen(port);
8
+ console.log(`Application running on port ${port}`);
9
+ }
10
+
11
+ bootstrap();
@@ -0,0 +1,16 @@
1
+ {
2
+ "name": "nestjs",
3
+ "description": "NestJS framework overlay",
4
+ "framework": "nestjs",
5
+ "version": 1,
6
+ "language": "typescript",
7
+ "tooling": {
8
+ "packageManager": "npm",
9
+ "linter": "eslint",
10
+ "formatter": "prettier",
11
+ "buildTool": "nest",
12
+ "testRunner": "jest",
13
+ "lockFile": "package-lock.json"
14
+ },
15
+ "detect": [{ "file": "package.json", "contains": "@nestjs/core" }, { "file": "nest-cli.json" }]
16
+ }
@@ -2,5 +2,19 @@
2
2
  "name": "nextjs",
3
3
  "description": "Next.js framework overlay",
4
4
  "framework": "nextjs",
5
- "version": 1
5
+ "language": "typescript",
6
+ "version": 1,
7
+ "mergeStrategy": { "json": "deep-merge", "files": "overlay-wins" },
8
+ "tooling": {
9
+ "packageManager": "npm",
10
+ "linter": "eslint",
11
+ "formatter": "prettier",
12
+ "buildTool": "next",
13
+ "testRunner": "vitest"
14
+ },
15
+ "detect": [
16
+ { "file": "next.config.mjs", "contains": "" },
17
+ { "file": "next.config.js", "contains": "" },
18
+ { "file": "package.json", "contains": "next" }
19
+ ]
6
20
  }
@@ -0,0 +1,32 @@
1
+ # {{projectName}} Knowledge Map
2
+
3
+ ## About This Project
4
+
5
+ {{projectName}} -- A Python project managed with Harness Engineering practices.
6
+
7
+ ## Language & Tooling
8
+
9
+ - **Language:** Python (>={{pythonMinVersion}})
10
+ - **Linter/Formatter:** Ruff
11
+ - **Test runner:** pytest
12
+ - **Package manager:** pip
13
+
14
+ ## Directory Structure
15
+
16
+ - `src/` -- Application source code
17
+ - `tests/` -- Test files (pytest)
18
+ - `pyproject.toml` -- Project metadata and dependencies
19
+
20
+ ## Conventions
21
+
22
+ - Follow PEP 8 style (enforced by Ruff)
23
+ - Use type hints for function signatures
24
+ - Tests live in `tests/` and mirror `src/` structure
25
+ - Import sorting managed by Ruff (isort rules)
26
+
27
+ ## Harness Skills
28
+
29
+ - Use `harness-brainstorming` for design exploration
30
+ - Use `harness-planning` to break features into atomic tasks
31
+ - Use `harness-execution` to implement tasks with TDD
32
+ - Refer to `harness.config.json` for project tooling configuration
@@ -0,0 +1,16 @@
1
+ {
2
+ "version": 1,
3
+ "name": "{{projectName}}",
4
+ "agentsMapPath": "./AGENTS.md",
5
+ "docsDir": "./docs",
6
+ "template": {
7
+ "language": "python",
8
+ "version": 1
9
+ },
10
+ "tooling": {
11
+ "packageManager": "pip",
12
+ "linter": "ruff",
13
+ "formatter": "ruff",
14
+ "testRunner": "pytest"
15
+ }
16
+ }