agentme 0.7.3 → 0.7.4
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/.xdrs/agentme/edrs/application/003-javascript-project-tooling.md +3 -3
- package/.xdrs/agentme/edrs/application/010-golang-project-tooling.md +3 -3
- package/.xdrs/agentme/edrs/application/014-python-project-tooling.md +8 -8
- package/.xdrs/agentme/edrs/application/015-cli-tool-standards.md +3 -3
- package/.xdrs/agentme/edrs/application/skills/001-create-javascript-project/SKILL.md +2 -2
- package/.xdrs/agentme/edrs/application/skills/003-create-golang-project/SKILL.md +2 -2
- package/.xdrs/agentme/edrs/application/skills/004-select-relevant-xdrs/SKILL.md +6 -6
- package/.xdrs/agentme/edrs/application/skills/005-create-python-project/SKILL.md +3 -3
- package/.xdrs/agentme/edrs/devops/005-monorepo-structure.md +13 -13
- package/.xdrs/agentme/edrs/devops/006-github-pipelines.md +10 -4
- package/.xdrs/agentme/edrs/devops/008-common-targets.md +7 -7
- package/.xdrs/agentme/edrs/devops/017-tool-execution-and-scripting.md +3 -3
- package/.xdrs/agentme/edrs/devops/skills/002-monorepo-setup/SKILL.md +2 -2
- package/.xdrs/agentme/edrs/governance/013-contributing-guide-requirements.md +2 -2
- package/.xdrs/agentme/edrs/principles/002-coding-best-practices.md +5 -5
- package/.xdrs/agentme/edrs/principles/004-unit-test-requirements.md +5 -5
- package/.xdrs/agentme/edrs/principles/007-project-quality-standards.md +9 -9
- package/.xdrs/agentme/edrs/principles/009-error-handling.md +5 -5
- package/.xdrs/agentme/edrs/principles/012-continuous-xdr-enrichment.md +3 -3
- package/.xdrs/agentme/edrs/principles/016-cross-language-module-structure.md +12 -12
- package/.xdrs/agentme/edrs/principles/articles/001-continuous-xdr-improvement.md +5 -5
- package/.xdrs/agentme/index.md +21 -0
- package/.xdrs/index.md +2 -3
- package/package.json +2 -2
|
@@ -13,7 +13,7 @@ What tooling and project structure should JavaScript/TypeScript projects follow
|
|
|
13
13
|
|
|
14
14
|
## Decision Outcome
|
|
15
15
|
|
|
16
|
-
**Use a Mise-managed Node.js and pnpm toolchain together with pnpm, tsc, esbuild, eslint, and jest in a module-root layout that follows [agentme-edr-016](
|
|
16
|
+
**Use a Mise-managed Node.js and pnpm toolchain together with pnpm, tsc, esbuild, eslint, and jest in a module-root layout that follows [agentme-edr-016](/.xdrs/agentme/edrs/principles/016-cross-language-module-structure.md), with runnable usage examples in sibling `examples/` folders and Makefiles as the only entry points.**
|
|
17
17
|
|
|
18
18
|
Clear, consistent tooling and layout enable fast onboarding, reliable CI pipelines, and a predictable developer experience across projects.
|
|
19
19
|
|
|
@@ -30,7 +30,7 @@ Clear, consistent tooling and layout enable fast onboarding, reliable CI pipelin
|
|
|
30
30
|
| **eslint** | Linting — code style and quality enforcement |
|
|
31
31
|
| **jest** | Testing — unit and integration test runner |
|
|
32
32
|
|
|
33
|
-
All commands are run exclusively through Makefiles, not through `package.json` scripts. The repository root MUST define a `.mise.toml` that pins at least Node.js and pnpm. Contributors and CI MUST bootstrap with `make setup` or `mise install`, then invoke routine work with `make <target>`. Each Makefile recipe MUST execute the underlying tool through `mise exec -- <tool> ...`, following [agentme-edr-017](
|
|
33
|
+
All commands are run exclusively through Makefiles, not through `package.json` scripts. The repository root MUST define a `.mise.toml` that pins at least Node.js and pnpm. Contributors and CI MUST bootstrap with `make setup` or `mise install`, then invoke routine work with `make <target>`. Each Makefile recipe MUST execute the underlying tool through `mise exec -- <tool> ...`, following [agentme-edr-017](/.xdrs/agentme/edrs/devops/017-tool-execution-and-scripting.md). Calling project tools directly in docs, CI, or daily workflows instead of `make <target>` is not allowed.
|
|
34
34
|
|
|
35
35
|
#### ESLint
|
|
36
36
|
|
|
@@ -116,7 +116,7 @@ Benchmarks belong in `lib/tests_benchmark/` when they require dedicated harnesse
|
|
|
116
116
|
|
|
117
117
|
The examples folder MUST exist for any libraries and utilities that are published or have more than 500 lines of code
|
|
118
118
|
|
|
119
|
-
|
|
119
|
+
## References
|
|
120
120
|
|
|
121
121
|
- [001-create-javascript-project](skills/001-create-javascript-project/SKILL.md) — scaffolds a new project following this structure
|
|
122
122
|
|
|
@@ -13,7 +13,7 @@ What tooling and project structure should Go projects follow to ensure consisten
|
|
|
13
13
|
|
|
14
14
|
## Decision Outcome
|
|
15
15
|
|
|
16
|
-
**Use a Mise-managed Go toolchain with `go build`, `go test`, and `golangci-lint`, module-root folder responsibilities from [agentme-edr-016](
|
|
16
|
+
**Use a Mise-managed Go toolchain with `go build`, `go test`, and `golangci-lint`, module-root folder responsibilities from [agentme-edr-016](/.xdrs/agentme/edrs/principles/016-cross-language-module-structure.md), feature packages in subdirectories, a `cli/` package for command wiring, and a Makefile as the single entry point for all development tasks.**
|
|
17
17
|
|
|
18
18
|
A predictable layout and minimal external tooling keep Go projects approachable, fast to build, and easy to distribute as cross-platform binaries.
|
|
19
19
|
|
|
@@ -28,7 +28,7 @@ A predictable layout and minimal external tooling keep Go projects approachable,
|
|
|
28
28
|
| **golangci-lint** | Linting — aggregates many linters in one fast run; configured via `.golangci.yml` |
|
|
29
29
|
| **monotag** | Version tagging from git history for the `publish` target |
|
|
30
30
|
|
|
31
|
-
All commands are run exclusively through the Makefile, never ad-hoc. The project root **MUST** define a `.mise.toml` that pins `go`, `golangci-lint`, and any other Go-related CLIs used by the project. Contributors and CI **MUST** bootstrap with `make setup` or `mise install`, then invoke routine work with `make <target>`. Each Makefile recipe **MUST** execute the underlying tool through `mise exec -- <tool> ...`, following [agentme-edr-017](
|
|
31
|
+
All commands are run exclusively through the Makefile, never ad-hoc. The project root **MUST** define a `.mise.toml` that pins `go`, `golangci-lint`, and any other Go-related CLIs used by the project. Contributors and CI **MUST** bootstrap with `make setup` or `mise install`, then invoke routine work with `make <target>`. Each Makefile recipe **MUST** execute the underlying tool through `mise exec -- <tool> ...`, following [agentme-edr-017](/.xdrs/agentme/edrs/devops/017-tool-execution-and-scripting.md).
|
|
32
32
|
Direct installation of project-required Go CLIs with `go install ...@latest` as a repair step is **NOT** allowed unless an XDR for that repository explicitly permits it.
|
|
33
33
|
|
|
34
34
|
#### Project structure
|
|
@@ -151,6 +151,6 @@ Use `github.com/sirupsen/logrus` for structured logging. Set the log level from
|
|
|
151
151
|
|
|
152
152
|
Use the standard library `flag` package for CLI flags. Each `cli/<feature>` package defines its own `FlagSet`, parses it from `os.Args[2:]`, and calls the corresponding domain function.
|
|
153
153
|
|
|
154
|
-
|
|
154
|
+
## References
|
|
155
155
|
|
|
156
156
|
- [003-create-golang-project](skills/003-create-golang-project/SKILL.md) — scaffolds a new Go project following this structure
|
|
@@ -13,7 +13,7 @@ What tooling and project structure should Python projects follow to ensure consi
|
|
|
13
13
|
|
|
14
14
|
## Decision Outcome
|
|
15
15
|
|
|
16
|
-
**Use a Mise-managed Python and uv toolchain with `pyproject.toml`, `ruff`, `pyright`, `pytest`, `pytest-cov`, `pip-audit`, and a layout that follows [agentme-edr-016](
|
|
16
|
+
**Use a Mise-managed Python and uv toolchain with `pyproject.toml`, `ruff`, `pyright`, `pytest`, `pytest-cov`, `pip-audit`, and a layout that follows [agentme-edr-016](/.xdrs/agentme/edrs/principles/016-cross-language-module-structure.md): a module root under `lib/`, runnable consumer examples in sibling `examples/`, and standardized `dist/` and `.cache/` locations.**
|
|
17
17
|
|
|
18
18
|
A single dependency manager, isolated package internals under `lib/`, and a standard Makefile contract keep Python projects predictable for contributors and CI while keeping the repository root clean.
|
|
19
19
|
|
|
@@ -34,7 +34,7 @@ A single dependency manager, isolated package internals under `lib/`, and a stan
|
|
|
34
34
|
|
|
35
35
|
All routine commands must run through the project `Makefile`, never by calling `uv`, `ruff`, `pytest`, or `pyright` directly in docs, CI, or daily development workflows.
|
|
36
36
|
|
|
37
|
-
The repository root MUST define a `.mise.toml` that pins Python and uv. Contributors and CI MUST bootstrap with `make setup` or `mise install`, then invoke routine work with `make <target>`. Each Makefile recipe MUST execute the underlying tool through `mise exec -- <tool> ...`, following [agentme-edr-017](
|
|
37
|
+
The repository root MUST define a `.mise.toml` that pins Python and uv. Contributors and CI MUST bootstrap with `make setup` or `mise install`, then invoke routine work with `make <target>`. Each Makefile recipe MUST execute the underlying tool through `mise exec -- <tool> ...`, following [agentme-edr-017](/.xdrs/agentme/edrs/devops/017-tool-execution-and-scripting.md). Using routine project CLI commands directly outside the Makefile contract is not allowed.
|
|
38
38
|
|
|
39
39
|
The root `.venv/` is the canonical environment location for both the library and all examples. Subdirectory commands must set `UV_PROJECT_ENVIRONMENT` to the workspace root `.venv/` instead of creating nested virtual environments.
|
|
40
40
|
|
|
@@ -80,7 +80,7 @@ Keep the repository root clean: source code, tests, distribution artifacts, and
|
|
|
80
80
|
|
|
81
81
|
Use the `lib/src/` layout for import safety and packaging clarity. Keep tests under `lib/tests/` and shared test setup in `lib/tests/conftest.py`. Do not introduce `requirements.txt`, `setup.py`, `setup.cfg`, `tox.ini`, `ruff.toml`, or `pyrightconfig.json` by default; keep project metadata and tool configuration in `lib/pyproject.toml`.
|
|
82
82
|
|
|
83
|
-
Libraries and shared utilities must include an `examples/` folder and wire example execution into the root `test` flow, following [agentme-edr-007](
|
|
83
|
+
Libraries and shared utilities must include an `examples/` folder and wire example execution into the root `test` flow, following [agentme-edr-007](/.xdrs/agentme/edrs/principles/007-project-quality-standards.md). Each example directory is its own Python project with its own `pyproject.toml`, and examples must import the library as a consumer would rather than reaching back into `lib/src/` with relative imports. Local example verification must install the wheel built into `lib/dist/`; do not use editable or path-based dependencies back to `lib/`.
|
|
84
84
|
|
|
85
85
|
Python keeps unit tests under `lib/tests/` by default because that remains the more common and maintainable convention for typed/package-based projects than co-locating tests beside every source file. Integration tests belong in `lib/tests_integration/`, and benchmark harnesses belong in `lib/tests_benchmark/` when they are more than a single micro-benchmark helper.
|
|
86
86
|
|
|
@@ -98,7 +98,7 @@ Ruff is the default formatter and linter. Do not add Black, isort, or Flake8 unl
|
|
|
98
98
|
|
|
99
99
|
Pyright must run on every lint pass. `typeCheckingMode = "standard"` is the minimum baseline; projects may raise this to `strict` when the codebase is ready.
|
|
100
100
|
|
|
101
|
-
Pytest coverage must fail below 80% line and branch coverage, following [agentme-edr-004](
|
|
101
|
+
Pytest coverage must fail below 80% line and branch coverage, following [agentme-edr-004](/.xdrs/agentme/edrs/principles/004-unit-test-requirements.md).
|
|
102
102
|
|
|
103
103
|
#### Makefile targets
|
|
104
104
|
|
|
@@ -137,7 +137,7 @@ The root `Makefile` is the only contract for CI and contributors. It delegates l
|
|
|
137
137
|
| `dev` | Same as `run`, optionally with repository-specific dev defaults |
|
|
138
138
|
| `publish` | `mise exec -- uv publish --project .` after versioning and packaging are complete |
|
|
139
139
|
|
|
140
|
-
The root `Makefile` must remain the only contract for CI and contributors, in line with [agentme-edr-008](
|
|
140
|
+
The root `Makefile` must remain the only contract for CI and contributors, in line with [agentme-edr-008](/.xdrs/agentme/edrs/devops/008-common-targets.md).
|
|
141
141
|
|
|
142
142
|
## Considered Options
|
|
143
143
|
|
|
@@ -148,7 +148,7 @@ The root `Makefile` must remain the only contract for CI and contributors, in li
|
|
|
148
148
|
|
|
149
149
|
## References
|
|
150
150
|
|
|
151
|
-
- [agentme-edr-004](
|
|
152
|
-
- [agentme-edr-007](
|
|
153
|
-
- [agentme-edr-008](
|
|
151
|
+
- [agentme-edr-004](/.xdrs/agentme/edrs/principles/004-unit-test-requirements.md) - Coverage and unit-test baseline
|
|
152
|
+
- [agentme-edr-007](/.xdrs/agentme/edrs/principles/007-project-quality-standards.md) - Examples and quality requirements
|
|
153
|
+
- [agentme-edr-008](/.xdrs/agentme/edrs/devops/008-common-targets.md) - Standard Makefile target names
|
|
154
154
|
- [005-create-python-project](skills/005-create-python-project/SKILL.md) - Scaffold a project following this EDR
|
|
@@ -99,9 +99,9 @@ This keeps the user-facing command predictable while preserving a clean library
|
|
|
99
99
|
## References
|
|
100
100
|
|
|
101
101
|
- [agentme-edr-003](003-javascript-project-tooling.md) - JavaScript project packaging and structure
|
|
102
|
-
- [agentme-edr-007](
|
|
103
|
-
- [agentme-edr-008](
|
|
104
|
-
- [agentme-edr-009](
|
|
102
|
+
- [agentme-edr-007](/.xdrs/agentme/edrs/principles/007-project-quality-standards.md) - README and examples baseline
|
|
103
|
+
- [agentme-edr-008](/.xdrs/agentme/edrs/devops/008-common-targets.md) - Standard command names for project entry points
|
|
104
|
+
- [agentme-edr-009](/.xdrs/agentme/edrs/principles/009-error-handling.md) - Process error signaling and error handling expectations
|
|
105
105
|
- [agentme-edr-010](010-golang-project-tooling.md) - Go CLI structure and verbose logging baseline
|
|
106
106
|
- [agentme-edr-014](014-python-project-tooling.md) - Python packaging and CLI entry-point guidance
|
|
107
107
|
- [cosmiconfig](https://github.com/cosmiconfig/cosmiconfig) - Example JSON configuration discovery library for JavaScript CLIs
|
|
@@ -19,7 +19,7 @@ the sibling `examples/` folder, redirects persistent caches into `.cache/`, and
|
|
|
19
19
|
the only entry points. Boilerplate is derived from the [filedist](https://github.com/flaviostutz/filedist)
|
|
20
20
|
project.
|
|
21
21
|
|
|
22
|
-
Related EDRs: [agentme-edr-003](
|
|
22
|
+
Related EDRs: [agentme-edr-003](/.xdrs/agentme/edrs/application/003-javascript-project-tooling.md), [agentme-edr-016](/.xdrs/agentme/edrs/principles/016-cross-language-module-structure.md)
|
|
23
23
|
|
|
24
24
|
## Instructions
|
|
25
25
|
|
|
@@ -418,7 +418,7 @@ Review all created files and confirm:
|
|
|
418
418
|
- [ ] `lib/eslint.config.mjs` points `parserOptions.project` to `tsconfig.json`
|
|
419
419
|
- [ ] `lib/README.md` starts with Quick Start and ends with module development commands
|
|
420
420
|
- [ ] All `[package-name]` placeholders are replaced with the actual name
|
|
421
|
-
- [ ] Structure matches the layout in [agentme-edr-003](
|
|
421
|
+
- [ ] Structure matches the layout in [agentme-edr-003](/.xdrs/agentme/edrs/application/003-javascript-project-tooling.md)
|
|
422
422
|
|
|
423
423
|
## Examples
|
|
424
424
|
|
|
@@ -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](
|
|
15
|
+
Creates a complete Go CLI project from scratch, following the layout from [agentme-edr-010](/.xdrs/agentme/edrs/application/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 EDRs: [agentme-edr-010](
|
|
17
|
+
Related EDRs: [agentme-edr-010](/.xdrs/agentme/edrs/application/010-golang-project-tooling.md), [agentme-edr-016](/.xdrs/agentme/edrs/principles/016-cross-language-module-structure.md)
|
|
18
18
|
|
|
19
19
|
## Instructions
|
|
20
20
|
|
|
@@ -159,9 +159,9 @@ Input: "Set up agentme for this repo and keep the speckit workflow we already us
|
|
|
159
159
|
|
|
160
160
|
## References
|
|
161
161
|
|
|
162
|
-
- [agentme README](
|
|
163
|
-
- [agentme-edr-003 - JavaScript project tooling and structure](
|
|
164
|
-
- [agentme-edr-005 - Monorepo structure](
|
|
165
|
-
- [agentme-edr-007 - Project quality standards](
|
|
166
|
-
- [agentme-edr-008 - Common development script names](
|
|
167
|
-
- [_core-adr-003 - Skill standards](
|
|
162
|
+
- [agentme README](/README.md)
|
|
163
|
+
- [agentme-edr-003 - JavaScript project tooling and structure](/.xdrs/agentme/edrs/application/003-javascript-project-tooling.md)
|
|
164
|
+
- [agentme-edr-005 - Monorepo structure](/.xdrs/agentme/edrs/devops/005-monorepo-structure.md)
|
|
165
|
+
- [agentme-edr-007 - Project quality standards](/.xdrs/agentme/edrs/principles/007-project-quality-standards.md)
|
|
166
|
+
- [agentme-edr-008 - Common development script names](/.xdrs/agentme/edrs/devops/008-common-targets.md)
|
|
167
|
+
- [_core-adr-003 - Skill standards](/.xdrs/_core/adrs/principles/003-skill-standards.md)
|
|
@@ -18,7 +18,7 @@ Pyright, Pytest, and Makefiles. The default layout keeps the library self-contai
|
|
|
18
18
|
uses a shared root `.venv/`, redirects persistent caches into `.cache/`, and places runnable
|
|
19
19
|
consumer projects under the sibling `examples/` folder.
|
|
20
20
|
|
|
21
|
-
Related EDRs: [agentme-edr-014](
|
|
21
|
+
Related EDRs: [agentme-edr-014](/.xdrs/agentme/edrs/application/014-python-project-tooling.md), [agentme-edr-016](/.xdrs/agentme/edrs/principles/016-cross-language-module-structure.md)
|
|
22
22
|
|
|
23
23
|
## Instructions
|
|
24
24
|
|
|
@@ -375,5 +375,5 @@ After creating the files:
|
|
|
375
375
|
|
|
376
376
|
## References
|
|
377
377
|
|
|
378
|
-
- [agentme-edr-014](
|
|
379
|
-
- [_core-adr-003 - Skill standards](
|
|
378
|
+
- [agentme-edr-014](/.xdrs/agentme/edrs/application/014-python-project-tooling.md)
|
|
379
|
+
- [_core-adr-003 - Skill standards](/.xdrs/_core/adrs/principles/003-skill-standards.md)
|
|
@@ -16,11 +16,11 @@ What monorepo structure, naming conventions, tooling, and build standards should
|
|
|
16
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.**
|
|
17
17
|
|
|
18
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](
|
|
19
|
+
Module folder responsibilities, artifact locations, and test-folder conventions follow [agentme-edr-016](/.xdrs/agentme/edrs/principles/016-cross-language-module-structure.md).
|
|
20
20
|
|
|
21
|
-
###
|
|
21
|
+
### Implementation Details
|
|
22
22
|
|
|
23
|
-
####
|
|
23
|
+
#### 01-top-level-directory-layout
|
|
24
24
|
|
|
25
25
|
```
|
|
26
26
|
/
|
|
@@ -48,7 +48,7 @@ Module folder responsibilities, artifact locations, and test-folder conventions
|
|
|
48
48
|
└── .mise.toml # Mise tool version configuration
|
|
49
49
|
```
|
|
50
50
|
|
|
51
|
-
####
|
|
51
|
+
#### 02-application-folders
|
|
52
52
|
|
|
53
53
|
- Represent a cohesive unit with its own lifecycle (e.g., `mymobileapp`, `graph-visualizer`).
|
|
54
54
|
- **MUST** depend only on resources in `/shared/`. Direct cross-application dependencies are forbidden; use published artifacts (container images, published libraries) instead.
|
|
@@ -57,22 +57,22 @@ Module folder responsibilities, artifact locations, and test-folder conventions
|
|
|
57
57
|
|
|
58
58
|
*Why:* Isolating applications prevents implicit coupling and makes the `shared/` boundary explicit and intentional.
|
|
59
59
|
|
|
60
|
-
####
|
|
60
|
+
#### 03-module-folders
|
|
61
61
|
|
|
62
62
|
- A module is a subfolder inside an application that is independently compilable and produces a build artifact.
|
|
63
63
|
- May depend on sibling modules within the same application or on `/shared/` resources.
|
|
64
64
|
- **MUST NOT** depend on modules from other applications.
|
|
65
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](
|
|
66
|
+
- **MUST** keep build outputs under `dist/` and persistent caches under `.cache/`, following [agentme-edr-016](/.xdrs/agentme/edrs/principles/016-cross-language-module-structure.md).
|
|
67
67
|
- **MUST NOT** keep consumer examples inside the module folder; those belong in a sibling `examples/` folder at the nearest parent aggregation root.
|
|
68
68
|
|
|
69
|
-
####
|
|
69
|
+
#### 04-naming-conventions
|
|
70
70
|
|
|
71
71
|
- All folder and file names **MUST** be **lowercase**.
|
|
72
72
|
- Use hyphens (`-`) to separate words (e.g., `data-loader`, `graph-visualizer`).
|
|
73
73
|
- Avoid abbreviations unless universally understood in the domain (e.g., `cli`, `api`).
|
|
74
74
|
|
|
75
|
-
####
|
|
75
|
+
#### 05-makefiles-at-every-level
|
|
76
76
|
|
|
77
77
|
A `Makefile` **MUST** be present at the repository root, in every application folder, and in every module folder.
|
|
78
78
|
|
|
@@ -87,7 +87,7 @@ The root `setup` target **MUST** run `mise install` and any small repository boo
|
|
|
87
87
|
|
|
88
88
|
*Why:* Makefiles provide a universal, stack-agnostic entry point regardless of programming language.
|
|
89
89
|
|
|
90
|
-
####
|
|
90
|
+
#### 06-mise-for-tooling-management
|
|
91
91
|
|
|
92
92
|
- [Mise](https://mise.jdx.dev/) **MUST** be used to pin all tool versions (compilers, runtimes, CLI tools).
|
|
93
93
|
- A `.mise.toml` **MUST** exist at the repository root.
|
|
@@ -100,15 +100,15 @@ The root `setup` target **MUST** run `mise install` and any small repository boo
|
|
|
100
100
|
|
|
101
101
|
*Why:* Eliminates "works on my machine" build failures by ensuring identical tool versions across all environments.
|
|
102
102
|
|
|
103
|
-
####
|
|
103
|
+
#### 07-root-readme
|
|
104
104
|
|
|
105
105
|
The root `README.md` **MUST** include: overview, machine setup, quickstart, and a repository map.
|
|
106
106
|
|
|
107
|
-
####
|
|
107
|
+
#### 08-root-gitignore
|
|
108
108
|
|
|
109
109
|
The repository root **MUST** ignore `dist/` and `.cache/` so module artifacts and tool caches are never committed accidentally.
|
|
110
110
|
|
|
111
|
-
####
|
|
111
|
+
#### 09-git-tagging-and-artifact-versioning
|
|
112
112
|
|
|
113
113
|
All releases **MUST** be tagged using the format `<module-name>/<semver>` (e.g., `graphvisualizer/renderer/1.0.0`, `shared/libs/mylib/2.1.0`).
|
|
114
114
|
|
|
@@ -118,7 +118,7 @@ All releases **MUST** be tagged using the format `<module-name>/<semver>` (e.g.,
|
|
|
118
118
|
|
|
119
119
|
---
|
|
120
120
|
|
|
121
|
-
#### 11
|
|
121
|
+
#### 11-summary-of-requirements
|
|
122
122
|
|
|
123
123
|
| Requirement | Scope | Mandatory |
|
|
124
124
|
|---|---|---|
|
|
@@ -31,7 +31,9 @@ All workflows run on `ubuntu-latest`. Tool versions MUST be managed by Mise via
|
|
|
31
31
|
|
|
32
32
|
---
|
|
33
33
|
|
|
34
|
-
####
|
|
34
|
+
#### 01-ci-workflow
|
|
35
|
+
|
|
36
|
+
File: `.github/workflows/ci.yml`
|
|
35
37
|
|
|
36
38
|
Triggered on every PR targeting `main` and every push to `main`. Runs the standard `build`, `lint`, and `test` targets from the root Makefile and fails the workflow if any step exits non-zero.
|
|
37
39
|
|
|
@@ -59,7 +61,9 @@ jobs:
|
|
|
59
61
|
|
|
60
62
|
---
|
|
61
63
|
|
|
62
|
-
####
|
|
64
|
+
#### 02-release-workflow
|
|
65
|
+
|
|
66
|
+
File: `.github/workflows/release.yml`
|
|
63
67
|
|
|
64
68
|
Manually dispatched (`workflow_dispatch`). Calculates the next semantic version tag using **monotag** and pushes that tag to the repository. Pushing the tag then automatically triggers the publish workflow.
|
|
65
69
|
|
|
@@ -102,7 +106,9 @@ jobs:
|
|
|
102
106
|
|
|
103
107
|
---
|
|
104
108
|
|
|
105
|
-
####
|
|
109
|
+
#### 03-publish-workflow
|
|
110
|
+
|
|
111
|
+
File: `.github/workflows/publish.yml`
|
|
106
112
|
|
|
107
113
|
Triggered exclusively when a tag matching `v*.*.*` is pushed to the repository. This ensures only explicitly tagged commits produce published artifacts. Runs `make publish` against the tagged commit.
|
|
108
114
|
|
|
@@ -134,7 +140,7 @@ jobs:
|
|
|
134
140
|
|
|
135
141
|
*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.
|
|
136
142
|
|
|
137
|
-
*Why `id-token: write`:* Required for npm provenance attestation via `npm publish --provenance`, as specified in [agentme-edr-003](
|
|
143
|
+
*Why `id-token: write`:* Required for npm provenance attestation via `npm publish --provenance`, as specified in [agentme-edr-003](/.xdrs/agentme/edrs/application/003-javascript-project-tooling.md).
|
|
138
144
|
|
|
139
145
|
---
|
|
140
146
|
|
|
@@ -19,7 +19,7 @@ Standardizing both the target names and the execution chain removes per-project
|
|
|
19
19
|
|
|
20
20
|
### Implementation Details
|
|
21
21
|
|
|
22
|
-
####
|
|
22
|
+
#### 01-every-project-must-have-root-makefile
|
|
23
23
|
|
|
24
24
|
The project root must contain a single authoritative `Makefile` that exposes the standard target names defined in rule 3. Developers and CI pipelines must invoke routine actions through this `Makefile`, never by calling underlying tools directly in documentation, CI, or daily workflow commands.
|
|
25
25
|
|
|
@@ -34,7 +34,7 @@ The project root must contain a single authoritative `Makefile` that exposes the
|
|
|
34
34
|
|
|
35
35
|
*Why:* The project entry point must stay language-agnostic and obvious. A developer should be able to inspect the `Makefile` and immediately see which real tool commands will run.
|
|
36
36
|
|
|
37
|
-
####
|
|
37
|
+
#### 02-makefile-recipes-must-use-mise
|
|
38
38
|
|
|
39
39
|
After a checkout, the shared execution flow is:
|
|
40
40
|
|
|
@@ -62,7 +62,7 @@ make <target>
|
|
|
62
62
|
|
|
63
63
|
---
|
|
64
64
|
|
|
65
|
-
####
|
|
65
|
+
#### 03-standard-target-groups-and-names
|
|
66
66
|
|
|
67
67
|
Targets are organized into five lifecycle groups. Projects must use these names unchanged. Extensions are allowed (see rule 5) but the core names must not be repurposed.
|
|
68
68
|
|
|
@@ -114,7 +114,7 @@ Targets are organized into five lifecycle groups. Projects must use these names
|
|
|
114
114
|
|
|
115
115
|
---
|
|
116
116
|
|
|
117
|
-
####
|
|
117
|
+
#### 04-standard-environment-variables
|
|
118
118
|
|
|
119
119
|
Two environment variables have defined semantics and must be used consistently.
|
|
120
120
|
|
|
@@ -125,7 +125,7 @@ Two environment variables have defined semantics and must be used consistently.
|
|
|
125
125
|
|
|
126
126
|
---
|
|
127
127
|
|
|
128
|
-
####
|
|
128
|
+
#### 05-extending-targets-with-prefixes
|
|
129
129
|
|
|
130
130
|
Projects may add custom targets beyond the standard set. Custom targets must be named by prefixing a standard target name with a descriptive qualifier, keeping the naming intuitive and consistent with the group it belongs to.
|
|
131
131
|
|
|
@@ -147,7 +147,7 @@ The prefix convention ensures developers can infer the purpose of any target wit
|
|
|
147
147
|
|
|
148
148
|
---
|
|
149
149
|
|
|
150
|
-
####
|
|
150
|
+
#### 06-monorepo-usage
|
|
151
151
|
|
|
152
152
|
In a monorepo, each module has its own `Makefile` with its own `build`, `lint`, `test`, and `deploy` targets scoped to that module. Parent-level Makefiles (at the application or repo root) delegate to child Makefiles in sequence. The parent Makefile should call `$(MAKE) -C <child> <target>` directly, while each child `Makefile` runs its actual tool commands through `mise exec --`.
|
|
153
153
|
|
|
@@ -168,7 +168,7 @@ A developer can run `make test` at the repo root to test everything, or `cd modu
|
|
|
168
168
|
|
|
169
169
|
---
|
|
170
170
|
|
|
171
|
-
####
|
|
171
|
+
#### 07-quick-reference
|
|
172
172
|
|
|
173
173
|
Any project following this EDR supports the following actions through the root `Makefile`.
|
|
174
174
|
|
|
@@ -59,6 +59,6 @@ Disallowed:
|
|
|
59
59
|
- [agentme-edr-005](005-monorepo-structure.md) - Monorepo layout and Makefile hierarchy
|
|
60
60
|
- [agentme-edr-006](006-github-pipelines.md) - CI/CD workflows should call Make targets
|
|
61
61
|
- [agentme-edr-008](008-common-targets.md) - Standard target names
|
|
62
|
-
- [agentme-edr-003](
|
|
63
|
-
- [agentme-edr-010](
|
|
64
|
-
- [agentme-edr-014](
|
|
62
|
+
- [agentme-edr-003](/.xdrs/agentme/edrs/application/003-javascript-project-tooling.md) - JavaScript tooling commands inside Makefiles
|
|
63
|
+
- [agentme-edr-010](/.xdrs/agentme/edrs/application/010-golang-project-tooling.md) - Go tooling commands inside Makefiles
|
|
64
|
+
- [agentme-edr-014](/.xdrs/agentme/edrs/application/014-python-project-tooling.md) - Python tooling commands inside Makefiles
|
|
@@ -13,12 +13,12 @@ metadata:
|
|
|
13
13
|
|
|
14
14
|
## Overview
|
|
15
15
|
|
|
16
|
-
Creates or extends a monorepo that follows the standard layout from [agentme-edr-005](
|
|
16
|
+
Creates or extends a monorepo that follows the standard layout from [agentme-edr-005](/.xdrs/agentme/edrs/devops/005-monorepo-structure.md):
|
|
17
17
|
top-level application folders, independent module roots, sibling example and multi-module test
|
|
18
18
|
areas, Mise-managed tooling, and Makefiles at every level so any contributor can build, lint, and
|
|
19
19
|
test any part of the monorepo with a single, predictable command.
|
|
20
20
|
|
|
21
|
-
Related EDRs: [agentme-edr-005](
|
|
21
|
+
Related EDRs: [agentme-edr-005](/.xdrs/agentme/edrs/devops/005-monorepo-structure.md), [agentme-edr-013](/.xdrs/agentme/edrs/governance/013-contributing-guide-requirements.md), [agentme-edr-016](/.xdrs/agentme/edrs/principles/016-cross-language-module-structure.md)
|
|
22
22
|
|
|
23
23
|
## Instructions
|
|
24
24
|
|
|
@@ -38,5 +38,5 @@ Projects must keep a `CONTRIBUTING.md` file at the repository root. The file mus
|
|
|
38
38
|
|
|
39
39
|
## References
|
|
40
40
|
|
|
41
|
-
- [agentme-edr-005 - Monorepo structure](
|
|
42
|
-
- [002-monorepo-setup skill](
|
|
41
|
+
- [agentme-edr-005 - Monorepo structure](/.xdrs/agentme/edrs/devops/005-monorepo-structure.md)
|
|
42
|
+
- [002-monorepo-setup skill](/.xdrs/agentme/edrs/devops/skills/002-monorepo-setup/SKILL.md)
|
|
@@ -17,7 +17,7 @@ What coding practices should be followed across all languages and projects to ke
|
|
|
17
17
|
|
|
18
18
|
### Implementation Details
|
|
19
19
|
|
|
20
|
-
####
|
|
20
|
+
#### 01-keep-files-short
|
|
21
21
|
|
|
22
22
|
A file must not exceed **400 lines**. When a file grows beyond this limit, split related functions or types into separate, focused modules.
|
|
23
23
|
|
|
@@ -44,7 +44,7 @@ src/
|
|
|
44
44
|
|
|
45
45
|
---
|
|
46
46
|
|
|
47
|
-
####
|
|
47
|
+
#### 02-apply-template-method-pattern
|
|
48
48
|
|
|
49
49
|
When a function's main logic contains well-defined sections and **any individual section exceeds ~20 lines**, extract each section into its own named function. The outer function becomes an orchestrator that calls the extracted helpers in sequence.
|
|
50
50
|
|
|
@@ -81,7 +81,7 @@ def _persist_order(order, total): ...
|
|
|
81
81
|
|
|
82
82
|
---
|
|
83
83
|
|
|
84
|
-
####
|
|
84
|
+
#### 03-keep-readme-tests-and-examples-in-sync
|
|
85
85
|
|
|
86
86
|
Every change to a public interface, behavior, or configuration option must be reflected in:
|
|
87
87
|
|
|
@@ -93,7 +93,7 @@ Every change to a public interface, behavior, or configuration option must be re
|
|
|
93
93
|
|
|
94
94
|
---
|
|
95
95
|
|
|
96
|
-
####
|
|
96
|
+
#### 04-declare-types-in-file-where-used
|
|
97
97
|
|
|
98
98
|
If a type (struct, interface, class, typedef, etc.) is used in only **one** file, declare it in that same file. Move a type to a shared module only when it is referenced in two or more files.
|
|
99
99
|
|
|
@@ -101,7 +101,7 @@ If a type (struct, interface, class, typedef, etc.) is used in only **one** file
|
|
|
101
101
|
|
|
102
102
|
---
|
|
103
103
|
|
|
104
|
-
####
|
|
104
|
+
#### 05-keep-test-files-next-to-source
|
|
105
105
|
|
|
106
106
|
Where the language ecosystem supports it (e.g. JavaScript/TypeScript, Go, Rust), place test files **beside** the source file they cover and use a consistent naming convention rather than mirroring the source tree in a separate `tests/` folder.
|
|
107
107
|
|
|
@@ -17,7 +17,7 @@ What unit testing practices should be followed to ensure tests are meaningful, r
|
|
|
17
17
|
|
|
18
18
|
### Implementation Details
|
|
19
19
|
|
|
20
|
-
####
|
|
20
|
+
#### 01-must-have-at-least-one-assertion-per-test
|
|
21
21
|
|
|
22
22
|
```typescript
|
|
23
23
|
// bad — no assertion; passes even when code is broken
|
|
@@ -32,7 +32,7 @@ it("processes the order and returns a confirmation id", () => {
|
|
|
32
32
|
|
|
33
33
|
---
|
|
34
34
|
|
|
35
|
-
####
|
|
35
|
+
#### 02-must-run-offline
|
|
36
36
|
|
|
37
37
|
Unit tests must not depend on any external resources: no network calls, no running databases, no external APIs, no file system paths outside the repo. Tests must pass with only static code available.
|
|
38
38
|
|
|
@@ -53,7 +53,7 @@ it("fetches user", async () => {
|
|
|
53
53
|
|
|
54
54
|
---
|
|
55
55
|
|
|
56
|
-
####
|
|
56
|
+
#### 03-must-maintain-80-percent-coverage
|
|
57
57
|
|
|
58
58
|
```typescript
|
|
59
59
|
// vitest.config.ts
|
|
@@ -66,7 +66,7 @@ Builds that miss the threshold must not be merged.
|
|
|
66
66
|
|
|
67
67
|
---
|
|
68
68
|
|
|
69
|
-
####
|
|
69
|
+
#### 04-should-extract-shared-setup
|
|
70
70
|
|
|
71
71
|
When setup logic is repeated across two or more test files, centralize it (`src/test-utils/`, `internal/testutil/`, `tests/conftest.py`).
|
|
72
72
|
|
|
@@ -79,7 +79,7 @@ export function makeOrder(overrides: Partial<Order> = {}): Order {
|
|
|
79
79
|
|
|
80
80
|
---
|
|
81
81
|
|
|
82
|
-
####
|
|
82
|
+
#### 05-should-avoid-mocks
|
|
83
83
|
|
|
84
84
|
Use the lowest-cost alternative that exercises real behavior:
|
|
85
85
|
|
|
@@ -17,9 +17,9 @@ Every project must meet six minimum quality standards: a Getting Started section
|
|
|
17
17
|
|
|
18
18
|
These standards form a non-negotiable baseline. Individual projects may raise the bar but must never fall below it.
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
### Implementation Details
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
#### 01-readme-must-have-getting-started
|
|
23
23
|
|
|
24
24
|
`README.md` must include a **Getting Started** section in the first 20 lines with the minimal steps to install and use the project.
|
|
25
25
|
|
|
@@ -48,7 +48,7 @@ myFunction({ input: "value" });
|
|
|
48
48
|
|
|
49
49
|
---
|
|
50
50
|
|
|
51
|
-
|
|
51
|
+
#### 02-unit-tests-must-run-on-every-release
|
|
52
52
|
|
|
53
53
|
A unit test suite must run automatically before every release. Failing tests must block the release — no silent skips or overrides.
|
|
54
54
|
|
|
@@ -63,9 +63,9 @@ A unit test suite must run automatically before every release. Failing tests mus
|
|
|
63
63
|
|
|
64
64
|
---
|
|
65
65
|
|
|
66
|
-
|
|
66
|
+
#### 03-project-must-comply-with-xdrs
|
|
67
67
|
|
|
68
|
-
All XDRs that apply to the project's scope (as listed in [.xdrs/index.md](
|
|
68
|
+
All XDRs that apply to the project's scope (as listed in [.xdrs/index.md](/.xdrs/index.md)) must be followed. A deviation requires a project-local XDR documenting the override.
|
|
69
69
|
|
|
70
70
|
**Requirements:**
|
|
71
71
|
- Review applicable XDRs before any significant implementation
|
|
@@ -73,7 +73,7 @@ All XDRs that apply to the project's scope (as listed in [.xdrs/index.md](../../
|
|
|
73
73
|
|
|
74
74
|
---
|
|
75
75
|
|
|
76
|
-
|
|
76
|
+
#### 04-project-must-have-linting
|
|
77
77
|
|
|
78
78
|
Projects larger than 10 files or 200 lines of code must have a linter configured and actively enforced. Lint failures block CI builds.
|
|
79
79
|
|
|
@@ -85,11 +85,11 @@ Projects larger than 10 files or 200 lines of code must have a linter configured
|
|
|
85
85
|
|
|
86
86
|
**Exception:** Projects with fewer than 100 lines of code, or whose `README.md` prominently marks them as a **Spike** or **Experiment**, are exempt from this requirement. Such projects must never be deployed to production.
|
|
87
87
|
|
|
88
|
-
**Reference:** [agentme-edr-003](
|
|
88
|
+
**Reference:** [agentme-edr-003](/.xdrs/agentme/edrs/application/003-javascript-project-tooling.md) for JavaScript-specific tooling.
|
|
89
89
|
|
|
90
90
|
---
|
|
91
91
|
|
|
92
|
-
|
|
92
|
+
#### 05-project-structure-must-be-clear
|
|
93
93
|
|
|
94
94
|
Directory and file layout must be self-explanatory: source code, tests, configuration, and examples must be clearly separated and named.
|
|
95
95
|
|
|
@@ -114,7 +114,7 @@ Directory and file layout must be self-explanatory: source code, tests, configur
|
|
|
114
114
|
|
|
115
115
|
---
|
|
116
116
|
|
|
117
|
-
|
|
117
|
+
#### 06-libraries-must-have-runnable-examples
|
|
118
118
|
|
|
119
119
|
Projects that are libraries or shared utilities must include an `examples/` directory. Each subdirectory represents a usage scenario and must be independently runnable. Examples are executed as part of `make test`.
|
|
120
120
|
|
|
@@ -17,7 +17,7 @@ What error handling practices should be followed across all languages and projec
|
|
|
17
17
|
|
|
18
18
|
### Implementation Details
|
|
19
19
|
|
|
20
|
-
####
|
|
20
|
+
#### 01-catch-only-where-handled
|
|
21
21
|
|
|
22
22
|
Never catch an exception unless the catching site can genuinely recover from it, translate it into a meaningful domain error, or enrich it with context before re-throwing. Do **not** swallow exceptions silently. When suppressing an exception is intentional, always add a comment explaining exactly why, or log it at an appropriate level.
|
|
23
23
|
|
|
@@ -73,7 +73,7 @@ except CacheError:
|
|
|
73
73
|
|
|
74
74
|
---
|
|
75
75
|
|
|
76
|
-
####
|
|
76
|
+
#### 02-avoid-exceptions-in-public-interfaces
|
|
77
77
|
|
|
78
78
|
At module and service boundaries, prefer returning a value that signals success or failure (e.g., a result type, a discriminated union, or a `(value, error)` tuple as in Go) over throwing exceptions. This forces callers to explicitly acknowledge and handle the error case before using the result.
|
|
79
79
|
|
|
@@ -157,7 +157,7 @@ def fetch_user(user_id: str) -> Ok[User] | Err:
|
|
|
157
157
|
|
|
158
158
|
---
|
|
159
159
|
|
|
160
|
-
####
|
|
160
|
+
#### 03-centralise-repetitive-catch-logic
|
|
161
161
|
|
|
162
162
|
If the same `try/catch` pattern (e.g., logging, classifying HTTP errors, wrapping exceptions) appears in multiple places, extract it into a shared utility. Do not copy-paste catch blocks across the codebase.
|
|
163
163
|
|
|
@@ -209,7 +209,7 @@ def save_order(order: Order): ...
|
|
|
209
209
|
|
|
210
210
|
---
|
|
211
211
|
|
|
212
|
-
####
|
|
212
|
+
#### 04-communicate-failure-at-boundaries
|
|
213
213
|
|
|
214
214
|
Every system boundary must signal failure explicitly:
|
|
215
215
|
|
|
@@ -272,7 +272,7 @@ def create_order_endpoint(payload: OrderRequest):
|
|
|
272
272
|
|
|
273
273
|
---
|
|
274
274
|
|
|
275
|
-
####
|
|
275
|
+
#### 05-write-test-cases-for-error-scenarios
|
|
276
276
|
|
|
277
277
|
Every module that handles errors must have dedicated test cases that verify the error paths. Do not only test the happy path.
|
|
278
278
|
|
|
@@ -38,7 +38,7 @@ Developers must treat reusable missing guidance discovered during implementation
|
|
|
38
38
|
|
|
39
39
|
## References
|
|
40
40
|
|
|
41
|
-
- [_core-adr-001](
|
|
42
|
-
- [_core-article-001](
|
|
41
|
+
- [_core-adr-001](/.xdrs/_core/adrs/principles/001-xdrs-core.md)
|
|
42
|
+
- [_core-article-001](/.xdrs/_core/adrs/principles/articles/001-xdrs-overview.md)
|
|
43
43
|
- [agentme-article-001](articles/001-continuous-xdr-improvement.md)
|
|
44
|
-
- [002-write-xdr skill](
|
|
44
|
+
- [002-write-xdr skill](/.github/skills/002-write-xdr/SKILL.md)
|
|
@@ -19,11 +19,11 @@ Language-specific EDRs may add ecosystem details, but they must not redefine the
|
|
|
19
19
|
|
|
20
20
|
### Implementation Details
|
|
21
21
|
|
|
22
|
-
####
|
|
22
|
+
#### 01-module-must-own-folder-root
|
|
23
23
|
|
|
24
24
|
A module is the smallest independently buildable, testable, or publishable unit. It MUST live in its own folder and that folder MUST contain:
|
|
25
25
|
|
|
26
|
-
- a `Makefile` following [agentme-edr-008](
|
|
26
|
+
- a `Makefile` following [agentme-edr-008](/.xdrs/agentme/edrs/devops/008-common-targets.md)
|
|
27
27
|
- a `README.md` for the module itself
|
|
28
28
|
- all configuration files required to build, lint, test, package, or publish that module
|
|
29
29
|
- its generated `dist/` directory when the module produces distributable artifacts
|
|
@@ -40,7 +40,7 @@ Example module root:
|
|
|
40
40
|
└── ... language-specific sources and config ...
|
|
41
41
|
```
|
|
42
42
|
|
|
43
|
-
####
|
|
43
|
+
#### 02-parent-folders-are-aggregation-roots
|
|
44
44
|
|
|
45
45
|
Parent folders such as a repository root, an application folder, or `lib/` may aggregate multiple modules. They may also hold shared consumer examples or multi-module test harnesses.
|
|
46
46
|
|
|
@@ -57,13 +57,13 @@ Recommended aggregation pattern:
|
|
|
57
57
|
└── tests_benchmark/
|
|
58
58
|
```
|
|
59
59
|
|
|
60
|
-
####
|
|
60
|
+
#### 03-build-outputs-must-go-to-dist
|
|
61
61
|
|
|
62
62
|
Distributable outputs such as packages, wheels, archives, generated binaries, or packed example inputs MUST be written under the module's `dist/` folder.
|
|
63
63
|
|
|
64
64
|
`dist/` MUST be gitignored.
|
|
65
65
|
|
|
66
|
-
####
|
|
66
|
+
#### 04-persistent-caches-must-live-under-cache
|
|
67
67
|
|
|
68
68
|
Tool-generated caches and disposable machine-local state MUST be redirected into the nearest intended `.cache/` folder, either at monorepo level or module level.
|
|
69
69
|
|
|
@@ -79,7 +79,7 @@ If a tool cannot natively choose its cache path, the module `Makefile` MUST wrap
|
|
|
79
79
|
|
|
80
80
|
`.cache/` MUST be gitignored.
|
|
81
81
|
|
|
82
|
-
####
|
|
82
|
+
#### 05-consumer-examples-must-sit-outside-module
|
|
83
83
|
|
|
84
84
|
Examples that demonstrate how to consume a library or reusable module MUST live in a sibling `examples/` folder under the nearest aggregation root, not inside the module folder itself.
|
|
85
85
|
|
|
@@ -98,7 +98,7 @@ examples/
|
|
|
98
98
|
└── using-mymodule/
|
|
99
99
|
```
|
|
100
100
|
|
|
101
|
-
####
|
|
101
|
+
#### 06-module-readme-must-explain-usage-and-development
|
|
102
102
|
|
|
103
103
|
Each module MUST contain a `README.md` that shows how to use the module as a consumer.
|
|
104
104
|
|
|
@@ -106,7 +106,7 @@ The end of the README MUST also include short developer instructions for that mo
|
|
|
106
106
|
|
|
107
107
|
Repository-level READMEs may describe the workspace, but they do not replace the module README.
|
|
108
108
|
|
|
109
|
-
####
|
|
109
|
+
#### 07-tests-use-predictable-locations
|
|
110
110
|
|
|
111
111
|
Unit tests SHOULD be co-located with the file they exercise when that is idiomatic and common for the language.
|
|
112
112
|
|
|
@@ -123,11 +123,11 @@ Benchmark tests MUST live in one of these locations:
|
|
|
123
123
|
- `<module>/tests_benchmark/` for module-specific harnesses or datasets
|
|
124
124
|
- `<parent>/tests_benchmark/` when they cover multiple sibling modules
|
|
125
125
|
|
|
126
|
-
####
|
|
126
|
+
#### 08-module-makefiles-must-expose-shared-targets
|
|
127
127
|
|
|
128
|
-
Every module `Makefile` MUST expose the common target names from [agentme-edr-008](
|
|
128
|
+
Every module `Makefile` MUST expose the common target names from [agentme-edr-008](/.xdrs/agentme/edrs/devops/008-common-targets.md). At minimum, modules MUST provide `build`, `lint`, and `test`, and SHOULD also provide `all`, `clean`, and `lint-fix` when meaningful.
|
|
129
129
|
|
|
130
130
|
## References
|
|
131
131
|
|
|
132
|
-
- [agentme-edr-005](
|
|
133
|
-
- [agentme-edr-008](
|
|
132
|
+
- [agentme-edr-005](/.xdrs/agentme/edrs/devops/005-monorepo-structure.md) - Monorepo aggregation and delegation rules
|
|
133
|
+
- [agentme-edr-008](/.xdrs/agentme/edrs/devops/008-common-targets.md) - Shared Makefile target names
|
|
@@ -51,7 +51,7 @@ Good opening questions:
|
|
|
51
51
|
|
|
52
52
|
### How should you organize the XDR?
|
|
53
53
|
|
|
54
|
-
Follow the XDR template from [_core-adr-002](
|
|
54
|
+
Follow the XDR template from [_core-adr-002](/.xdrs/_core/adrs/principles/002-xdr-standards.md). Keep the document small, explicit, and decision-focused.
|
|
55
55
|
|
|
56
56
|
Use this checklist:
|
|
57
57
|
|
|
@@ -87,7 +87,7 @@ If the same clarification would likely be needed in another feature, by another
|
|
|
87
87
|
|
|
88
88
|
## References
|
|
89
89
|
|
|
90
|
-
- [_core-adr-001](
|
|
91
|
-
- [_core-article-001](
|
|
92
|
-
- [agentme-edr-012](
|
|
93
|
-
- [002-write-xdr skill](
|
|
90
|
+
- [_core-adr-001](/.xdrs/_core/adrs/principles/001-xdrs-core.md) - XDR structure, numbering, and mandatory template
|
|
91
|
+
- [_core-article-001](/.xdrs/_core/adrs/principles/articles/001-xdrs-overview.md) - XDR introduction and general adoption guidance
|
|
92
|
+
- [agentme-edr-012](/.xdrs/agentme/edrs/principles/012-continuous-xdr-enrichment.md) - Shared-first XDR enrichment policy and 80% coverage target
|
|
93
|
+
- [002-write-xdr skill](/.github/skills/002-write-xdr/SKILL.md) - Step-by-step procedure for drafting new XDRs
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# agentme Scope Overview
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
The `agentme` scope is a curated library of XDRs and skills encoding best practices for AI coding agents. It covers architectural, engineering, and tooling decisions relevant to AI-assisted software development and is intended for consumption by external projects.
|
|
6
|
+
|
|
7
|
+
## Content
|
|
8
|
+
|
|
9
|
+
### What this scope covers
|
|
10
|
+
|
|
11
|
+
The `agentme` scope provides opinionated, reusable guidance on how to scaffold, build, test, and ship software projects. It targets AI coding agents and human developers who want consistent, high-quality defaults across JavaScript, Go, and Python projects.
|
|
12
|
+
|
|
13
|
+
All content in this scope is published and consumed by external projects. Changes must be clear, backwards-compatible where possible, and thoroughly reviewed before merging.
|
|
14
|
+
|
|
15
|
+
### Engineering decisions
|
|
16
|
+
|
|
17
|
+
The `agentme` EDRs cover project tooling and structure for each supported language, CLI standards, monorepo layout, CI/CD pipelines, and observability. See the full list in the [EDRs Index](edrs/index.md).
|
|
18
|
+
|
|
19
|
+
## Type Indexes
|
|
20
|
+
|
|
21
|
+
- [EDRs Index](edrs/index.md) - Engineering decisions for coding best practices and project tooling
|
package/.xdrs/index.md
CHANGED
|
@@ -9,8 +9,7 @@ XDRs in scopes listed last override the ones listed first
|
|
|
9
9
|
### _core
|
|
10
10
|
|
|
11
11
|
Decisions about how XDRs work
|
|
12
|
-
[View _core
|
|
13
|
-
[View _core BDRs Index](_core/bdrs/index.md)
|
|
12
|
+
[View _core Scope Index](_core/index.md)
|
|
14
13
|
|
|
15
14
|
---
|
|
16
15
|
|
|
@@ -18,7 +17,7 @@ Decisions about how XDRs work
|
|
|
18
17
|
|
|
19
18
|
Opiniated set of decisions and skills for common development tasks
|
|
20
19
|
|
|
21
|
-
[View agentme
|
|
20
|
+
[View agentme Scope Index](agentme/index.md)
|
|
22
21
|
|
|
23
22
|
---
|
|
24
23
|
|
package/package.json
CHANGED