@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.
- package/CHANGELOG.md +73 -512
- package/README.md +111 -28
- package/config/crucible-ts/agentic/roles/README.md +76 -0
- package/config/crucible-ts/agentic/roles/cicd.yaml +82 -0
- package/config/crucible-ts/agentic/roles/dataeng.yaml +104 -0
- package/config/crucible-ts/agentic/roles/devlead.yaml +84 -0
- package/config/crucible-ts/agentic/roles/devrev.yaml +105 -0
- package/config/crucible-ts/agentic/roles/entarch.yaml +101 -0
- package/config/crucible-ts/agentic/roles/infoarch.yaml +95 -0
- package/config/crucible-ts/agentic/roles/prodmktg.yaml +92 -0
- package/config/crucible-ts/agentic/roles/qa.yaml +148 -0
- package/config/crucible-ts/agentic/roles/secrev.yaml +101 -0
- package/config/crucible-ts/agentic/roles/uxdev.yaml +168 -0
- package/config/crucible-ts/branding/ecosystem.yaml +26 -0
- package/config/crucible-ts/library/foundry/exit-codes.snapshot.json +26 -0
- package/config/crucible-ts/library/foundry/exit-codes.yaml +28 -3
- package/config/crucible-ts/library/foundry/patterns.yaml +2 -2
- package/config/crucible-ts/library/foundry/signal-resolution-fixtures.yaml +207 -0
- package/config/crucible-ts/library/foundry/signals.yaml +21 -0
- package/config/crucible-ts/library/foundry/simplified-modes.snapshot.json +9 -1
- package/config/crucible-ts/library/{foundry/similarity-fixtures.yaml → similarity/fixtures.yaml} +1 -1
- package/config/crucible-ts/library/v1.0.0/module-manifest.yaml +1 -2
- package/config/crucible-ts/taxonomy/fixture-catalog.yaml +145 -0
- package/config/crucible-ts/taxonomy/languages.yaml +2 -2
- package/config/crucible-ts/taxonomy/library/foundry-catalogs/v1.1.0/catalogs.yaml +77 -0
- package/config/crucible-ts/taxonomy/library/platform-modules/v1.1.0/modules.yaml +722 -0
- package/config/crucible-ts/taxonomy/metrics.yaml +1 -1
- package/config/crucible-ts/taxonomy/repository-categories.yaml +134 -1
- package/dist/appidentity/index.d.ts +117 -35
- package/dist/appidentity/index.js +752 -592
- package/dist/appidentity/index.js.map +1 -1
- package/dist/config/index.js +118 -6
- package/dist/config/index.js.map +1 -1
- package/dist/crucible/index.js +118 -6
- package/dist/crucible/index.js.map +1 -1
- package/dist/errors/index.js +118 -6
- package/dist/errors/index.js.map +1 -1
- package/dist/foundry/index.d.ts +13 -676
- package/dist/foundry/index.js +118 -6
- package/dist/foundry/index.js.map +1 -1
- package/dist/foundry/similarity/index.d.ts +2 -2
- package/dist/fulhash/index.d.ts +64 -12
- package/dist/fulhash/index.js +292 -53
- package/dist/fulhash/index.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +753 -593
- package/dist/index.js.map +1 -1
- package/dist/{manager-D27vrdaS.d.ts → manager-CH3fX7zO.d.ts} +1 -1
- package/dist/pathfinder/index.js +368 -59
- package/dist/pathfinder/index.js.map +1 -1
- package/dist/reports/license-inventory.csv +302 -0
- package/dist/schema/index.js +118 -6
- package/dist/schema/index.js.map +1 -1
- package/dist/signals/index.d.ts +675 -0
- package/dist/signals/index.js +5790 -0
- package/dist/signals/index.js.map +1 -0
- package/dist/similarity/index.d.ts +2 -0
- package/dist/similarity/index.js +136 -0
- package/dist/similarity/index.js.map +1 -0
- package/dist/{suggest-Cv7SVQRu.d.ts → suggest-D8LbwtPV.d.ts} +1 -1
- package/dist/telemetry/http/index.js +704 -591
- package/dist/telemetry/http/index.js.map +1 -1
- package/dist/telemetry/index.js +118 -6
- package/dist/telemetry/index.js.map +1 -1
- package/dist/telemetry/prometheus/index.d.ts +1 -1
- package/dist/telemetry/prometheus/index.js +175 -11
- package/dist/telemetry/prometheus/index.js.map +1 -1
- package/package.json +15 -6
- package/schemas/crucible-ts/assessment/v1.0.0/severity-definitions.schema.json +1 -1
- package/schemas/crucible-ts/config/fulmen-ecosystem/v1.0.0/fulmen-config-paths.schema.json +1 -1
- package/schemas/crucible-ts/config/repository/app-identity/v1.0.0/app-identity.schema.json +3 -3
- package/schemas/crucible-ts/config/repository/v1.0.0/lifecycle-phase.json +1 -1
- package/schemas/crucible-ts/config/repository-category/codex/v1.0.0/codex-config.schema.json +1 -1
- package/schemas/crucible-ts/config/standards/v1.0.0/adr-adoption-status.json +1 -1
- package/schemas/crucible-ts/config/standards/v1.0.0/adr-frontmatter.schema.json +3 -3
- package/schemas/crucible-ts/config/standards/v1.0.0/adr-lifecycle-status.json +1 -1
- package/schemas/crucible-ts/config/sync-keys.schema.yaml +14 -0
- package/schemas/crucible-ts/content/ssot-provenance/v1.0.0/ssot-provenance.schema.json +1 -1
- package/schemas/crucible-ts/design/README.md +159 -0
- package/schemas/crucible-ts/design/core/v1.0.0/component-states.schema.json +204 -0
- package/schemas/crucible-ts/design/core/v1.0.0/semantic-colors.schema.json +179 -0
- package/schemas/crucible-ts/design/core/v1.0.0/spacing-scale.schema.json +165 -0
- package/schemas/crucible-ts/design/core/v1.0.0/typography-roles.schema.json +195 -0
- package/schemas/crucible-ts/design/tui/v1.0.0/color-palette.schema.json +303 -0
- package/schemas/crucible-ts/design/tui/v1.0.0/component.schema.json +374 -0
- package/schemas/crucible-ts/design/tui/v1.0.0/layout.schema.json +272 -0
- package/schemas/crucible-ts/design/tui/v1.0.0/theme.schema.json +205 -0
- package/schemas/crucible-ts/design/tui/v1.0.0/typography.schema.json +316 -0
- package/schemas/crucible-ts/devsecops/lorage-central/activity/v1.0.0/activity.schema.json +1 -1
- package/schemas/crucible-ts/devsecops/lorage-central/credentials/v1.0.0/credentials.schema.json +1 -1
- package/schemas/crucible-ts/devsecops/lorage-central/policy/v1.0.0/policy.schema.json +1 -1
- package/schemas/crucible-ts/devsecops/lorage-central/recipe/v1.0.0/recipe.schema.json +1 -1
- package/schemas/crucible-ts/devsecops/lorage-central/runbooks/v1.0.0/runbook.schema.json +1 -1
- package/schemas/crucible-ts/devsecops/lorage-central/tenant/v1.0.0/tenant.schema.json +1 -1
- package/schemas/crucible-ts/devsecops/secrets/v1.0.0/secrets.schema.json +1 -1
- package/schemas/crucible-ts/error-handling/v1.0.0/error-response.schema.json +1 -1
- package/schemas/crucible-ts/library/foundry/v1.0.0/country-codes.schema.json +1 -1
- package/schemas/crucible-ts/library/foundry/v1.0.0/exit-codes.schema.json +1 -1
- package/schemas/crucible-ts/library/foundry/v1.0.0/http-status-groups.schema.json +1 -1
- package/schemas/crucible-ts/library/foundry/v1.0.0/mime-types.schema.json +1 -1
- package/schemas/crucible-ts/library/foundry/v1.0.0/patterns.schema.json +1 -1
- package/schemas/crucible-ts/library/foundry/v1.0.0/signal-resolution-fixtures.schema.json +140 -0
- package/schemas/crucible-ts/library/foundry/v1.0.0/signals.schema.json +6 -1
- package/schemas/crucible-ts/library/fulencode/v1.0.0/fulencode-config.schema.json +1 -1
- package/schemas/crucible-ts/library/fulhash/v1.0.0/checksum-string.schema.json +2 -2
- package/schemas/crucible-ts/library/fulhash/v1.0.0/digest.schema.json +61 -1
- package/schemas/crucible-ts/library/fulhash/v1.0.0/fixtures.schema.json +1 -1
- package/schemas/crucible-ts/library/fulpack/v1.0.0/archive-entry.schema.json +1 -1
- package/schemas/crucible-ts/library/fulpack/v1.0.0/archive-info.schema.json +1 -1
- package/schemas/crucible-ts/library/fulpack/v1.0.0/archive-manifest.schema.json +2 -2
- package/schemas/crucible-ts/library/fulpack/v1.0.0/create-options.schema.json +1 -1
- package/schemas/crucible-ts/library/fulpack/v1.0.0/extract-options.schema.json +1 -1
- package/schemas/crucible-ts/library/fulpack/v1.0.0/extract-result.schema.json +1 -1
- package/schemas/crucible-ts/library/fulpack/v1.0.0/scan-options.schema.json +1 -1
- package/schemas/crucible-ts/library/fulpack/v1.0.0/validation-result.schema.json +1 -1
- package/schemas/crucible-ts/library/module-manifest/v1.0.0/module-manifest.schema.json +1 -1
- package/schemas/crucible-ts/library/{foundry → similarity}/v1.0.0/similarity.schema.json +2 -2
- package/schemas/crucible-ts/library/{foundry → similarity}/v2.0.0/similarity.schema.json +2 -2
- package/schemas/crucible-ts/observability/metrics/v1.0.0/metrics-event.schema.json +1 -1
- package/schemas/crucible-ts/pathfinder/v1.0.0/find-query.schema.json +1 -1
- package/schemas/crucible-ts/pathfinder/v1.0.0/finder-config.schema.json +1 -1
- package/schemas/crucible-ts/pathfinder/v1.0.0/path-result.schema.json +1 -1
- package/schemas/crucible-ts/protocol/http/v1.0.0/error-response.schema.json +1 -1
- package/schemas/crucible-ts/protocol/http/v1.0.0/health-response.schema.json +1 -1
- package/schemas/crucible-ts/protocol/http/v1.0.0/success-response.schema.json +1 -1
- package/schemas/crucible-ts/protocol/http/v1.0.0/version-response.schema.json +1 -1
- package/schemas/crucible-ts/server/management/v1.0.0/server-management.schema.json +1 -1
- package/schemas/crucible-ts/standards/publishing/v1.0.0/spec-catalog.schema.json +134 -0
- package/schemas/crucible-ts/taxonomy/devsecops/auth-methods/v1.0.0/auth-methods-key.schema.json +1 -1
- package/schemas/crucible-ts/taxonomy/devsecops/auth-methods/v1.0.0/auth-methods-metadata.schema.json +1 -1
- package/schemas/crucible-ts/taxonomy/devsecops/geo/v1.0.0/geo-key.schema.json +1 -1
- package/schemas/crucible-ts/taxonomy/devsecops/geo/v1.0.0/geo-metadata.schema.json +1 -1
- package/schemas/crucible-ts/taxonomy/devsecops/infra-phases/v1.0.0/infra-phases-key.schema.json +1 -1
- package/schemas/crucible-ts/taxonomy/devsecops/infra-phases/v1.0.0/infra-phases-metadata.schema.json +1 -1
- package/schemas/crucible-ts/taxonomy/devsecops/infra-providers/v1.0.0/infra-providers-key.schema.json +1 -1
- package/schemas/crucible-ts/taxonomy/devsecops/infra-providers/v1.0.0/infra-providers-metadata.schema.json +1 -1
- package/schemas/crucible-ts/taxonomy/devsecops/modules/v1.0.0/devsecops-module-entry.schema.json +1 -1
- package/schemas/crucible-ts/taxonomy/fixture/v1.0.0/fixture-catalog.schema.json +166 -0
- package/schemas/crucible-ts/taxonomy/language/v1.0.0/language-key.schema.json +1 -1
- package/schemas/crucible-ts/taxonomy/language/v1.0.0/language-metadata.schema.json +1 -1
- package/schemas/crucible-ts/taxonomy/library/foundry-catalogs/v1.1.0/catalog-entry.schema.json +98 -0
- package/schemas/crucible-ts/taxonomy/library/fulencode/detection-confidence/v1.0.0/levels.schema.json +1 -1
- package/schemas/crucible-ts/taxonomy/library/fulencode/encoding-families/v1.0.0/families.schema.json +1 -1
- package/schemas/crucible-ts/taxonomy/library/fulencode/normalization-profiles/v1.0.0/profiles.schema.json +1 -1
- package/schemas/crucible-ts/taxonomy/library/fulhash/algorithms/v1.0.0/algorithms.yaml +16 -0
- package/schemas/crucible-ts/taxonomy/library/modules/v1.0.0/module-entry.schema.json +1 -1
- package/schemas/crucible-ts/taxonomy/library/modules/v1.1.0/module-entry.schema.json +436 -0
- package/schemas/crucible-ts/taxonomy/repository-category/v1.0.0/category-key.schema.json +16 -8
- package/schemas/crucible-ts/taxonomy/repository-category/v1.0.0/category-metadata.schema.json +1 -1
- package/schemas/crucible-ts/upstream/3leaps/PROVENANCE.md +43 -0
- package/schemas/crucible-ts/upstream/3leaps/agentic/v0/role-prompt.schema.json +183 -0
- package/schemas/crucible-ts/upstream/3leaps/ailink/v0/prompt.schema.json +204 -0
- package/schemas/crucible-ts/upstream/3leaps/ailink/v0/search-response.schema.json +152 -0
- package/schemas/crucible-ts/upstream/README.md +50 -0
- package/schemas/crucible-ts/web/branding/v1.0.0/site-branding.schema.json +1 -1
- package/schemas/crucible-ts/web/styling/v1.0.0/site-styling.schema.json +1 -1
- package/schemas/crucible-ts/config/goneat/README.md +0 -60
- package/schemas/crucible-ts/config/goneat/v1.0.0/dates.yaml +0 -234
- package/schemas/crucible-ts/config/goneat/v1.0.0/goneat-config.yaml +0 -344
- package/schemas/crucible-ts/config/goneat/v1.0.0/lifecycle-phase.json +0 -20
- package/schemas/crucible-ts/config/goneat/v1.0.0/release-phase.json +0 -17
- package/schemas/crucible-ts/config/goneat/v1.0.0/security-policy.yaml +0 -178
- package/schemas/crucible-ts/config/goneat/v1.0.0/version-policy.schema.yaml +0 -205
- package/schemas/crucible-ts/tooling/goneat-tools/v1.0.0/README.md +0 -177
- 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
|