@fulmenhq/tsfulmen 0.1.13 → 0.2.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 (165) hide show
  1. package/CHANGELOG.md +73 -512
  2. package/README.md +111 -28
  3. package/config/crucible-ts/agentic/roles/README.md +76 -0
  4. package/config/crucible-ts/agentic/roles/cicd.yaml +82 -0
  5. package/config/crucible-ts/agentic/roles/dataeng.yaml +104 -0
  6. package/config/crucible-ts/agentic/roles/devlead.yaml +84 -0
  7. package/config/crucible-ts/agentic/roles/devrev.yaml +105 -0
  8. package/config/crucible-ts/agentic/roles/entarch.yaml +101 -0
  9. package/config/crucible-ts/agentic/roles/infoarch.yaml +95 -0
  10. package/config/crucible-ts/agentic/roles/prodmktg.yaml +92 -0
  11. package/config/crucible-ts/agentic/roles/qa.yaml +148 -0
  12. package/config/crucible-ts/agentic/roles/secrev.yaml +101 -0
  13. package/config/crucible-ts/agentic/roles/uxdev.yaml +168 -0
  14. package/config/crucible-ts/branding/ecosystem.yaml +26 -0
  15. package/config/crucible-ts/library/foundry/exit-codes.snapshot.json +26 -0
  16. package/config/crucible-ts/library/foundry/exit-codes.yaml +28 -3
  17. package/config/crucible-ts/library/foundry/patterns.yaml +2 -2
  18. package/config/crucible-ts/library/foundry/signal-resolution-fixtures.yaml +207 -0
  19. package/config/crucible-ts/library/foundry/signals.yaml +21 -0
  20. package/config/crucible-ts/library/foundry/simplified-modes.snapshot.json +9 -1
  21. package/config/crucible-ts/library/{foundry/similarity-fixtures.yaml → similarity/fixtures.yaml} +1 -1
  22. package/config/crucible-ts/library/v1.0.0/module-manifest.yaml +1 -2
  23. package/config/crucible-ts/taxonomy/fixture-catalog.yaml +145 -0
  24. package/config/crucible-ts/taxonomy/languages.yaml +2 -2
  25. package/config/crucible-ts/taxonomy/library/foundry-catalogs/v1.1.0/catalogs.yaml +77 -0
  26. package/config/crucible-ts/taxonomy/library/platform-modules/v1.1.0/modules.yaml +722 -0
  27. package/config/crucible-ts/taxonomy/metrics.yaml +1 -1
  28. package/config/crucible-ts/taxonomy/repository-categories.yaml +134 -1
  29. package/dist/appidentity/index.d.ts +117 -35
  30. package/dist/appidentity/index.js +752 -592
  31. package/dist/appidentity/index.js.map +1 -1
  32. package/dist/config/index.js +118 -6
  33. package/dist/config/index.js.map +1 -1
  34. package/dist/crucible/index.js +118 -6
  35. package/dist/crucible/index.js.map +1 -1
  36. package/dist/errors/index.js +118 -6
  37. package/dist/errors/index.js.map +1 -1
  38. package/dist/foundry/index.d.ts +13 -676
  39. package/dist/foundry/index.js +118 -6
  40. package/dist/foundry/index.js.map +1 -1
  41. package/dist/foundry/similarity/index.d.ts +2 -2
  42. package/dist/fulhash/index.d.ts +64 -12
  43. package/dist/fulhash/index.js +292 -53
  44. package/dist/fulhash/index.js.map +1 -1
  45. package/dist/index.d.ts +2 -2
  46. package/dist/index.js +753 -593
  47. package/dist/index.js.map +1 -1
  48. package/dist/{manager-D27vrdaS.d.ts → manager-CH3fX7zO.d.ts} +1 -1
  49. package/dist/pathfinder/index.js +368 -59
  50. package/dist/pathfinder/index.js.map +1 -1
  51. package/dist/reports/license-inventory.csv +302 -0
  52. package/dist/schema/index.js +118 -6
  53. package/dist/schema/index.js.map +1 -1
  54. package/dist/signals/index.d.ts +675 -0
  55. package/dist/signals/index.js +5790 -0
  56. package/dist/signals/index.js.map +1 -0
  57. package/dist/similarity/index.d.ts +2 -0
  58. package/dist/similarity/index.js +136 -0
  59. package/dist/similarity/index.js.map +1 -0
  60. package/dist/{suggest-Cv7SVQRu.d.ts → suggest-D8LbwtPV.d.ts} +1 -1
  61. package/dist/telemetry/http/index.js +704 -591
  62. package/dist/telemetry/http/index.js.map +1 -1
  63. package/dist/telemetry/index.js +118 -6
  64. package/dist/telemetry/index.js.map +1 -1
  65. package/dist/telemetry/prometheus/index.d.ts +1 -1
  66. package/dist/telemetry/prometheus/index.js +175 -11
  67. package/dist/telemetry/prometheus/index.js.map +1 -1
  68. package/package.json +15 -6
  69. package/schemas/crucible-ts/assessment/v1.0.0/severity-definitions.schema.json +1 -1
  70. package/schemas/crucible-ts/config/fulmen-ecosystem/v1.0.0/fulmen-config-paths.schema.json +1 -1
  71. package/schemas/crucible-ts/config/repository/app-identity/v1.0.0/app-identity.schema.json +3 -3
  72. package/schemas/crucible-ts/config/repository/v1.0.0/lifecycle-phase.json +1 -1
  73. package/schemas/crucible-ts/config/repository-category/codex/v1.0.0/codex-config.schema.json +1 -1
  74. package/schemas/crucible-ts/config/standards/v1.0.0/adr-adoption-status.json +1 -1
  75. package/schemas/crucible-ts/config/standards/v1.0.0/adr-frontmatter.schema.json +3 -3
  76. package/schemas/crucible-ts/config/standards/v1.0.0/adr-lifecycle-status.json +1 -1
  77. package/schemas/crucible-ts/config/sync-keys.schema.yaml +14 -0
  78. package/schemas/crucible-ts/content/ssot-provenance/v1.0.0/ssot-provenance.schema.json +1 -1
  79. package/schemas/crucible-ts/design/README.md +159 -0
  80. package/schemas/crucible-ts/design/core/v1.0.0/component-states.schema.json +204 -0
  81. package/schemas/crucible-ts/design/core/v1.0.0/semantic-colors.schema.json +179 -0
  82. package/schemas/crucible-ts/design/core/v1.0.0/spacing-scale.schema.json +165 -0
  83. package/schemas/crucible-ts/design/core/v1.0.0/typography-roles.schema.json +195 -0
  84. package/schemas/crucible-ts/design/tui/v1.0.0/color-palette.schema.json +303 -0
  85. package/schemas/crucible-ts/design/tui/v1.0.0/component.schema.json +374 -0
  86. package/schemas/crucible-ts/design/tui/v1.0.0/layout.schema.json +272 -0
  87. package/schemas/crucible-ts/design/tui/v1.0.0/theme.schema.json +205 -0
  88. package/schemas/crucible-ts/design/tui/v1.0.0/typography.schema.json +316 -0
  89. package/schemas/crucible-ts/devsecops/lorage-central/activity/v1.0.0/activity.schema.json +1 -1
  90. package/schemas/crucible-ts/devsecops/lorage-central/credentials/v1.0.0/credentials.schema.json +1 -1
  91. package/schemas/crucible-ts/devsecops/lorage-central/policy/v1.0.0/policy.schema.json +1 -1
  92. package/schemas/crucible-ts/devsecops/lorage-central/recipe/v1.0.0/recipe.schema.json +1 -1
  93. package/schemas/crucible-ts/devsecops/lorage-central/runbooks/v1.0.0/runbook.schema.json +1 -1
  94. package/schemas/crucible-ts/devsecops/lorage-central/tenant/v1.0.0/tenant.schema.json +1 -1
  95. package/schemas/crucible-ts/devsecops/secrets/v1.0.0/secrets.schema.json +1 -1
  96. package/schemas/crucible-ts/error-handling/v1.0.0/error-response.schema.json +1 -1
  97. package/schemas/crucible-ts/library/foundry/v1.0.0/country-codes.schema.json +1 -1
  98. package/schemas/crucible-ts/library/foundry/v1.0.0/exit-codes.schema.json +1 -1
  99. package/schemas/crucible-ts/library/foundry/v1.0.0/http-status-groups.schema.json +1 -1
  100. package/schemas/crucible-ts/library/foundry/v1.0.0/mime-types.schema.json +1 -1
  101. package/schemas/crucible-ts/library/foundry/v1.0.0/patterns.schema.json +1 -1
  102. package/schemas/crucible-ts/library/foundry/v1.0.0/signal-resolution-fixtures.schema.json +140 -0
  103. package/schemas/crucible-ts/library/foundry/v1.0.0/signals.schema.json +6 -1
  104. package/schemas/crucible-ts/library/fulencode/v1.0.0/fulencode-config.schema.json +1 -1
  105. package/schemas/crucible-ts/library/fulhash/v1.0.0/checksum-string.schema.json +2 -2
  106. package/schemas/crucible-ts/library/fulhash/v1.0.0/digest.schema.json +61 -1
  107. package/schemas/crucible-ts/library/fulhash/v1.0.0/fixtures.schema.json +1 -1
  108. package/schemas/crucible-ts/library/fulpack/v1.0.0/archive-entry.schema.json +1 -1
  109. package/schemas/crucible-ts/library/fulpack/v1.0.0/archive-info.schema.json +1 -1
  110. package/schemas/crucible-ts/library/fulpack/v1.0.0/archive-manifest.schema.json +2 -2
  111. package/schemas/crucible-ts/library/fulpack/v1.0.0/create-options.schema.json +1 -1
  112. package/schemas/crucible-ts/library/fulpack/v1.0.0/extract-options.schema.json +1 -1
  113. package/schemas/crucible-ts/library/fulpack/v1.0.0/extract-result.schema.json +1 -1
  114. package/schemas/crucible-ts/library/fulpack/v1.0.0/scan-options.schema.json +1 -1
  115. package/schemas/crucible-ts/library/fulpack/v1.0.0/validation-result.schema.json +1 -1
  116. package/schemas/crucible-ts/library/module-manifest/v1.0.0/module-manifest.schema.json +1 -1
  117. package/schemas/crucible-ts/library/{foundry → similarity}/v1.0.0/similarity.schema.json +2 -2
  118. package/schemas/crucible-ts/library/{foundry → similarity}/v2.0.0/similarity.schema.json +2 -2
  119. package/schemas/crucible-ts/observability/metrics/v1.0.0/metrics-event.schema.json +1 -1
  120. package/schemas/crucible-ts/pathfinder/v1.0.0/find-query.schema.json +1 -1
  121. package/schemas/crucible-ts/pathfinder/v1.0.0/finder-config.schema.json +1 -1
  122. package/schemas/crucible-ts/pathfinder/v1.0.0/path-result.schema.json +1 -1
  123. package/schemas/crucible-ts/protocol/http/v1.0.0/error-response.schema.json +1 -1
  124. package/schemas/crucible-ts/protocol/http/v1.0.0/health-response.schema.json +1 -1
  125. package/schemas/crucible-ts/protocol/http/v1.0.0/success-response.schema.json +1 -1
  126. package/schemas/crucible-ts/protocol/http/v1.0.0/version-response.schema.json +1 -1
  127. package/schemas/crucible-ts/server/management/v1.0.0/server-management.schema.json +1 -1
  128. package/schemas/crucible-ts/standards/publishing/v1.0.0/spec-catalog.schema.json +134 -0
  129. package/schemas/crucible-ts/taxonomy/devsecops/auth-methods/v1.0.0/auth-methods-key.schema.json +1 -1
  130. package/schemas/crucible-ts/taxonomy/devsecops/auth-methods/v1.0.0/auth-methods-metadata.schema.json +1 -1
  131. package/schemas/crucible-ts/taxonomy/devsecops/geo/v1.0.0/geo-key.schema.json +1 -1
  132. package/schemas/crucible-ts/taxonomy/devsecops/geo/v1.0.0/geo-metadata.schema.json +1 -1
  133. package/schemas/crucible-ts/taxonomy/devsecops/infra-phases/v1.0.0/infra-phases-key.schema.json +1 -1
  134. package/schemas/crucible-ts/taxonomy/devsecops/infra-phases/v1.0.0/infra-phases-metadata.schema.json +1 -1
  135. package/schemas/crucible-ts/taxonomy/devsecops/infra-providers/v1.0.0/infra-providers-key.schema.json +1 -1
  136. package/schemas/crucible-ts/taxonomy/devsecops/infra-providers/v1.0.0/infra-providers-metadata.schema.json +1 -1
  137. package/schemas/crucible-ts/taxonomy/devsecops/modules/v1.0.0/devsecops-module-entry.schema.json +1 -1
  138. package/schemas/crucible-ts/taxonomy/fixture/v1.0.0/fixture-catalog.schema.json +166 -0
  139. package/schemas/crucible-ts/taxonomy/language/v1.0.0/language-key.schema.json +1 -1
  140. package/schemas/crucible-ts/taxonomy/language/v1.0.0/language-metadata.schema.json +1 -1
  141. package/schemas/crucible-ts/taxonomy/library/foundry-catalogs/v1.1.0/catalog-entry.schema.json +98 -0
  142. package/schemas/crucible-ts/taxonomy/library/fulencode/detection-confidence/v1.0.0/levels.schema.json +1 -1
  143. package/schemas/crucible-ts/taxonomy/library/fulencode/encoding-families/v1.0.0/families.schema.json +1 -1
  144. package/schemas/crucible-ts/taxonomy/library/fulencode/normalization-profiles/v1.0.0/profiles.schema.json +1 -1
  145. package/schemas/crucible-ts/taxonomy/library/fulhash/algorithms/v1.0.0/algorithms.yaml +16 -0
  146. package/schemas/crucible-ts/taxonomy/library/modules/v1.0.0/module-entry.schema.json +1 -1
  147. package/schemas/crucible-ts/taxonomy/library/modules/v1.1.0/module-entry.schema.json +436 -0
  148. package/schemas/crucible-ts/taxonomy/repository-category/v1.0.0/category-key.schema.json +16 -8
  149. package/schemas/crucible-ts/taxonomy/repository-category/v1.0.0/category-metadata.schema.json +1 -1
  150. package/schemas/crucible-ts/upstream/3leaps/PROVENANCE.md +43 -0
  151. package/schemas/crucible-ts/upstream/3leaps/agentic/v0/role-prompt.schema.json +183 -0
  152. package/schemas/crucible-ts/upstream/3leaps/ailink/v0/prompt.schema.json +204 -0
  153. package/schemas/crucible-ts/upstream/3leaps/ailink/v0/search-response.schema.json +152 -0
  154. package/schemas/crucible-ts/upstream/README.md +50 -0
  155. package/schemas/crucible-ts/web/branding/v1.0.0/site-branding.schema.json +1 -1
  156. package/schemas/crucible-ts/web/styling/v1.0.0/site-styling.schema.json +1 -1
  157. package/schemas/crucible-ts/config/goneat/README.md +0 -60
  158. package/schemas/crucible-ts/config/goneat/v1.0.0/dates.yaml +0 -234
  159. package/schemas/crucible-ts/config/goneat/v1.0.0/goneat-config.yaml +0 -344
  160. package/schemas/crucible-ts/config/goneat/v1.0.0/lifecycle-phase.json +0 -20
  161. package/schemas/crucible-ts/config/goneat/v1.0.0/release-phase.json +0 -17
  162. package/schemas/crucible-ts/config/goneat/v1.0.0/security-policy.yaml +0 -178
  163. package/schemas/crucible-ts/config/goneat/v1.0.0/version-policy.schema.yaml +0 -205
  164. package/schemas/crucible-ts/tooling/goneat-tools/v1.0.0/README.md +0 -177
  165. package/schemas/crucible-ts/tooling/goneat-tools/v1.0.0/goneat-tools-config.schema.yaml +0 -146
@@ -1,178 +0,0 @@
1
- $schema: https://json-schema.org/draft/2020-12/schema
2
- $id: https://schemas.goneat.dev/security-policy/v1.0.0
3
- $version: 1.0.0
4
- title: Goneat Security Policy Schema
5
- description: Schema for security policy configuration including suppression rules and enforcement
6
- type: object
7
- properties:
8
- $schema:
9
- type: string
10
- description: JSON Schema reference for this policy file
11
- format: uri
12
- examples:
13
- - https://schemas.goneat.dev/security-policy/v1.0.0
14
- security:
15
- type: object
16
- description: Security policy configuration
17
- properties:
18
- suppressions:
19
- type: object
20
- description: Configuration for security suppression handling
21
- properties:
22
- track:
23
- type: boolean
24
- description: Whether to track suppressions in output
25
- default: true
26
- report_metrics:
27
- type: boolean
28
- description: Include suppression metrics in reports
29
- default: true
30
- require_reason:
31
- type: array
32
- description: Rules for when suppression reasons are required
33
- items:
34
- type: object
35
- properties:
36
- severity:
37
- type: array
38
- description: Severity levels that require reasons
39
- items:
40
- $ref: ../../assessment/v1.0.0/severity-definitions.schema.json#/$defs/severityName
41
- tools:
42
- type: array
43
- description: Specific tools that require reasons
44
- items:
45
- type: string
46
- examples: [gosec, bandit, semgrep]
47
- additionalProperties: false
48
- max_age_days:
49
- type: integer
50
- description: Maximum days before suppression review required
51
- minimum: 1
52
- maximum: 365
53
- default: 90
54
- require_approval:
55
- type: array
56
- description: Rules for when suppressions need approval
57
- items:
58
- type: object
59
- properties:
60
- severity:
61
- type: array
62
- description: Severity levels requiring approval
63
- items:
64
- $ref: ../../assessment/v1.0.0/severity-definitions.schema.json#/$defs/severityName
65
- rules:
66
- type: array
67
- description: Specific rule IDs requiring approval
68
- items:
69
- type: string
70
- examples: [G304, G204, B104]
71
- approvers:
72
- type: array
73
- description: GitHub handles of required approvers
74
- items:
75
- type: string
76
- pattern: "^@[a-zA-Z0-9-]+$"
77
- examples: ["@security-team", "@arch-eagle"]
78
- required: [approvers]
79
- additionalProperties: false
80
- allowed_reasons:
81
- type: array
82
- description: Predefined allowed suppression reasons
83
- items:
84
- type: string
85
- examples:
86
- - "Input validated in middleware"
87
- - "Test fixture only"
88
- - "False positive - static string"
89
- - "Legacy code - tracked in JIRA"
90
- - "Performance critical path"
91
- additionalProperties: false
92
- enforcement:
93
- type: object
94
- description: Security enforcement rules
95
- properties:
96
- fail_on:
97
- $ref: ../../assessment/v1.0.0/severity-definitions.schema.json#/$defs/severityName
98
- description: Default failure threshold
99
- default: high
100
- by_environment:
101
- type: object
102
- description: Environment-specific enforcement
103
- additionalProperties:
104
- type: object
105
- properties:
106
- fail_on:
107
- $ref: ../../assessment/v1.0.0/severity-definitions.schema.json#/$defs/severityName
108
- max_suppressions:
109
- type: integer
110
- minimum: 0
111
- block_new_suppressions:
112
- type: boolean
113
- default: false
114
- additionalProperties: false
115
- examples:
116
- - production:
117
- fail_on: high
118
- max_suppressions: 10
119
- block_new_suppressions: true
120
- - development:
121
- fail_on: medium
122
- max_suppressions: 100
123
- max_total_suppressions:
124
- type: integer
125
- description: Maximum total suppressions allowed
126
- minimum: 0
127
- block_patterns:
128
- type: array
129
- description: Patterns that should never be suppressed
130
- items:
131
- type: object
132
- properties:
133
- rule:
134
- type: string
135
- description: Rule ID pattern
136
- examples: ["G401", "B301"]
137
- file_pattern:
138
- type: string
139
- description: File glob pattern
140
- examples: ["**/auth/**", "**/crypto/**"]
141
- message:
142
- type: string
143
- description: Error message when blocked
144
- required: [rule, message]
145
- additionalProperties: false
146
- additionalProperties: false
147
- required: [suppressions]
148
- additionalProperties: false
149
- additionalProperties: false
150
- required: [security]
151
- examples:
152
- - security:
153
- suppressions:
154
- track: true
155
- report_metrics: true
156
- require_reason:
157
- - severity: [critical, high]
158
- max_age_days: 90
159
- require_approval:
160
- - severity: [critical]
161
- approvers: ["@security-team", "@arch-eagle"]
162
- allowed_reasons:
163
- - "Input validated in middleware"
164
- - "Test fixture only"
165
- - "False positive"
166
- enforcement:
167
- fail_on: high
168
- by_environment:
169
- production:
170
- fail_on: high
171
- max_suppressions: 10
172
- block_new_suppressions: true
173
- development:
174
- fail_on: medium
175
- block_patterns:
176
- - rule: "G401"
177
- file_pattern: "**/crypto/**"
178
- message: "MD5/SHA1 cannot be suppressed in crypto packages"
@@ -1,205 +0,0 @@
1
- $schema: https://json-schema.org/draft/2020-12/schema
2
- $id: https://schemas.fulmenhq.dev/config/goneat/version-policy-v1.0.0.schema.json
3
- $version: 1.0.0
4
- title: Goneat Version Policy Schema
5
- description: |
6
- Defines the configuration surface for goneat's version single-source-of-truth (SSOT)
7
- propagation feature. The policy controls how VERSION propagates to downstream package
8
- manager manifests, optional validation/guard rails, and workspace specific overrides.
9
- type: object
10
- $defs:
11
- targetKey:
12
- type: string
13
- pattern: "^[A-Za-z0-9._/\\-]+$"
14
- description: >
15
- Handler identifiers or explicit manifest paths. Current handlers use the manifest filename (`package.json`, `pyproject.toml`, `go.mod`). Nested paths (e.g., `apps/foo/package.json`) are permitted for fine-grained overrides.
16
-
17
- globList:
18
- type: array
19
- description: List of file or directory globs evaluated relative to the repository root.
20
- items:
21
- type: string
22
- minLength: 1
23
- booleanDefaultTrue:
24
- type: boolean
25
- default: true
26
- booleanDefaultFalse:
27
- type: boolean
28
- default: false
29
- properties:
30
- version:
31
- type: object
32
- description: Version scheme configuration.
33
- properties:
34
- scheme:
35
- type: string
36
- description: Versioning scheme used by the repository.
37
- enum: [semver, calver]
38
- default: semver
39
- allow_extended:
40
- type: boolean
41
- description: >
42
- Allow prerelease identifiers and build metadata. For calver, this typically controls suffix usage (e.g., ".beta.1").
43
-
44
- default: true
45
- channel:
46
- type: string
47
- description: Optional release channel name used when computing prerelease identifiers.
48
- pattern: "^[a-z0-9.-]+$"
49
- required: [scheme]
50
- additionalProperties: false
51
- propagation:
52
- type: object
53
- description: Primary propagation rules that determine which manifests goneat mutates.
54
- properties:
55
- defaults:
56
- type: object
57
- description: Default include/exclude rules applied to all handlers unless overridden.
58
- properties:
59
- include:
60
- $ref: "#/$defs/globList"
61
- description: >
62
- Globs or handler identifiers (manifest filenames) to include when propagating. Known handler identifiers: `package.json`, `pyproject.toml`, `go.mod`. Globs are resolved relative to the repository root.
63
-
64
- default: ["package.json", "pyproject.toml"]
65
- exclude:
66
- $ref: "#/$defs/globList"
67
- description: >
68
- Globs to exclude from propagation (applied after include resolution).
69
-
70
- default: ["**/node_modules/**", "docs/**"]
71
- backup:
72
- type: object
73
- description: >
74
- Backup/rollback behaviour applied globally (per-target overrides may be introduced in future schema revisions).
75
-
76
- properties:
77
- enabled:
78
- $ref: "#/$defs/booleanDefaultTrue"
79
- description: Create `.bak` files before mutating manifests.
80
- retention:
81
- type: integer
82
- minimum: 0
83
- description: >
84
- Number of previous backups to keep per manifest (0 disables retention pruning).
85
-
86
- additionalProperties: false
87
- additionalProperties: false
88
- targets:
89
- type: object
90
- description: Overrides for specific package manager handlers.
91
- propertyNames:
92
- $ref: "#/$defs/targetKey"
93
- additionalProperties:
94
- type: object
95
- properties:
96
- include:
97
- $ref: "#/$defs/globList"
98
- description: Handler specific include overrides.
99
- exclude:
100
- $ref: "#/$defs/globList"
101
- description: Handler specific exclusion overrides.
102
- mode:
103
- type: string
104
- description: Optional handler mode (e.g., poetry flavour for pyproject.toml).
105
- enum: [project, poetry, workspace]
106
- validate_only:
107
- $ref: "#/$defs/booleanDefaultFalse"
108
- description: >
109
- When true, goneat validates the manifest version but does not rewrite the file.
110
-
111
- additionalProperties: false
112
- workspace:
113
- type: object
114
- description: Controls behaviour in monorepo/workspace layouts.
115
- properties:
116
- strategy:
117
- type: string
118
- description: |
119
- Strategy for handling nested packages.
120
- - `single-version`: All manifests inherit the root VERSION (default behaviour).
121
- - `opt-in`: Only paths listed in `allowlist` may maintain independent versions.
122
- - `opt-out`: All detected manifests propagate unless explicitly listed in `blocklist`.
123
- enum: [single-version, opt-in, opt-out]
124
- default: single-version
125
- allowlist:
126
- $ref: "#/$defs/globList"
127
- description: Globs that may maintain independent VERSION files when using opt-in strategy.
128
- blocklist:
129
- $ref: "#/$defs/globList"
130
- description: Globs excluded from propagation when using opt-out strategy.
131
- additionalProperties: false
132
- required: [defaults]
133
- additionalProperties: false
134
- rules:
135
- type: object
136
- description: >
137
- Additional content validation guard rails. All fields are optional and may be adopted incrementally as the CLI gains support (targeted for Phase 3a in the goneat roadmap).
138
-
139
- properties:
140
- require_release_tag:
141
- $ref: "#/$defs/booleanDefaultFalse"
142
- description: Require the VERSION to correspond to an annotated git tag before propagation.
143
- allowed_channels:
144
- type: array
145
- description: >
146
- Restrict prerelease channel names to an allow list. Empty list or omission means all channels allowed.
147
-
148
- items:
149
- type: string
150
- pattern: "^[a-z0-9.-]+$"
151
- forbid_prerelease_on_default_branch:
152
- $ref: "#/$defs/booleanDefaultFalse"
153
- description: Prevent prerelease propagation when on the configured default branch.
154
- max_prerelease_length:
155
- type: integer
156
- minimum: 0
157
- description: Maximum character length allowed for prerelease identifiers.
158
- additionalProperties: false
159
- guards:
160
- type: object
161
- description: >
162
- Execution preconditions that must pass before propagation runs (as distinct from content-focused `rules`).
163
-
164
- properties:
165
- required_branches:
166
- type: array
167
- description: Branch names or globs that are permitted to run propagation.
168
- items:
169
- type: string
170
- minLength: 1
171
- disallow_dirty_worktree:
172
- $ref: "#/$defs/booleanDefaultTrue"
173
- description: Fail propagation if the git worktree has uncommitted changes.
174
- additionalProperties: false
175
- metadata:
176
- type: object
177
- description: Arbitrary metadata for organisational tracking (ignored by goneat).
178
- additionalProperties: true
179
- required: [version, propagation]
180
- additionalProperties: false
181
- examples:
182
- - |
183
- version:
184
- scheme: semver
185
- allow_extended: true
186
- propagation:
187
- defaults:
188
- include: ["package.json", "pyproject.toml"]
189
- exclude: ["docs/**"]
190
- backup:
191
- enabled: true
192
- retention: 5
193
- targets:
194
- package.json:
195
- include: ["package.json", "apps/*/package.json"]
196
- pyproject.toml:
197
- mode: poetry
198
- go.mod:
199
- validate_only: true
200
- rules:
201
- allowed_channels: ["stable", "beta"]
202
- forbid_prerelease_on_default_branch: true
203
- guards:
204
- required_branches: ["main", "release/*"]
205
- disallow_dirty_worktree: true
@@ -1,177 +0,0 @@
1
- ---
2
- title: "Goneat Tools Config Schema v1.0.0"
3
- description: "Schema for goneat doctor command tool catalog and configuration"
4
- author: "Pipeline Architect"
5
- date: "2025-10-02"
6
- last_updated: "2025-10-02"
7
- status: "draft"
8
- tags: ["tooling", "goneat", "doctor", "schema"]
9
- ---
10
-
11
- # Goneat Tools Config Schema
12
-
13
- **Schema**: `goneat-tools-config.schema.yaml`
14
- **Purpose**: Define tool catalogs for the `goneat doctor` command
15
- **Owner**: Goneat team
16
- **Implementation**: `goneat/pkg/tools`
17
-
18
- ## Overview
19
-
20
- This schema describes the structure of tool catalogs used by goneat's `doctor` command. It supports:
21
-
22
- - **Scopes**: Logical grouping of tools (e.g., `security`, `formatting`, `build`)
23
- - **Tool Definitions**: Rich metadata including detection, installation, and versioning
24
- - **Platform Support**: Per-platform installation commands and installer priorities
25
- - **Version Management**: Minimum/recommended/disallowed version constraints
26
-
27
- ## Usage
28
-
29
- ### Goneat Internal Catalog
30
-
31
- Goneat ships with a built-in tool catalog at `goneat/internal/catalog/tools-config.yaml` that defines ecosystem tools.
32
-
33
- ### Custom Catalogs
34
-
35
- Projects can provide custom tool definitions that extend or replace goneat's built-in catalog:
36
-
37
- ```yaml
38
- # .goneat/tools-config.yaml
39
- scopes:
40
- custom:
41
- description: "Project-specific tooling"
42
- tools:
43
- - my-formatter
44
- - my-linter
45
-
46
- tools:
47
- my-formatter:
48
- name: my-formatter
49
- description: "Custom code formatter for our DSL"
50
- kind: go
51
- detect_command: my-formatter
52
- install_package: github.com/example/my-formatter@latest
53
- version_scheme: semver
54
- minimum_version: "1.2.0"
55
- ```
56
-
57
- ### CLI Integration
58
-
59
- ```bash
60
- # Check all tools in security scope
61
- goneat doctor --check security
62
-
63
- # Install missing tools
64
- goneat doctor --install security
65
-
66
- # Validate custom catalog
67
- goneat doctor --validate .goneat/tools-config.yaml
68
- ```
69
-
70
- ## Schema Features
71
-
72
- ### Scopes
73
-
74
- Group related tools for bulk operations:
75
-
76
- ```yaml
77
- scopes:
78
- security:
79
- description: "Security scanning and vulnerability detection"
80
- tools:
81
- - gosec
82
- - trivy
83
- - semgrep
84
- ```
85
-
86
- ### Tool Kinds
87
-
88
- - **`go`**: Go installable tools (`go install package@version`)
89
- - **`bundled-go`**: Tools bundled with goneat
90
- - **`system`**: System-level tools requiring package managers
91
-
92
- ### Installation Methods
93
-
94
- Tools can define multiple installation methods per platform:
95
-
96
- ```yaml
97
- tools:
98
- ripgrep:
99
- kind: system
100
- platforms: [darwin, linux, windows]
101
- install_commands:
102
- darwin: brew install ripgrep
103
- linux: apt-get install ripgrep
104
- windows: scoop install ripgrep
105
- installer_priority:
106
- darwin: [brew, mise, go-install]
107
- linux: [apt-get, pacman, dnf]
108
- ```
109
-
110
- ### Version Constraints
111
-
112
- ```yaml
113
- tools:
114
- golangci-lint:
115
- version_scheme: semver
116
- minimum_version: "1.54.0"
117
- recommended_version: "1.55.0"
118
- disallowed_versions:
119
- - "1.53.0" # Known bug
120
- - "1.52.0" # Performance regression
121
- ```
122
-
123
- ## Relationship to Bootstrap Manifests
124
-
125
- **Different Use Cases**:
126
-
127
- | Feature | Goneat Tools Config | Crucible Bootstrap Manifest |
128
- | -------------- | ------------------------------------------- | ------------------------------------- |
129
- | **Purpose** | Ecosystem-wide tool catalog | Repo-specific dependencies |
130
- | **Schema** | `goneat-tools-config.schema.yaml` | `external-tools-manifest.schema.yaml` |
131
- | **Scope** | Cross-project doctor command | Single repo bootstrap |
132
- | **Complexity** | Full-featured (scopes, versions, platforms) | Minimal (install/verify) |
133
- | **Location** | Goneat internal + optional project catalogs | `.goneat/tools.yaml` |
134
-
135
- Goneat's `doctor --bootstrap` command can read `.goneat/tools.yaml` manifests to install repo-specific tools.
136
-
137
- ## Library Usage
138
-
139
- Projects importing goneat as a library (e.g., Sumpter) can use `pkg/tools`:
140
-
141
- ```go
142
- import "github.com/fulmenhq/goneat/pkg/tools"
143
-
144
- // Parse catalog
145
- data, _ := os.ReadFile("tools-config.yaml")
146
- cfg, _ := tools.ParseConfig(data)
147
-
148
- // Validate against schema
149
- err := tools.ValidateBytes(data)
150
-
151
- // Access tool definitions
152
- for name, tool := range cfg.Tools {
153
- fmt.Printf("Tool: %s - %s\n", name, tool.Description)
154
- }
155
- ```
156
-
157
- ## Migration Notes
158
-
159
- **Post-refactor** (after goneat adopts crucible):
160
-
161
- Goneat will reference this schema from crucible:
162
-
163
- ```go
164
- import crucible "github.com/fulmenhq/crucible"
165
-
166
- schema, _ := crucible.GetSchema("tooling/goneat-tools/v1.0.0/goneat-tools-config.schema.yaml")
167
- // Use schema for validation
168
- ```
169
-
170
- See `.plans/memos/goneat/goneat-fulmen-refactor.md` for migration plan.
171
-
172
- ## References
173
-
174
- - [Goneat Repository](https://github.com/fulmenhq/goneat)
175
- - [External Tools Manifest Schema](../../external-tools/v1.0.0/) (Crucible bootstrap)
176
- - [Fulmen Config Path Standard](../../../docs/standards/config/fulmen-config-paths.md)
177
- - [Library Ecosystem Architecture](../../../docs/architecture/library-ecosystem.md)
@@ -1,146 +0,0 @@
1
- $schema: https://json-schema.org/draft/2020-12/schema
2
- type: object
3
- description: "Configuration for goneat doctor tools command - defines scopes and tool definitions"
4
- properties:
5
- scopes:
6
- type: object
7
- description: "Tool scopes that group related tools together"
8
- patternProperties:
9
- "^[a-z][a-z0-9-]*$":
10
- type: object
11
- description: "A tool scope definition"
12
- properties:
13
- description:
14
- type: string
15
- description: "Human-readable description of what this scope covers"
16
- minLength: 1
17
- maxLength: 200
18
- tools:
19
- type: array
20
- description: "List of tool names that belong to this scope"
21
- items:
22
- type: string
23
- pattern: "^[a-z][a-z0-9-]*$"
24
- description: "Tool name (must match a key in the tools section)"
25
- minItems: 1
26
- uniqueItems: true
27
- replace:
28
- type: boolean
29
- description: "When true, replace built-in scope definition instead of extending"
30
- required: ["description", "tools"]
31
- additionalProperties: false
32
- minProperties: 1
33
- additionalProperties: false
34
- tools:
35
- type: object
36
- description: "Tool definitions with detection and installation methods"
37
- patternProperties:
38
- "^[a-z][a-z0-9-]*$":
39
- $ref: "#/$defs/tool"
40
- minProperties: 1
41
- additionalProperties: false
42
- $defs:
43
- tool:
44
- type: object
45
- description: "Definition of a single tool with platform-specific installation methods"
46
- properties:
47
- name:
48
- type: string
49
- description: "Canonical name of the tool (should match the key)"
50
- pattern: "^[a-z][a-z0-9-]*$"
51
- minLength: 1
52
- maxLength: 50
53
- description:
54
- type: string
55
- description: "Human-readable description of the tool's purpose"
56
- minLength: 1
57
- maxLength: 200
58
- kind:
59
- type: string
60
- description: "Type of tool installation method"
61
- enum: ["go", "bundled-go", "system"]
62
- detect_command:
63
- type: string
64
- description: "Command to detect if tool is installed (e.g., 'rg --version')"
65
- minLength: 1
66
- maxLength: 100
67
- install_package:
68
- type: string
69
- description: "Go package path for 'go' kind tools (e.g., 'github.com/securego/gosec/v2/cmd/gosec@latest')"
70
- pattern: "^[a-zA-Z0-9._/-]+@[a-zA-Z0-9._/-]+$"
71
- minLength: 1
72
- maxLength: 200
73
- version_args:
74
- type: array
75
- description: "Arguments to get version information"
76
- items:
77
- type: string
78
- minLength: 1
79
- maxLength: 50
80
- maxItems: 10
81
- check_args:
82
- type: array
83
- description: "Arguments to check if tool works (usually help/usage)"
84
- items:
85
- type: string
86
- minLength: 1
87
- maxLength: 50
88
- maxItems: 10
89
- platforms:
90
- type: array
91
- description: "Supported platforms for system tools"
92
- items:
93
- type: string
94
- enum: ["darwin", "linux", "windows", "*"]
95
- minItems: 1
96
- uniqueItems: true
97
- install_commands:
98
- type: object
99
- description: "Installation commands keyed by platform or installer keyword (e.g., darwin, linux, mise, scoop)"
100
- propertyNames:
101
- pattern: "^[a-z][a-z0-9_-]*$"
102
- additionalProperties:
103
- type: string
104
- minLength: 1
105
- maxLength: 200
106
- minProperties: 1
107
- version_scheme:
108
- type: string
109
- description: "Version comparison scheme (semver-full, semver-compact, calver, lexical)"
110
- enum: ["semver", "semver-full", "semver-compact", "calver", "lexical"]
111
- minimum_version:
112
- type: string
113
- description: "Minimum supported version that must be present"
114
- minLength: 1
115
- maxLength: 50
116
- recommended_version:
117
- type: string
118
- description: "Recommended version to target during upgrades"
119
- minLength: 1
120
- maxLength: 50
121
- disallowed_versions:
122
- type: array
123
- description: "Explicit versions that should never be used"
124
- items:
125
- type: string
126
- minLength: 1
127
- maxLength: 50
128
- uniqueItems: true
129
- maxItems: 20
130
- installer_priority:
131
- type: object
132
- description: "Preferred installer order per platform (keywords drawn from curated list: mise, brew, scoop, winget, pacman, apt-get, dnf, yum, go-install, manual)"
133
- propertyNames:
134
- pattern: "^(all|darwin|linux|windows)$"
135
- additionalProperties:
136
- type: array
137
- items:
138
- type: string
139
- pattern: "^[a-z][a-z0-9_-]*$"
140
- minItems: 1
141
- maxItems: 10
142
- required: ["name", "description", "kind", "detect_command"]
143
- additionalProperties: false
144
- # Validation rules
145
- required: ["scopes", "tools"]
146
- additionalProperties: false