agentme 0.3.3 → 0.6.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 (22) hide show
  1. package/.xdrs/agentme/edrs/application/003-javascript-project-tooling.md +32 -11
  2. package/.xdrs/agentme/edrs/application/010-golang-project-tooling.md +32 -18
  3. package/.xdrs/agentme/edrs/application/014-python-project-tooling.md +152 -0
  4. package/.xdrs/agentme/edrs/application/015-cli-tool-standards.md +107 -0
  5. package/.xdrs/agentme/edrs/application/skills/001-create-javascript-project/SKILL.md +61 -19
  6. package/.xdrs/agentme/edrs/application/skills/003-create-golang-project/SKILL.md +19 -9
  7. package/.xdrs/agentme/edrs/application/skills/005-create-python-project/SKILL.md +363 -0
  8. package/.xdrs/agentme/edrs/devops/005-monorepo-structure.md +37 -5
  9. package/.xdrs/agentme/edrs/devops/006-github-pipelines.md +6 -1
  10. package/.xdrs/agentme/edrs/devops/008-common-targets.md +5 -0
  11. package/.xdrs/agentme/edrs/devops/skills/002-monorepo-setup/SKILL.md +58 -12
  12. package/.xdrs/agentme/edrs/governance/013-contributing-guide-requirements.md +5 -0
  13. package/.xdrs/agentme/edrs/index.md +3 -0
  14. package/.xdrs/agentme/edrs/observability/011-service-health-check-endpoint.md +5 -0
  15. package/.xdrs/agentme/edrs/principles/002-coding-best-practices.md +5 -0
  16. package/.xdrs/agentme/edrs/principles/004-unit-test-requirements.md +5 -0
  17. package/.xdrs/agentme/edrs/principles/007-project-quality-standards.md +7 -2
  18. package/.xdrs/agentme/edrs/principles/009-error-handling.md +5 -0
  19. package/.xdrs/agentme/edrs/principles/012-continuous-xdr-enrichment.md +6 -1
  20. package/.xdrs/agentme/edrs/principles/016-cross-language-module-structure.md +133 -0
  21. package/.xdrs/agentme/edrs/principles/articles/001-continuous-xdr-improvement.md +3 -3
  22. package/package.json +23 -3
@@ -12,9 +12,9 @@ compatibility: Go 1.21+
12
12
 
13
13
  ## Overview
14
14
 
15
- Creates a complete Go CLI project from scratch, following the layout from [agentme-edr-010](../../010-golang-project-tooling.md). Business logic lives in named feature packages; CLI wiring lives in `cli/<feature>/`; `main.go` is a thin dispatcher. The project builds cross-platform static binaries via a Makefile.
15
+ Creates a complete Go CLI project from scratch, following the layout from [agentme-edr-010](../../010-golang-project-tooling.md). Business logic lives in named feature packages; CLI wiring lives in `cli/<feature>/`; `main.go` is a thin dispatcher. The module root owns its `Makefile`, `README.md`, `dist/`, and `.cache/` folders.
16
16
 
17
- Related EDR: [agentme-edr-010](../../010-golang-project-tooling.md)
17
+ Related EDRs: [agentme-edr-010](../../010-golang-project-tooling.md), [agentme-edr-016](../../../principles/016-cross-language-module-structure.md)
18
18
 
19
19
  ## Instructions
20
20
 
@@ -83,11 +83,16 @@ func main() {
83
83
  SHELL := /bin/bash
84
84
 
85
85
  BINARY := [binary]
86
+ CACHE_DIR := .cache
87
+ export GOCACHE := $(abspath $(CACHE_DIR)/go-build)
88
+ export GOMODCACHE := $(abspath $(CACHE_DIR)/go-mod)
89
+ export GOLANGCI_LINT_CACHE := $(abspath $(CACHE_DIR)/golangci-lint)
86
90
 
87
91
  all: build lint test
88
92
 
89
93
  build: install
90
94
  @mkdir -p dist
95
+ @mkdir -p $(GOCACHE) $(GOMODCACHE)
91
96
  go build -o dist/$(BINARY) .
92
97
 
93
98
  build-all: build-arch-os-darwin-amd64 build-arch-os-darwin-arm64 build-arch-os-linux-amd64 build-arch-os-linux-arm64 build-arch-os-windows-amd64
@@ -113,6 +118,7 @@ build-arch-os:
113
118
  @if [ "${ARCH}" == "" ]; then echo "ENV ARCH is required"; exit 1; fi
114
119
  @echo "Compiling $(BINARY) for ${OS}-${ARCH}..."
115
120
  @mkdir -p dist/${OS}-${ARCH}
121
+ @mkdir -p $(GOCACHE) $(GOMODCACHE)
116
122
  go mod download
117
123
  GOOS=${OS} GOARCH=${ARCH} CGO_ENABLED=0 go build -a -o dist/${OS}-${ARCH}/$(BINARY) .
118
124
  @echo "Done"
@@ -130,15 +136,16 @@ test:
130
136
  go test -cover ./...
131
137
 
132
138
  test-coverage:
133
- go test -coverprofile=coverage.out ./...
134
- go tool cover -func coverage.out
139
+ @mkdir -p $(CACHE_DIR)
140
+ go test -coverprofile=$(CACHE_DIR)/coverage.out ./...
141
+ go tool cover -func $(CACHE_DIR)/coverage.out
135
142
 
136
143
  benchmark:
137
144
  go test -bench . -benchmem -count 5 ./...
138
145
 
139
146
  clean:
140
147
  rm -rf dist
141
- rm -f coverage.out
148
+ rm -rf .cache
142
149
 
143
150
  start:
144
151
  go run ./ [subcommand]
@@ -164,6 +171,7 @@ run:
164
171
 
165
172
  ```
166
173
  dist/
174
+ .cache/
167
175
  coverage.out
168
176
  *.pprof
169
177
  .DS_Store
@@ -182,10 +190,10 @@ coverage.out
182
190
 
183
191
  ## Development
184
192
 
185
- make build # compile binary to dist/
186
- make lint # run golangci-lint
187
- make test # run tests with coverage
188
- make start # run locally with default args
193
+ make build # compile binary to dist/
194
+ make lint # run golangci-lint with cache in .cache/
195
+ make test # run tests with coverage artifacts in .cache/
196
+ make start # run locally with default args
189
197
  ```
190
198
 
191
199
  ---
@@ -306,6 +314,8 @@ Fix any compile or lint errors before finishing.
306
314
  - Business logic only in `[feature]/` packages — no flag parsing, no `fmt.Println` for diagnostics.
307
315
  - `cli/[feature]/` owns flags, output, and calls domain. No logic here beyond reading flags and printing results.
308
316
  - All tests co-located (`*_test.go` next to the file under test).
317
+ - Use `tests_integration/` for integration flows and `tests_benchmark/` when benchmarks need dedicated harnesses or datasets.
309
318
  - Log with `logrus`; never use `fmt.Println` for diagnostic/debug output.
310
319
  - All development tasks go through `make` targets — never run `go` directly for routine ops.
311
320
  - Do not create an `internal/` package unless explicitly justified (importability is preferred).
321
+ - If the project is a reusable library, place consumer examples in a sibling `examples/` folder outside the module root and keep them on the public module import path.
@@ -0,0 +1,363 @@
1
+ ---
2
+ name: 005-create-python-project
3
+ description: >
4
+ Scaffolds the initial boilerplate structure for a Python library or CLI project following the
5
+ standard tooling and layout defined in agentme-edr-014. Activate this skill when the user asks
6
+ to create, scaffold, or initialize a new Python package, CLI, library, or similar project
7
+ structure.
8
+ metadata:
9
+ author: flaviostutz
10
+ version: "1.0"
11
+ compatibility: Python 3.12+
12
+ ---
13
+
14
+ ## Overview
15
+
16
+ Creates a complete Python project from scratch using `uv`, `pyproject.toml`, Ruff, Pyright,
17
+ Pytest, and Makefiles. The default layout keeps the library self-contained under `lib/`, uses a
18
+ shared root `.venv/`, redirects persistent caches into `.cache/`, and places runnable consumer
19
+ projects under the sibling `examples/` folder.
20
+
21
+ Related EDRs: [agentme-edr-014](../../014-python-project-tooling.md), [agentme-edr-016](../../../principles/016-cross-language-module-structure.md)
22
+
23
+ ## Instructions
24
+
25
+ ### Phase 1: Gather information
26
+
27
+ Ask for or infer from context:
28
+
29
+ - **Package name** - Python distribution/import name, e.g. `my_tool`
30
+ - **Short description** - one sentence
31
+ - **Author** name or GitHub username
32
+ - **Python version** - default `3.13`
33
+ - **Project kind** - `library` or `cli`
34
+ - **Primary entry point** - first module or command name to scaffold
35
+ - **GitHub repo URL** - optional, for project metadata
36
+ - **Confirm target directory** - default: current workspace root
37
+
38
+ ### Phase 2: Create root files
39
+
40
+ Create these files first.
41
+
42
+ **`./Makefile`**
43
+
44
+ ```makefile
45
+ SHELL := /bin/bash
46
+ ROOT_DIR := $(abspath .)
47
+ export UV_PROJECT_ENVIRONMENT := $(ROOT_DIR)/.venv
48
+ export UV_CACHE_DIR := $(ROOT_DIR)/.cache/uv
49
+
50
+ all: build lint test
51
+
52
+ install:
53
+ $(MAKE) -C lib install
54
+
55
+ build:
56
+ $(MAKE) -C lib build
57
+
58
+ lint:
59
+ $(MAKE) -C lib lint
60
+
61
+ lint-fix:
62
+ $(MAKE) -C lib lint-fix
63
+
64
+ test: test-unit test-examples
65
+
66
+ test-unit:
67
+ $(MAKE) -C lib test-unit
68
+
69
+ test-examples: build
70
+ @for dir in examples/*; do \
71
+ if [ -f "$$dir/pyproject.toml" ]; then \
72
+ echo ">>> Running $$dir"; \
73
+ UV_PROJECT_ENVIRONMENT="$(UV_PROJECT_ENVIRONMENT)" UV_CACHE_DIR="$(UV_CACHE_DIR)" uv sync --project "$$dir" --frozen || exit 1; \
74
+ UV_PROJECT_ENVIRONMENT="$(UV_PROJECT_ENVIRONMENT)" UV_CACHE_DIR="$(UV_CACHE_DIR)" uv pip install --python "$(UV_PROJECT_ENVIRONMENT)/bin/python" lib/dist/*.whl || exit 1; \
75
+ UV_PROJECT_ENVIRONMENT="$(UV_PROJECT_ENVIRONMENT)" UV_CACHE_DIR="$(UV_CACHE_DIR)" uv run --project "$$dir" python main.py || exit 1; \
76
+ fi; \
77
+ done
78
+
79
+ clean:
80
+ $(MAKE) -C lib clean
81
+ rm -rf .cache
82
+ rm -rf .venv
83
+ ```
84
+
85
+ The root `Makefile` keeps the repository clean by delegating package work to `lib/` and treating each example directory as an independent consumer project.
86
+
87
+ If the repository already uses Mise, wrap the delegated commands with `mise exec --` and pin both Python and uv in `.mise.toml`.
88
+
89
+ **`./.gitignore`**
90
+
91
+ ```gitignore
92
+ .venv/
93
+ dist/
94
+ .cache/
95
+ ```
96
+
97
+ **`./README.md`**
98
+
99
+ Keep this README focused on the repository or workspace. Put Getting Started near the top.
100
+
101
+ ````markdown
102
+ # [package-name]
103
+
104
+ [description]
105
+
106
+ ## Getting Started
107
+
108
+ ```sh
109
+ make test
110
+ ```
111
+
112
+ The published package lives in `lib/` and runnable consumer examples live in `examples/`.
113
+ ````
114
+
115
+ ### Phase 3: Create `lib/`
116
+
117
+ `lib/` contains everything the library needs: source, tests, package metadata, lockfile, build
118
+ artifacts, and library-specific Makefile targets.
119
+
120
+ **`lib/Makefile`**
121
+
122
+ ```makefile
123
+ SHELL := /bin/bash
124
+ ROOT_DIR := $(abspath ..)
125
+ export UV_PROJECT_ENVIRONMENT := $(ROOT_DIR)/.venv
126
+ export UV_CACHE_DIR := $(ROOT_DIR)/.cache/uv
127
+ export RUFF_CACHE_DIR := $(abspath .cache/ruff)
128
+ export PYTHONPYCACHEPREFIX := $(abspath .cache/pycache)
129
+ export COVERAGE_FILE := $(abspath .cache/coverage)
130
+
131
+ PACKAGE_NAME ?= your_package
132
+
133
+ all: build lint test-unit
134
+
135
+ install:
136
+ uv sync --project . --frozen --all-extras --dev
137
+
138
+ build: install
139
+ rm -rf dist
140
+ uv build --project . --out-dir dist
141
+
142
+ lint: install
143
+ uv run --project . ruff format --check .
144
+ uv run --project . ruff check .
145
+ uv run --project . pyright
146
+ uv run --project . pip-audit
147
+
148
+ lint-fix: install
149
+ uv run --project . ruff format .
150
+ uv run --project . ruff check . --fix
151
+ uv run --project . pyright
152
+ uv run --project . pip-audit
153
+
154
+ test-unit: install
155
+ uv run --project . pytest -o cache_dir=.cache/pytest --cov=src/$(PACKAGE_NAME) --cov-branch --cov-report=term-missing --cov-report=html:.cache/htmlcov --cov-fail-under=80
156
+
157
+ run: install
158
+ uv run --project . python -m $(PACKAGE_NAME)
159
+
160
+ dev: run
161
+
162
+ update-lockfile:
163
+ uv lock --project . --upgrade
164
+
165
+ clean:
166
+ rm -rf dist .cache
167
+ ```
168
+
169
+ **`lib/pyproject.toml`**
170
+
171
+ Replace placeholders such as `[package-name]`, `[description]`, `[author]`, and `[python-version]`.
172
+
173
+ ```toml
174
+ [project]
175
+ name = "[package-name]"
176
+ version = "0.0.1"
177
+ description = "[description]"
178
+ readme = "README.md"
179
+ requires-python = ">=[python-version]"
180
+ dependencies = []
181
+
182
+ [[project.authors]]
183
+ name = "[author]"
184
+
185
+ [project.optional-dependencies]
186
+ dev = []
187
+
188
+ [dependency-groups]
189
+ dev = [
190
+ "pip-audit>=2.9.0",
191
+ "pyright>=1.1.400",
192
+ "pytest>=8.4.0",
193
+ "pytest-cov>=6.1.0",
194
+ "ruff>=0.11.0",
195
+ ]
196
+
197
+ [build-system]
198
+ requires = ["hatchling>=1.27.0"]
199
+ build-backend = "hatchling.build"
200
+
201
+ [tool.ruff]
202
+ line-length = 100
203
+ target-version = "py313"
204
+
205
+ [tool.ruff.lint]
206
+ select = ["E", "F", "I", "B", "UP"]
207
+
208
+ [tool.pyright]
209
+ include = ["src", "tests"]
210
+ venvPath = ".."
211
+ venv = ".venv"
212
+ typeCheckingMode = "standard"
213
+
214
+ [tool.pytest.ini_options]
215
+ testpaths = ["tests"]
216
+ addopts = "-q"
217
+ ```
218
+
219
+ Use `lib/pyproject.toml` as the single configuration file for the package. Do not add
220
+ `requirements.txt`, `setup.py`, `setup.cfg`, `ruff.toml`, or `pyrightconfig.json` by default.
221
+
222
+ **`lib/README.md`**
223
+
224
+ This README is the published package README referenced by `lib/pyproject.toml`.
225
+
226
+ ````markdown
227
+ # [package-name]
228
+
229
+ [description]
230
+
231
+ ## Getting Started
232
+
233
+ ```sh
234
+ uv sync --dev
235
+ make test
236
+ ```
237
+
238
+ ```python
239
+ from [package-name] import hello
240
+
241
+ print(hello("world"))
242
+ ```
243
+
244
+ ## Development
245
+
246
+ ```sh
247
+ make build
248
+ make lint
249
+ make test
250
+ ```
251
+ ````
252
+
253
+ ### Phase 4: Create the package and tests inside `lib/`
254
+
255
+ Create this baseline structure.
256
+
257
+ **`lib/src/[package_name]/__init__.py`**
258
+
259
+ ```python
260
+ from .core import hello
261
+
262
+ __all__ = ["hello"]
263
+ ```
264
+
265
+ **`lib/src/[package_name]/core.py`**
266
+
267
+ ```python
268
+ def hello(name: str) -> str:
269
+ return f"Hello, {name}!"
270
+ ```
271
+
272
+ **`lib/src/[package_name]/__main__.py`**
273
+
274
+ Use this only for CLI-oriented projects.
275
+
276
+ ```python
277
+ from .core import hello
278
+
279
+
280
+ def main() -> None:
281
+ print(hello("world"))
282
+
283
+
284
+ if __name__ == "__main__":
285
+ main()
286
+ ```
287
+
288
+ **`lib/tests/test_core.py`**
289
+
290
+ ```python
291
+ from [package_name].core import hello
292
+
293
+
294
+ def test_hello() -> None:
295
+ assert hello("world") == "Hello, world!"
296
+ ```
297
+
298
+ If two or more test files need shared fixtures, create `lib/tests/conftest.py` and move shared setup there.
299
+
300
+ If the module needs slower end-to-end coverage, place those tests in `lib/tests_integration/`. Put dedicated benchmark harnesses in `lib/tests_benchmark/`.
301
+
302
+ ### Phase 5: Create examples for libraries and utilities
303
+
304
+ If the project is a library or shared utility, add an `examples/` directory with one subdirectory per runnable consumer example. Each example must be its own Python project.
305
+
306
+ **`examples/basic-usage/pyproject.toml`**
307
+
308
+ ```toml
309
+ [project]
310
+ name = "basic-usage"
311
+ version = "0.0.0"
312
+ requires-python = ">=[python-version]"
313
+ dependencies = []
314
+ ```
315
+
316
+ The root `test-examples` target installs the wheel built into `lib/dist/` before running each
317
+ example. Do not point examples back to `../../lib` or `lib/src/`.
318
+
319
+ **`examples/basic-usage/main.py`**
320
+
321
+ ```python
322
+ from [package_name] import hello
323
+
324
+
325
+ print(hello("world"))
326
+ ```
327
+
328
+ Examples must import the package as a consumer would. Avoid relative imports back into `lib/src/`.
329
+
330
+ ### Phase 6: Verify
331
+
332
+ After creating the files:
333
+
334
+ 1. Run `make install`.
335
+ 2. Run `make lint-fix`.
336
+ 3. Run `make test`.
337
+ 4. Run `make build`.
338
+ 5. Fix all failures before finishing.
339
+
340
+ ## Examples
341
+
342
+ **Input:** "Create a Python library called `event_tools`"
343
+ - Create `Makefile`, `README.md`, `lib/pyproject.toml`, `lib/Makefile`, `lib/src/event_tools/`, `lib/tests/`, and `examples/`
344
+ - Add `lib/README.md`, `.cache/` handling, and install examples from the built wheel in `lib/dist/`
345
+ - Configure `uv`, Ruff, Pyright, Pytest, `pytest-cov`, and `pip-audit`
346
+ - Verify with `make lint-fix`, `make test`, and `make build`
347
+
348
+ **Input:** "Scaffold a Python CLI package"
349
+ - Add `lib/src/<package_name>/__main__.py`
350
+ - Add `[project.scripts]` in `lib/pyproject.toml` when the command name must differ from the module name
351
+ - Keep the same Makefile and quality checks
352
+
353
+ ## Edge Cases
354
+
355
+ - If the repository already has a root `.mise.toml`, pin Python and uv there instead of assuming host-installed tools.
356
+ - If the project is fewer than 100 lines and explicitly marked as a spike or experiment, examples and linting may be skipped only when another applicable XDR allows it.
357
+ - If an example needs extra dependencies, keep them in that example's `pyproject.toml`; do not move them into `lib/pyproject.toml` unless the library truly needs them.
358
+ - If the user asks for an app with framework-specific needs such as FastAPI or Django, keep this baseline and add the framework config on top instead of replacing it.
359
+
360
+ ## References
361
+
362
+ - [agentme-edr-014](../../014-python-project-tooling.md)
363
+ - [_core-adr-003 - Skill standards](../../../../../_core/adrs/principles/003-skill-standards.md)
@@ -1,3 +1,8 @@
1
+ ---
2
+ name: agentme-edr-005-monorepo-structure
3
+ description: Defines the standard monorepo layout, naming, and build conventions using shared areas, Mise, and Makefiles. Use when creating or reviewing monorepos.
4
+ ---
5
+
1
6
  # agentme-edr-005: Monorepo structure
2
7
 
3
8
  ## Context and Problem Statement
@@ -8,9 +13,10 @@ What monorepo structure, naming conventions, tooling, and build standards should
8
13
 
9
14
  ## Decision Outcome
10
15
 
11
- **Adopt a standardized monorepo layout with top-level application folders, a shared library area, Mise-managed tooling, and Makefiles at every level so any contributor can build, lint, and test any part of the monorepo with a single, predictable command.**
16
+ **Adopt a standardized monorepo layout with top-level application folders that aggregate independent module roots, shared parent-level example and test areas, Mise-managed tooling, and Makefiles at every level.**
12
17
 
13
18
  For step-by-step scaffolding instructions see [skill 002-monorepo-setup](skills/002-monorepo-setup/SKILL.md).
19
+ Module folder responsibilities, artifact locations, and test-folder conventions follow [agentme-edr-016](../principles/016-cross-language-module-structure.md).
14
20
 
15
21
  ### Policies
16
22
 
@@ -18,16 +24,26 @@ For step-by-step scaffolding instructions see [skill 002-monorepo-setup](skills/
18
24
 
19
25
  ```
20
26
  /
27
+ ├── .cache/ # Optional shared cache for repo-level tooling
21
28
  ├── shared/ # Resources shared across ALL applications
22
29
  │ ├── libs/ # Reusable libraries consumed by applications
23
30
  │ └── scripts/ # Build/CI/dev scripts used across applications
24
31
 
25
32
  ├── <application>/ # One folder per application or project
26
33
  │ ├── README.md # REQUIRED
27
- │ ├── <module>/ # One folder per compilable module
34
+ │ ├── Makefile # REQUIRED
35
+ │ ├── <module>/ # One folder per buildable/publishable module
36
+ │ │ ├── Makefile # REQUIRED
37
+ │ │ ├── README.md # REQUIRED
38
+ │ │ ├── dist/ # REQUIRED when the module publishes/builds artifacts
39
+ │ │ └── .cache/ # REQUIRED when caches are not shared above
40
+ │ ├── examples/ # Optional sibling consumer examples for modules in this app
41
+ │ ├── tests_integration/# Optional cross-module integration tests for this app
42
+ │ ├── tests_benchmark/ # Optional cross-module benchmarks for this app
28
43
  │ └── shared/ # Resources shared by modules within THIS application
29
44
 
30
45
  ├── Makefile # Root Makefile coordinating all areas
46
+ ├── .gitignore # MUST ignore dist/ and .cache/
31
47
  ├── README.md # REQUIRED — onboarding and quickstart guide
32
48
  └── .mise.toml # Mise tool version configuration
33
49
  ```
@@ -37,6 +53,7 @@ For step-by-step scaffolding instructions see [skill 002-monorepo-setup](skills/
37
53
  - Represent a cohesive unit with its own lifecycle (e.g., `mymobileapp`, `graph-visualizer`).
38
54
  - **MUST** depend only on resources in `/shared/`. Direct cross-application dependencies are forbidden; use published artifacts (container images, published libraries) instead.
39
55
  - **MUST** contain a `README.md` with: purpose, architecture overview, how to build, and how to run.
56
+ - **MAY** contain `examples/`, `tests_integration/`, and `tests_benchmark/` when those artifacts apply to multiple modules inside the application.
40
57
 
41
58
  *Why:* Isolating applications prevents implicit coupling and makes the `shared/` boundary explicit and intentional.
42
59
 
@@ -45,6 +62,9 @@ For step-by-step scaffolding instructions see [skill 002-monorepo-setup](skills/
45
62
  - A module is a subfolder inside an application that is independently compilable and produces a build artifact.
46
63
  - May depend on sibling modules within the same application or on `/shared/` resources.
47
64
  - **MUST NOT** depend on modules from other applications.
65
+ - **MUST** contain its own `Makefile`, `README.md`, and language/tooling configuration.
66
+ - **MUST** keep build outputs under `dist/` and persistent caches under `.cache/`, following [agentme-edr-016](../principles/016-cross-language-module-structure.md).
67
+ - **MUST NOT** keep consumer examples inside the module folder; those belong in a sibling `examples/` folder at the nearest parent aggregation root.
48
68
 
49
69
  #### 4. Naming conventions
50
70
 
@@ -56,7 +76,11 @@ For step-by-step scaffolding instructions see [skill 002-monorepo-setup](skills/
56
76
 
57
77
  A `Makefile` **MUST** be present at the repository root, in every application folder, and in every module folder.
58
78
 
59
- Each Makefile **MUST** define at minimum: `build`, `lint`, and `test` targets.
79
+ All Makefiles **MUST** use the shared target vocabulary from [agentme-edr-008](008-common-targets.md).
80
+
81
+ Repository, application, and module Makefiles **MUST** define at minimum: `all`, `build`, `lint`, `test`, and `clean`.
82
+
83
+ Module Makefiles **SHOULD** also provide `lint-fix` and `install` when the underlying tooling supports them.
60
84
 
61
85
  The root `Makefile` **MUST** also define a `setup` target that guides a new contributor to prepare their machine.
62
86
 
@@ -79,7 +103,11 @@ The root `Makefile` **MUST** also define a `setup` target that guides a new cont
79
103
 
80
104
  The root `README.md` **MUST** include: overview, machine setup, quickstart, and a repository map.
81
105
 
82
- #### 8. Git tagging and artifact versioning
106
+ #### 8. Root `.gitignore`
107
+
108
+ The repository root **MUST** ignore `dist/` and `.cache/` so module artifacts and tool caches are never committed accidentally.
109
+
110
+ #### 9. Git tagging and artifact versioning
83
111
 
84
112
  All releases **MUST** be tagged using the format `<module-name>/<semver>` (e.g., `graphvisualizer/renderer/1.0.0`, `shared/libs/mylib/2.1.0`).
85
113
 
@@ -95,10 +123,14 @@ All releases **MUST** be tagged using the format `<module-name>/<semver>` (e.g.,
95
123
  |---|---|---|
96
124
  | Lowercase folder/file names | All | Yes |
97
125
  | `README.md` per application | Application folders | Yes |
98
- | `Makefile` with `build`, `lint`, `test` | All modules and applications | Yes |
126
+ | `README.md` per module | Module folders | Yes |
127
+ | `Makefile` with `all`, `build`, `lint`, `test`, `clean` | Root, applications, modules | Yes |
99
128
  | Root `Makefile` with `setup` target | Repository root | Yes |
100
129
  | Root `README.md` with setup + quickstart | Repository root | Yes |
130
+ | Ignore `dist/` and `.cache/` | Repository root | Yes |
101
131
  | Mise `.mise.toml` at root | Repository root | Yes |
102
132
  | Applications depend only on `/shared/` | Application folders | Yes |
103
133
  | Modules depend only on siblings or `/shared/` | Module folders | Yes |
134
+ | Module outputs live in `dist/` | Module folders | Yes |
135
+ | Persistent caches live in `.cache/` | Repo or module folders | Yes |
104
136
  | Git tags follow `<module-name>/<semver>` format | All modules | Yes |
@@ -1,3 +1,8 @@
1
+ ---
2
+ name: agentme-edr-006-github-ci-cd-pipelines
3
+ description: Defines the standard GitHub Actions workflow split for CI, release tagging, and publishing. Use when configuring project automation.
4
+ ---
5
+
1
6
  # agentme-edr-006: GitHub CI/CD pipelines
2
7
 
3
8
  ## Context and Problem Statement
@@ -129,7 +134,7 @@ jobs:
129
134
 
130
135
  *Why rebuild on publish:* The checkout is done from the exact tag commit. Rebuilding ensures the published artifact matches exactly what is tagged, rather than relying on a prior CI artifact.
131
136
 
132
- *Why `id-token: write`:* Required for npm provenance attestation via `npm publish --provenance`, as specified in [agentme-edr-003](003-javascript-project-tooling.md).
137
+ *Why `id-token: write`:* Required for npm provenance attestation via `npm publish --provenance`, as specified in [agentme-edr-003](../application/003-javascript-project-tooling.md).
133
138
 
134
139
  ---
135
140
 
@@ -1,3 +1,8 @@
1
+ ---
2
+ name: agentme-edr-008-common-development-script-names
3
+ description: Defines standard development command names and lifecycle groups across projects, regardless of the underlying runner. Use when designing build, lint, test, and release entry points.
4
+ ---
5
+
1
6
  # agentme-edr-008: Common development script names
2
7
 
3
8
  ## Context and Problem Statement