@ankhorage/devtools 2.0.7 → 2.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
 
4
4
  # @ankhorage/devtools
5
5
 
6
- ![license: MIT](././paradox/badges/license.svg) ![npm: v2.0.7](././paradox/badges/npm.svg) ![runtime: bun](././paradox/badges/runtime.svg) ![typescript: strict](././paradox/badges/typescript.svg) ![eslint: checked](././paradox/badges/eslint.svg) ![prettier: checked](././paradox/badges/prettier.svg) ![build: checked](././paradox/badges/build.svg) ![tests: checked](././paradox/badges/tests.svg) ![paradox: warnings](././paradox/badges/docs.svg)
6
+ ![license: MIT](././paradox/badges/license.svg) ![npm: v2.0.9](././paradox/badges/npm.svg) ![runtime: bun](././paradox/badges/runtime.svg) ![typescript: strict](././paradox/badges/typescript.svg) ![eslint: checked](././paradox/badges/eslint.svg) ![prettier: checked](././paradox/badges/prettier.svg) ![build: checked](././paradox/badges/build.svg) ![tests: checked](././paradox/badges/tests.svg) ![paradox: warnings](././paradox/badges/docs.svg)
7
7
 
8
8
  Shared tooling, repository automation, and agent standards for Ankhorage TypeScript projects
9
9
 
@@ -53,9 +53,16 @@ Valid profiles include:
53
53
  - generated standalone application;
54
54
  - an explicitly documented repository-specific profile such as Studio.
55
55
 
56
- A package may start flat. Introduce `domain/`, `application/`, `ports/`, `adapters/`,
57
- `composition/`, `features/`, or `core/` only when those names communicate a real architectural
58
- role. Once a vocabulary is introduced, its combinations must be coherent:
56
+ Implementation-owning Ankhorage packages are feature-first. Product, domain, and package
57
+ capabilities belong below `src/features/<feature>/`; do not place feature implementation modules
58
+ directly below `src/`. Keep only deliberate public facades and genuinely package-wide ownership
59
+ such as `src/types/`, `src/constants/`, and `src/utils/` at the source root. Contracts-only,
60
+ reusable UI/design-system, generated-application, and explicitly documented repository-specific
61
+ profiles may use their dedicated taxonomy instead of inventing fake features.
62
+
63
+ Inside each feature, introduce `domain/`, `application/`, `ports/`, `adapters/`, or
64
+ `composition/` only when those names communicate a real architectural role. Do not create empty
65
+ hexagonal layers for symmetry. Once a vocabulary is introduced, its combinations must be coherent:
59
66
 
60
67
  - `domain/` may stand alone and must remain independent from outer mechanisms;
61
68
  - `application/` coordinates use cases and may depend inward on domain policy and required ports;
@@ -82,8 +89,12 @@ Repository-root `examples/` contains complete user-facing examples. Each example
82
89
  subdirectory. Test-only fixtures remain test-owned.
83
90
 
84
91
  Package-level delivery edges such as `src/cli/`, `src/host/`, `src/app/`, or `src/platform/`
85
- remain thin adapters/composition boundaries. The filesystem below `src/cli/commands/` mirrors the
86
- public Ankh command path, and command modules parse input, invoke package behavior, and render output.
92
+ remain thin adapters/composition boundaries outside feature ownership. Every public Ankh command
93
+ implementation must live below `src/cli/commands/`, and that filesystem mirrors the public command
94
+ path after the package prefix. For example, `ankh rules config validate` maps to
95
+ `src/cli/commands/config/validate.ts`. CLI provider/index modules register and compose commands;
96
+ they must not contain the command's application or domain behavior. Command modules parse input,
97
+ invoke the owning feature boundary, and render output.
87
98
 
88
99
  Keep only deliberate public facades directly under `src/`. Public package subpaths must map to
89
100
  explicit package exports; generic barrels are not an excuse to bypass ownership.
@@ -3,25 +3,28 @@
3
3
  Choose the profile from actual ownership and consumers. Profiles define allowed vocabulary and
4
4
  dependency direction; they are not templates that require every listed directory.
5
5
 
6
- ## Simple, value, or contracts library
6
+ ## Simple or value library
7
7
 
8
- Use for portable types, deterministic values, parsers, constants, algorithms, and small libraries
9
- without application orchestration.
8
+ Use for deterministic values, parsers, constants, algorithms, and small runtime libraries without
9
+ application orchestration. Runtime-owning libraries are still feature-first: each coherent package
10
+ capability belongs below `src/features/<feature>/`, but a simple feature does not need hexagonal
11
+ role directories when it has no orchestration or external edge.
10
12
 
11
- Typical forms:
13
+ Typical form:
12
14
 
13
15
  ```text
14
16
  src/
15
17
  index.ts
16
- <domain-or-topic>/
18
+ features/
19
+ <feature>/
17
20
  types/
18
21
  constants/
19
22
  utils/
20
23
  ```
21
24
 
22
25
  Do not invent ports, adapters, application, or composition layers when there is no external edge to
23
- abstract. Contracts packages additionally keep public declarations serializable and free of runtime
24
- implementation.
26
+ abstract. Contracts-only repositories follow the dedicated Contracts repository profile from the
27
+ main project-structure skill instead of this runtime-library profile.
25
28
 
26
29
  ## Reusable UI or design-system library
27
30
 
@@ -44,28 +47,13 @@ components or registries. Provider execution belongs outside reusable presentati
44
47
  ## Application, engine, or hybrid package
45
48
 
46
49
  Use when the package owns use cases, state transitions, external systems, or several delivery edges.
47
- Domain-first and feature-first organization are both valid when coherent.
48
-
49
- Domain-first example:
50
-
51
- ```text
52
- src/
53
- <domain>/
54
- domain/
55
- application/
56
- ports/
57
- adapters/
58
- composition/
59
- cli/
60
- host/
61
- app/
62
- platform/
63
- ```
64
-
65
- Feature-first example:
50
+ These packages are feature-first: every product/domain/package capability is owned below
51
+ `src/features/<feature>/`. Do not use top-level domain folders or flat `src/*.ts` implementation
52
+ modules as an alternative ownership model.
66
53
 
67
54
  ```text
68
55
  src/
56
+ index.ts
69
57
  features/
70
58
  <feature>/
71
59
  domain/
@@ -74,6 +62,10 @@ src/
74
62
  adapters/
75
63
  composition/
76
64
  cli/
65
+ commands/
66
+ types/
67
+ constants/
68
+ utils/
77
69
  ```
78
70
 
79
71
  Only create the role directories that the capability actually needs. A pure domain feature can stop
@@ -81,35 +73,45 @@ at `domain/`; an in-memory use case need not invent an outbound adapter.
81
73
 
82
74
  ## Provider or platform adapter package
83
75
 
84
- Use when the package deliberately implements an external technology boundary:
76
+ Use when the package deliberately implements an external technology boundary. Provider capabilities
77
+ are still feature-owned; concrete technology remains at the feature's outer adapter boundary:
85
78
 
86
79
  ```text
87
80
  src/
88
- contracts/
89
- planning/
90
- adapters/
91
- composition/
81
+ features/
82
+ <capability>/
83
+ domain/
84
+ application/
85
+ ports/
86
+ adapters/
87
+ composition/
92
88
  cli/
89
+ commands/
93
90
  ```
94
91
 
95
92
  Portable configuration and planning stay independent from SDK/runtime values. Concrete provider code
96
- stays in adapters.
93
+ stays in adapters, and package-level delivery edges remain outside the feature.
97
94
 
98
95
  ## Tooling package
99
96
 
100
- Command-centric tooling may use:
97
+ Command-centric tooling remains feature-first for owned capabilities while the CLI stays an outer
98
+ delivery edge:
101
99
 
102
100
  ```text
103
101
  src/
102
+ features/
103
+ <capability>/
104
+ domain/
105
+ application/
106
+ ports/
107
+ adapters/
108
+ composition/
104
109
  cli/
105
- policy/
106
- application/
107
- adapters/
108
- composition/
110
+ commands/
109
111
  ```
110
112
 
111
113
  Policy remains deterministic. Filesystem, process, registry, network, and GitHub behavior stay at
112
- the edge.
114
+ the feature edge or package delivery edge rather than leaking into inner policy.
113
115
 
114
116
  ## Generated standalone application
115
117
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ankhorage/devtools",
3
- "version": "2.0.7",
3
+ "version": "2.0.9",
4
4
  "description": "Shared tooling, repository automation, and agent standards for Ankhorage TypeScript projects",
5
5
  "license": "MIT",
6
6
  "homepage": "https://github.com/ankhorage/devtools#readme",
@@ -148,7 +148,7 @@
148
148
  "devDependencies": {
149
149
  "@ankhorage/paradox": "^0.2.6",
150
150
  "@ankhorage/ankh": "^0.10.4",
151
- "@ankhorage/doctor": "0.11.12",
151
+ "@ankhorage/doctor": "0.11.13",
152
152
  "@techstark/opencv-js": "^5.0.0-release.1",
153
153
  "@types/bun": "^1.4.2",
154
154
  "@types/node": "^26.6.3",