specweave 3.0.14 → 3.0.16
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/.claude-plugin/marketplace.json +2 -2
- package/README.md +17 -0
- package/bin/specweave.js +25 -7
- package/dist/dashboard/assets/{index-DS3yH-sX.css → index-BFPKNEDz.css} +1 -1
- package/dist/dashboard/index.html +2 -2
- package/dist/plugins/specweave/lib/integrations/github/github-client-v2.js +2 -2
- package/dist/plugins/specweave/lib/integrations/github/github-client-v2.js.map +1 -1
- package/dist/src/cli/commands/auto-status.d.ts +0 -10
- package/dist/src/cli/commands/auto-status.d.ts.map +1 -1
- package/dist/src/cli/commands/auto-status.js +3 -2
- package/dist/src/cli/commands/auto-status.js.map +1 -1
- package/dist/src/cli/commands/auto.d.ts +0 -17
- package/dist/src/cli/commands/auto.d.ts.map +1 -1
- package/dist/src/cli/commands/auto.js +8 -14
- package/dist/src/cli/commands/auto.js.map +1 -1
- package/dist/src/cli/commands/get.d.ts +4 -0
- package/dist/src/cli/commands/get.d.ts.map +1 -1
- package/dist/src/cli/commands/get.js +15 -33
- package/dist/src/cli/commands/get.js.map +1 -1
- package/dist/src/cli/commands/qa.js +2 -2
- package/dist/src/cli/commands/qa.js.map +1 -1
- package/dist/src/cli/commands/save.js +1 -1
- package/dist/src/cli/commands/save.js.map +1 -1
- package/dist/src/cli/commands/sync-progress.d.ts +0 -10
- package/dist/src/cli/commands/sync-progress.d.ts.map +1 -1
- package/dist/src/cli/commands/sync-progress.js +21 -27
- package/dist/src/cli/commands/sync-progress.js.map +1 -1
- package/dist/src/cli/commands/task.js +1 -1
- package/dist/src/cli/commands/task.js.map +1 -1
- package/dist/src/cli/commands/update.js +1 -1
- package/dist/src/cli/commands/update.js.map +1 -1
- package/dist/src/cli/helpers/get/register-repo.d.ts +1 -11
- package/dist/src/cli/helpers/get/register-repo.d.ts.map +1 -1
- package/dist/src/cli/helpers/get/register-repo.js +6 -85
- package/dist/src/cli/helpers/get/register-repo.js.map +1 -1
- package/dist/src/cli/helpers/get/source-parser.d.ts +1 -1
- package/dist/src/cli/helpers/get/source-parser.d.ts.map +1 -1
- package/dist/src/cli/helpers/get/source-parser.js +4 -4
- package/dist/src/cli/helpers/get/source-parser.js.map +1 -1
- package/dist/src/cli/helpers/init/path-utils.d.ts +1 -1
- package/dist/src/cli/helpers/init/path-utils.d.ts.map +1 -1
- package/dist/src/cli/helpers/init/path-utils.js +44 -2
- package/dist/src/cli/helpers/init/path-utils.js.map +1 -1
- package/dist/src/cli/helpers/init/types.d.ts +1 -0
- package/dist/src/cli/helpers/init/types.d.ts.map +1 -1
- package/dist/src/core/ac-test-validator-cli.js +1 -1
- package/dist/src/core/ac-test-validator-cli.js.map +1 -1
- package/dist/src/core/config/types.d.ts +3 -1
- package/dist/src/core/config/types.d.ts.map +1 -1
- package/dist/src/core/config/types.js.map +1 -1
- package/dist/src/core/doctor/checkers/increments-checker.js +2 -2
- package/dist/src/core/doctor/checkers/increments-checker.js.map +1 -1
- package/dist/src/core/hooks/handlers/hook-router.d.ts.map +1 -1
- package/dist/src/core/hooks/handlers/hook-router.js +5 -7
- package/dist/src/core/hooks/handlers/hook-router.js.map +1 -1
- package/dist/src/core/hooks/handlers/stop.d.ts.map +1 -1
- package/dist/src/core/hooks/handlers/stop.js +17 -14
- package/dist/src/core/hooks/handlers/stop.js.map +1 -1
- package/dist/src/core/hooks/handlers/utils.d.ts.map +1 -1
- package/dist/src/core/hooks/handlers/utils.js +7 -15
- package/dist/src/core/hooks/handlers/utils.js.map +1 -1
- package/dist/src/core/increment/duplicate-detector.d.ts +0 -8
- package/dist/src/core/increment/duplicate-detector.d.ts.map +1 -1
- package/dist/src/core/increment/duplicate-detector.js +15 -11
- package/dist/src/core/increment/duplicate-detector.js.map +1 -1
- package/dist/src/core/increment/increment-archiver.d.ts +0 -6
- package/dist/src/core/increment/increment-archiver.d.ts.map +1 -1
- package/dist/src/core/increment/increment-archiver.js +10 -5
- package/dist/src/core/increment/increment-archiver.js.map +1 -1
- package/dist/src/core/increment/increment-utils.d.ts +6 -6
- package/dist/src/core/increment/increment-utils.d.ts.map +1 -1
- package/dist/src/core/increment/increment-utils.js +26 -27
- package/dist/src/core/increment/increment-utils.js.map +1 -1
- package/dist/src/core/increment/metadata-manager.d.ts.map +1 -1
- package/dist/src/core/increment/metadata-manager.js +19 -6
- package/dist/src/core/increment/metadata-manager.js.map +1 -1
- package/dist/src/core/increment/number-reservation.d.ts +16 -0
- package/dist/src/core/increment/number-reservation.d.ts.map +1 -0
- package/dist/src/core/increment/number-reservation.js +125 -0
- package/dist/src/core/increment/number-reservation.js.map +1 -0
- package/dist/src/core/increment/template-creator.d.ts.map +1 -1
- package/dist/src/core/increment/template-creator.js +12 -44
- package/dist/src/core/increment/template-creator.js.map +1 -1
- package/dist/src/core/living-docs/feature-archiver.js +3 -3
- package/dist/src/core/living-docs/feature-archiver.js.map +1 -1
- package/dist/src/core/living-docs/feature-consistency-validator.js +1 -1
- package/dist/src/core/living-docs/feature-consistency-validator.js.map +1 -1
- package/dist/src/core/living-docs/feature-id-manager.js +2 -2
- package/dist/src/core/living-docs/feature-id-manager.js.map +1 -1
- package/dist/src/core/living-docs/hierarchy-mapper.js +3 -3
- package/dist/src/core/living-docs/hierarchy-mapper.js.map +1 -1
- package/dist/src/core/living-docs/living-docs-sync.js +1 -1
- package/dist/src/core/living-docs/living-docs-sync.js.map +1 -1
- package/dist/src/core/qa/qa-runner.d.ts +0 -6
- package/dist/src/core/qa/qa-runner.d.ts.map +1 -1
- package/dist/src/core/qa/qa-runner.js +8 -10
- package/dist/src/core/qa/qa-runner.js.map +1 -1
- package/dist/src/core/session/handoff-all.d.ts +2 -2
- package/dist/src/core/session/handoff-all.d.ts.map +1 -1
- package/dist/src/core/session/handoff-all.js +5 -3
- package/dist/src/core/session/handoff-all.js.map +1 -1
- package/dist/src/core/session/handoff-list.d.ts +0 -19
- package/dist/src/core/session/handoff-list.d.ts.map +1 -1
- package/dist/src/core/session/handoff-list.js +7 -4
- package/dist/src/core/session/handoff-list.js.map +1 -1
- package/dist/src/core/session/handoff-remote.d.ts +0 -19
- package/dist/src/core/session/handoff-remote.d.ts.map +1 -1
- package/dist/src/core/session/handoff-remote.js +3 -3
- package/dist/src/core/session/handoff-remote.js.map +1 -1
- package/dist/src/core/session/nested-repos.d.ts.map +1 -1
- package/dist/src/core/session/nested-repos.js +7 -1
- package/dist/src/core/session/nested-repos.js.map +1 -1
- package/dist/src/core/specs/spec-metadata-manager.js +1 -1
- package/dist/src/core/specs/spec-metadata-manager.js.map +1 -1
- package/dist/src/core/specs/spec-parser.js +1 -1
- package/dist/src/core/specs/spec-parser.js.map +1 -1
- package/dist/src/core/tasks/resolve-increment.d.ts.map +1 -1
- package/dist/src/core/tasks/resolve-increment.js +3 -2
- package/dist/src/core/tasks/resolve-increment.js.map +1 -1
- package/dist/src/core/types/increment-metadata.d.ts +2 -0
- package/dist/src/core/types/increment-metadata.d.ts.map +1 -1
- package/dist/src/core/types/increment-metadata.js.map +1 -1
- package/dist/src/core/workspace/adoption.d.ts +21 -0
- package/dist/src/core/workspace/adoption.d.ts.map +1 -0
- package/dist/src/core/workspace/adoption.js +187 -0
- package/dist/src/core/workspace/adoption.js.map +1 -0
- package/dist/src/core/workspace/context.d.ts +21 -0
- package/dist/src/core/workspace/context.d.ts.map +1 -0
- package/dist/src/core/workspace/context.js +105 -0
- package/dist/src/core/workspace/context.js.map +1 -0
- package/dist/src/importers/item-converter.js +1 -1
- package/dist/src/importers/item-converter.js.map +1 -1
- package/dist/src/sync/github-reconciler.js +2 -2
- package/dist/src/sync/github-reconciler.js.map +1 -1
- package/dist/src/utils/external-tool-drift-detector.js +1 -1
- package/dist/src/utils/external-tool-drift-detector.js.map +1 -1
- package/dist/src/utils/feature-id-collision.js +1 -1
- package/dist/src/utils/feature-id-collision.js.map +1 -1
- package/dist/src/utils/find-project-root.d.ts.map +1 -1
- package/dist/src/utils/find-project-root.js +16 -36
- package/dist/src/utils/find-project-root.js.map +1 -1
- package/dist/src/utils/increment-id-validator.d.ts +27 -67
- package/dist/src/utils/increment-id-validator.d.ts.map +1 -1
- package/dist/src/utils/increment-id-validator.js +57 -106
- package/dist/src/utils/increment-id-validator.js.map +1 -1
- package/dist/src/utils/resolve-increment-id.d.ts +0 -22
- package/dist/src/utils/resolve-increment-id.d.ts.map +1 -1
- package/dist/src/utils/resolve-increment-id.js +17 -41
- package/dist/src/utils/resolve-increment-id.js.map +1 -1
- package/package.json +2 -1
- package/plugins/specweave/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave/lib/integrations/github/github-client-v2.js +2 -2
- package/plugins/specweave/lib/integrations/github/github-client-v2.ts +2 -2
- package/src/core/schemas/specweave-config.schema.json +1130 -0
- package/src/core/schemas/sync.schema.json +687 -0
- package/src/core/schemas/workspace.schema.json +209 -0
- package/src/templates/AGENTS.md.template +8 -7
- package/src/templates/git-hooks/pre-commit.template +4 -4
- /package/dist/dashboard/assets/{index-DAwyYXiu.js → index-DVaY9gOX.js} +0 -0
|
@@ -0,0 +1,1130 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"title": "SpecWeave Configuration",
|
|
4
|
+
"description": "Schema for .specweave/config.yaml configuration file",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"properties": {
|
|
7
|
+
"plugins": {
|
|
8
|
+
"type": "object",
|
|
9
|
+
"description": "Plugin configuration",
|
|
10
|
+
"properties": {
|
|
11
|
+
"enabled": {
|
|
12
|
+
"type": "array",
|
|
13
|
+
"description": "List of enabled plugin names",
|
|
14
|
+
"items": {
|
|
15
|
+
"type": "string",
|
|
16
|
+
"pattern": "^specweave-[a-z0-9-]+$"
|
|
17
|
+
},
|
|
18
|
+
"uniqueItems": true,
|
|
19
|
+
"examples": [
|
|
20
|
+
["specweave-github", "specweave-frontend-stack"]
|
|
21
|
+
]
|
|
22
|
+
},
|
|
23
|
+
"settings": {
|
|
24
|
+
"type": "object",
|
|
25
|
+
"description": "Plugin-specific settings",
|
|
26
|
+
"patternProperties": {
|
|
27
|
+
"^specweave-[a-z0-9-]+$": {
|
|
28
|
+
"type": "object",
|
|
29
|
+
"description": "Settings for a specific plugin"
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
"additionalProperties": false
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
"required": ["enabled"],
|
|
36
|
+
"additionalProperties": false
|
|
37
|
+
},
|
|
38
|
+
"project": {
|
|
39
|
+
"type": "object",
|
|
40
|
+
"description": "Project metadata",
|
|
41
|
+
"properties": {
|
|
42
|
+
"name": {
|
|
43
|
+
"type": "string",
|
|
44
|
+
"description": "Project name",
|
|
45
|
+
"minLength": 1,
|
|
46
|
+
"maxLength": 256
|
|
47
|
+
},
|
|
48
|
+
"version": {
|
|
49
|
+
"type": "string",
|
|
50
|
+
"description": "Project version (semver)",
|
|
51
|
+
"pattern": "^\\d+\\.\\d+\\.\\d+(-[a-z0-9.-]+)?(\\+[a-z0-9.-]+)?$"
|
|
52
|
+
},
|
|
53
|
+
"description": {
|
|
54
|
+
"type": "string",
|
|
55
|
+
"description": "Project description",
|
|
56
|
+
"maxLength": 1024
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
"additionalProperties": true
|
|
60
|
+
},
|
|
61
|
+
"adapters": {
|
|
62
|
+
"type": "object",
|
|
63
|
+
"description": "Adapter configuration",
|
|
64
|
+
"properties": {
|
|
65
|
+
"default": {
|
|
66
|
+
"type": "string",
|
|
67
|
+
"description": "Default adapter to use",
|
|
68
|
+
"enum": ["claude", "cursor", "copilot", "generic"]
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
"additionalProperties": true
|
|
72
|
+
},
|
|
73
|
+
"language": {
|
|
74
|
+
"type": "string",
|
|
75
|
+
"description": "Primary language for generated content and CLI",
|
|
76
|
+
"enum": ["en", "ru", "es", "zh", "de", "fr", "ja", "ko", "pt"],
|
|
77
|
+
"default": "en"
|
|
78
|
+
},
|
|
79
|
+
"limits": {
|
|
80
|
+
"type": "object",
|
|
81
|
+
"description": "Advisory WIP limit (2.0). No hard cap: exceeding it prints one info note and never blocks.",
|
|
82
|
+
"properties": {
|
|
83
|
+
"activeIncrements": {
|
|
84
|
+
"type": "number",
|
|
85
|
+
"description": "Recommended maximum active increments. 0 disables the note.",
|
|
86
|
+
"minimum": 0,
|
|
87
|
+
"default": 3
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
"additionalProperties": false
|
|
91
|
+
},
|
|
92
|
+
"hooks": {
|
|
93
|
+
"type": "object",
|
|
94
|
+
"description": "Hook configuration for lifecycle automation (Claude Code only)",
|
|
95
|
+
"properties": {
|
|
96
|
+
"post_task_completion": {
|
|
97
|
+
"type": "object",
|
|
98
|
+
"description": "Post-task completion hook settings",
|
|
99
|
+
"properties": {
|
|
100
|
+
"sync_tasks_md": {
|
|
101
|
+
"type": "boolean",
|
|
102
|
+
"description": "Update tasks.md with completion status",
|
|
103
|
+
"default": true
|
|
104
|
+
},
|
|
105
|
+
"external_tracker_sync": {
|
|
106
|
+
"type": "boolean",
|
|
107
|
+
"description": "Sync to external tracker (GitHub Issues, Jira, ADO) on each task completion. Disable to reduce API calls; sync happens on increment open/close instead.",
|
|
108
|
+
"default": false
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
"additionalProperties": false
|
|
112
|
+
},
|
|
113
|
+
"post_increment_planning": {
|
|
114
|
+
"type": "object",
|
|
115
|
+
"description": "Post-increment planning hook settings",
|
|
116
|
+
"properties": {
|
|
117
|
+
"auto_create_github_issue": {
|
|
118
|
+
"type": "boolean",
|
|
119
|
+
"description": "Automatically create GitHub issue after increment planning",
|
|
120
|
+
"default": true
|
|
121
|
+
},
|
|
122
|
+
"sync_living_docs": {
|
|
123
|
+
"type": "boolean",
|
|
124
|
+
"description": "Sync living docs after increment planning (before external issue creation)",
|
|
125
|
+
"default": true
|
|
126
|
+
}
|
|
127
|
+
},
|
|
128
|
+
"additionalProperties": false
|
|
129
|
+
},
|
|
130
|
+
"post_increment_done": {
|
|
131
|
+
"type": "object",
|
|
132
|
+
"description": "Post-increment done hook settings (MANDATORY for GitHub Project sync)",
|
|
133
|
+
"properties": {
|
|
134
|
+
"sync_living_docs": {
|
|
135
|
+
"type": "boolean",
|
|
136
|
+
"description": "Sync specs to living docs when increment closes",
|
|
137
|
+
"default": true
|
|
138
|
+
},
|
|
139
|
+
"sync_to_github_project": {
|
|
140
|
+
"type": "boolean",
|
|
141
|
+
"description": "MANDATORY: Automatically sync living docs spec to GitHub Project when increment closes (ensures source of truth integrity)",
|
|
142
|
+
"default": true
|
|
143
|
+
},
|
|
144
|
+
"close_github_issue": {
|
|
145
|
+
"type": "boolean",
|
|
146
|
+
"description": "Automatically close GitHub issue when increment closes",
|
|
147
|
+
"default": true
|
|
148
|
+
},
|
|
149
|
+
"update_living_docs_first": {
|
|
150
|
+
"type": "boolean",
|
|
151
|
+
"description": "Ensure living docs are synced before GitHub Project sync",
|
|
152
|
+
"default": true
|
|
153
|
+
}
|
|
154
|
+
},
|
|
155
|
+
"additionalProperties": false,
|
|
156
|
+
"required": ["sync_to_github_project"]
|
|
157
|
+
}
|
|
158
|
+
},
|
|
159
|
+
"additionalProperties": false
|
|
160
|
+
},
|
|
161
|
+
"statusLine": {
|
|
162
|
+
"type": "object",
|
|
163
|
+
"description": "Status line configuration (simplified). Shows: [increment-name] ████░░░░ X/Y tasks (Z open)",
|
|
164
|
+
"properties": {
|
|
165
|
+
"enabled": {
|
|
166
|
+
"type": "boolean",
|
|
167
|
+
"description": "Enable status line rendering",
|
|
168
|
+
"default": true
|
|
169
|
+
},
|
|
170
|
+
"maxCacheAge": {
|
|
171
|
+
"type": "number",
|
|
172
|
+
"description": "Maximum age of cache before showing stale warning (milliseconds)",
|
|
173
|
+
"default": 30000,
|
|
174
|
+
"minimum": 5000,
|
|
175
|
+
"maximum": 120000
|
|
176
|
+
},
|
|
177
|
+
"progressBarWidth": {
|
|
178
|
+
"type": "number",
|
|
179
|
+
"description": "Width of progress bar in characters",
|
|
180
|
+
"default": 8,
|
|
181
|
+
"minimum": 4,
|
|
182
|
+
"maximum": 20
|
|
183
|
+
},
|
|
184
|
+
"maxNameLength": {
|
|
185
|
+
"type": "number",
|
|
186
|
+
"description": "Maximum length for increment name display",
|
|
187
|
+
"default": 30,
|
|
188
|
+
"minimum": 10,
|
|
189
|
+
"maximum": 50
|
|
190
|
+
}
|
|
191
|
+
},
|
|
192
|
+
"additionalProperties": false
|
|
193
|
+
},
|
|
194
|
+
"translation": {
|
|
195
|
+
"type": "object",
|
|
196
|
+
"description": "Translation settings for multilingual support",
|
|
197
|
+
"properties": {
|
|
198
|
+
"enabled": {
|
|
199
|
+
"type": "boolean",
|
|
200
|
+
"description": "Enable/disable translation system entirely",
|
|
201
|
+
"default": true
|
|
202
|
+
},
|
|
203
|
+
"method": {
|
|
204
|
+
"type": "string",
|
|
205
|
+
"description": "Translation method (always in-session for zero cost)",
|
|
206
|
+
"enum": ["in-session"],
|
|
207
|
+
"default": "in-session"
|
|
208
|
+
},
|
|
209
|
+
"autoTranslateInternalDocs": {
|
|
210
|
+
"type": "boolean",
|
|
211
|
+
"description": "Automatically translate increment files (spec.md, plan.md, tasks.md) and living docs specs to English after increment planning (recommended: true)",
|
|
212
|
+
"default": true
|
|
213
|
+
},
|
|
214
|
+
"autoTranslateLivingDocs": {
|
|
215
|
+
"type": "boolean",
|
|
216
|
+
"description": "Automatically translate living docs to English after task completion (ADRs, HLDs, etc.)",
|
|
217
|
+
"default": true
|
|
218
|
+
},
|
|
219
|
+
"keepFrameworkTerms": {
|
|
220
|
+
"type": "boolean",
|
|
221
|
+
"description": "Keep framework terms (Increment, Living Docs, SpecWeave, ADR, RFC) in English",
|
|
222
|
+
"default": true
|
|
223
|
+
},
|
|
224
|
+
"keepTechnicalTerms": {
|
|
225
|
+
"type": "boolean",
|
|
226
|
+
"description": "Keep technical terms (Git, Docker, Kubernetes, npm, TypeScript) in English",
|
|
227
|
+
"default": true
|
|
228
|
+
},
|
|
229
|
+
"translateCodeComments": {
|
|
230
|
+
"type": "boolean",
|
|
231
|
+
"description": "Translate comments in generated code",
|
|
232
|
+
"default": true
|
|
233
|
+
},
|
|
234
|
+
"translateVariableNames": {
|
|
235
|
+
"type": "boolean",
|
|
236
|
+
"description": "Translate variable/function names (NOT RECOMMENDED)",
|
|
237
|
+
"default": false
|
|
238
|
+
},
|
|
239
|
+
"filesAlwaysInEnglish": {
|
|
240
|
+
"type": "array",
|
|
241
|
+
"description": "File patterns that must always be in English (glob patterns)",
|
|
242
|
+
"items": {
|
|
243
|
+
"type": "string"
|
|
244
|
+
},
|
|
245
|
+
"default": [
|
|
246
|
+
"spec.md",
|
|
247
|
+
"plan.md",
|
|
248
|
+
"tasks.md",
|
|
249
|
+
"tests.md",
|
|
250
|
+
"docs/internal/**/*.md"
|
|
251
|
+
]
|
|
252
|
+
},
|
|
253
|
+
"translationModel": {
|
|
254
|
+
"type": "string",
|
|
255
|
+
"description": "LLM model to use for translation",
|
|
256
|
+
"enum": ["haiku", "sonnet", "opus"],
|
|
257
|
+
"default": "haiku"
|
|
258
|
+
}
|
|
259
|
+
},
|
|
260
|
+
"additionalProperties": false
|
|
261
|
+
},
|
|
262
|
+
"multiProject": {
|
|
263
|
+
"type": "object",
|
|
264
|
+
"description": "DEPRECATED: Use workspace instead. Multi-project configuration for internal docs organization.",
|
|
265
|
+
"properties": {
|
|
266
|
+
"enabled": {
|
|
267
|
+
"type": "boolean",
|
|
268
|
+
"description": "Enable multi-project mode (false = single project using projects/default/)",
|
|
269
|
+
"default": false
|
|
270
|
+
},
|
|
271
|
+
"projects": {
|
|
272
|
+
"type": "array",
|
|
273
|
+
"description": "Available projects",
|
|
274
|
+
"items": {
|
|
275
|
+
"type": "object",
|
|
276
|
+
"description": "Project configuration",
|
|
277
|
+
"properties": {
|
|
278
|
+
"id": {
|
|
279
|
+
"type": "string",
|
|
280
|
+
"description": "Unique project identifier (kebab-case)",
|
|
281
|
+
"pattern": "^[a-z0-9-]+$",
|
|
282
|
+
"minLength": 1,
|
|
283
|
+
"maxLength": 64
|
|
284
|
+
},
|
|
285
|
+
"name": {
|
|
286
|
+
"type": "string",
|
|
287
|
+
"description": "Project display name",
|
|
288
|
+
"minLength": 1,
|
|
289
|
+
"maxLength": 128
|
|
290
|
+
},
|
|
291
|
+
"description": {
|
|
292
|
+
"type": "string",
|
|
293
|
+
"description": "Project description",
|
|
294
|
+
"maxLength": 512
|
|
295
|
+
},
|
|
296
|
+
"techStack": {
|
|
297
|
+
"type": "array",
|
|
298
|
+
"description": "Technologies used in this project",
|
|
299
|
+
"items": {
|
|
300
|
+
"type": "string"
|
|
301
|
+
},
|
|
302
|
+
"default": []
|
|
303
|
+
},
|
|
304
|
+
"team": {
|
|
305
|
+
"type": "string",
|
|
306
|
+
"description": "Team or organization name",
|
|
307
|
+
"minLength": 1,
|
|
308
|
+
"maxLength": 128
|
|
309
|
+
},
|
|
310
|
+
"contacts": {
|
|
311
|
+
"type": "object",
|
|
312
|
+
"description": "Project contacts",
|
|
313
|
+
"properties": {
|
|
314
|
+
"lead": {
|
|
315
|
+
"type": "string",
|
|
316
|
+
"description": "Tech lead email",
|
|
317
|
+
"format": "email"
|
|
318
|
+
},
|
|
319
|
+
"pm": {
|
|
320
|
+
"type": "string",
|
|
321
|
+
"description": "Product manager email",
|
|
322
|
+
"format": "email"
|
|
323
|
+
}
|
|
324
|
+
},
|
|
325
|
+
"additionalProperties": false
|
|
326
|
+
},
|
|
327
|
+
"syncProfiles": {
|
|
328
|
+
"type": "array",
|
|
329
|
+
"description": "Linked sync profiles from sync.profiles (references profile IDs)",
|
|
330
|
+
"items": {
|
|
331
|
+
"type": "string"
|
|
332
|
+
},
|
|
333
|
+
"default": []
|
|
334
|
+
}
|
|
335
|
+
},
|
|
336
|
+
"required": ["id", "name", "description", "team"],
|
|
337
|
+
"additionalProperties": false
|
|
338
|
+
},
|
|
339
|
+
"minItems": 1
|
|
340
|
+
}
|
|
341
|
+
},
|
|
342
|
+
"additionalProperties": false
|
|
343
|
+
},
|
|
344
|
+
"brownfield": {
|
|
345
|
+
"type": "object",
|
|
346
|
+
"description": "Brownfield documentation import tracking",
|
|
347
|
+
"properties": {
|
|
348
|
+
"importHistory": {
|
|
349
|
+
"type": "array",
|
|
350
|
+
"description": "History of all brownfield imports",
|
|
351
|
+
"items": {
|
|
352
|
+
"type": "object",
|
|
353
|
+
"description": "Single import record",
|
|
354
|
+
"properties": {
|
|
355
|
+
"source": {
|
|
356
|
+
"type": "string",
|
|
357
|
+
"description": "Source type",
|
|
358
|
+
"enum": ["notion", "confluence", "wiki", "custom"]
|
|
359
|
+
},
|
|
360
|
+
"workspace": {
|
|
361
|
+
"type": "string",
|
|
362
|
+
"description": "Source workspace/space name"
|
|
363
|
+
},
|
|
364
|
+
"importedAt": {
|
|
365
|
+
"type": "string",
|
|
366
|
+
"description": "ISO 8601 timestamp of import",
|
|
367
|
+
"format": "date-time"
|
|
368
|
+
},
|
|
369
|
+
"project": {
|
|
370
|
+
"type": "string",
|
|
371
|
+
"description": "Target project ID",
|
|
372
|
+
"pattern": "^[a-z0-9-]+$"
|
|
373
|
+
},
|
|
374
|
+
"filesImported": {
|
|
375
|
+
"type": "number",
|
|
376
|
+
"description": "Total number of files imported",
|
|
377
|
+
"minimum": 0
|
|
378
|
+
},
|
|
379
|
+
"destination": {
|
|
380
|
+
"type": "string",
|
|
381
|
+
"description": "Destination path"
|
|
382
|
+
}
|
|
383
|
+
},
|
|
384
|
+
"required": ["source", "importedAt", "project", "filesImported", "destination"],
|
|
385
|
+
"additionalProperties": false
|
|
386
|
+
},
|
|
387
|
+
"default": []
|
|
388
|
+
}
|
|
389
|
+
},
|
|
390
|
+
"additionalProperties": false
|
|
391
|
+
},
|
|
392
|
+
"documentation": {
|
|
393
|
+
"type": "object",
|
|
394
|
+
"description": "Documentation configuration — directories and preview",
|
|
395
|
+
"properties": {
|
|
396
|
+
"directories": {
|
|
397
|
+
"type": "array",
|
|
398
|
+
"description": "Directories to search for documentation (relative to project root)",
|
|
399
|
+
"items": { "type": "string" },
|
|
400
|
+
"default": [".specweave/docs"]
|
|
401
|
+
},
|
|
402
|
+
"preview": {
|
|
403
|
+
"type": "object",
|
|
404
|
+
"description": "Local documentation preview settings",
|
|
405
|
+
"properties": {
|
|
406
|
+
"enabled": {
|
|
407
|
+
"type": "boolean",
|
|
408
|
+
"description": "Enable documentation preview feature",
|
|
409
|
+
"default": true
|
|
410
|
+
},
|
|
411
|
+
"autoInstall": {
|
|
412
|
+
"type": "boolean",
|
|
413
|
+
"description": "Automatically install Docusaurus dependencies (lazy install on first use recommended)",
|
|
414
|
+
"default": false
|
|
415
|
+
},
|
|
416
|
+
"port": {
|
|
417
|
+
"type": "number",
|
|
418
|
+
"description": "Default port for internal docs preview (3015 for internal, 3016 for public)",
|
|
419
|
+
"minimum": 1024,
|
|
420
|
+
"maximum": 65535,
|
|
421
|
+
"default": 3015
|
|
422
|
+
},
|
|
423
|
+
"openBrowser": {
|
|
424
|
+
"type": "boolean",
|
|
425
|
+
"description": "Automatically open browser when server starts",
|
|
426
|
+
"default": true
|
|
427
|
+
},
|
|
428
|
+
"theme": {
|
|
429
|
+
"type": "string",
|
|
430
|
+
"description": "Documentation theme",
|
|
431
|
+
"enum": ["default", "classic", "dark"],
|
|
432
|
+
"default": "default"
|
|
433
|
+
},
|
|
434
|
+
"excludeFolders": {
|
|
435
|
+
"type": "array",
|
|
436
|
+
"description": "Folders to exclude from documentation",
|
|
437
|
+
"items": {
|
|
438
|
+
"type": "string"
|
|
439
|
+
},
|
|
440
|
+
"default": ["legacy", "node_modules"]
|
|
441
|
+
}
|
|
442
|
+
},
|
|
443
|
+
"additionalProperties": false
|
|
444
|
+
}
|
|
445
|
+
},
|
|
446
|
+
"additionalProperties": false
|
|
447
|
+
},
|
|
448
|
+
"reflection": {
|
|
449
|
+
"type": "object",
|
|
450
|
+
"description": "AI Self-Reflection System configuration (v0.12.0+)",
|
|
451
|
+
"properties": {
|
|
452
|
+
"enabled": {
|
|
453
|
+
"type": "boolean",
|
|
454
|
+
"description": "Enable/disable reflection system entirely",
|
|
455
|
+
"default": true
|
|
456
|
+
},
|
|
457
|
+
"mode": {
|
|
458
|
+
"type": "string",
|
|
459
|
+
"description": "Reflection execution mode",
|
|
460
|
+
"enum": ["auto", "manual", "disabled"],
|
|
461
|
+
"default": "auto"
|
|
462
|
+
},
|
|
463
|
+
"depth": {
|
|
464
|
+
"type": "string",
|
|
465
|
+
"description": "Analysis depth level",
|
|
466
|
+
"enum": ["quick", "standard", "deep"],
|
|
467
|
+
"default": "standard"
|
|
468
|
+
},
|
|
469
|
+
"model": {
|
|
470
|
+
"type": "string",
|
|
471
|
+
"description": "AI model for reflection analysis",
|
|
472
|
+
"enum": ["haiku", "sonnet", "opus"],
|
|
473
|
+
"default": "haiku"
|
|
474
|
+
},
|
|
475
|
+
"categories": {
|
|
476
|
+
"type": "object",
|
|
477
|
+
"description": "Enable/disable specific analysis categories",
|
|
478
|
+
"properties": {
|
|
479
|
+
"security": {
|
|
480
|
+
"type": "boolean",
|
|
481
|
+
"description": "Security vulnerability detection (OWASP Top 10)",
|
|
482
|
+
"default": true
|
|
483
|
+
},
|
|
484
|
+
"quality": {
|
|
485
|
+
"type": "boolean",
|
|
486
|
+
"description": "Code quality and best practices analysis",
|
|
487
|
+
"default": true
|
|
488
|
+
},
|
|
489
|
+
"testing": {
|
|
490
|
+
"type": "boolean",
|
|
491
|
+
"description": "Test coverage and quality analysis",
|
|
492
|
+
"default": true
|
|
493
|
+
},
|
|
494
|
+
"performance": {
|
|
495
|
+
"type": "boolean",
|
|
496
|
+
"description": "Performance issue detection",
|
|
497
|
+
"default": true
|
|
498
|
+
},
|
|
499
|
+
"technicalDebt": {
|
|
500
|
+
"type": "boolean",
|
|
501
|
+
"description": "Technical debt tracking",
|
|
502
|
+
"default": true
|
|
503
|
+
}
|
|
504
|
+
},
|
|
505
|
+
"additionalProperties": false
|
|
506
|
+
},
|
|
507
|
+
"criticalThreshold": {
|
|
508
|
+
"type": "string",
|
|
509
|
+
"description": "Minimum severity to show terminal warnings",
|
|
510
|
+
"enum": ["CRITICAL", "HIGH", "MEDIUM", "LOW"],
|
|
511
|
+
"default": "MEDIUM"
|
|
512
|
+
},
|
|
513
|
+
"storeReflections": {
|
|
514
|
+
"type": "boolean",
|
|
515
|
+
"description": "Store reflections to log files",
|
|
516
|
+
"default": true
|
|
517
|
+
},
|
|
518
|
+
"autoCreateFollowUpTasks": {
|
|
519
|
+
"type": "boolean",
|
|
520
|
+
"description": "Automatically create tasks for critical issues",
|
|
521
|
+
"default": false
|
|
522
|
+
},
|
|
523
|
+
"soundNotifications": {
|
|
524
|
+
"type": "boolean",
|
|
525
|
+
"description": "Play sound for critical issues (optional)",
|
|
526
|
+
"default": false
|
|
527
|
+
}
|
|
528
|
+
},
|
|
529
|
+
"additionalProperties": false
|
|
530
|
+
},
|
|
531
|
+
"externalModels": {
|
|
532
|
+
"type": "object",
|
|
533
|
+
"description": "External model API consent configuration. Controls user consent for paid API calls (Anthropic, OpenAI, Azure, etc.)",
|
|
534
|
+
"properties": {
|
|
535
|
+
"consent": {
|
|
536
|
+
"type": "string",
|
|
537
|
+
"description": "Consent mode: ask (prompt user before external API calls), always-allow (skip consent), never (block all external APIs, use fallbacks)",
|
|
538
|
+
"enum": ["ask", "always-allow", "never"],
|
|
539
|
+
"default": "ask"
|
|
540
|
+
},
|
|
541
|
+
"allowedProviders": {
|
|
542
|
+
"type": "array",
|
|
543
|
+
"description": "Providers with standing consent (skip future prompts)",
|
|
544
|
+
"items": {
|
|
545
|
+
"type": "string",
|
|
546
|
+
"enum": ["anthropic", "openai", "azure-openai", "bedrock", "vertex-ai"]
|
|
547
|
+
},
|
|
548
|
+
"uniqueItems": true,
|
|
549
|
+
"default": []
|
|
550
|
+
}
|
|
551
|
+
},
|
|
552
|
+
"additionalProperties": false
|
|
553
|
+
},
|
|
554
|
+
"tasks": {
|
|
555
|
+
"type": "object",
|
|
556
|
+
"description": "Task-ledger settings (2.0)",
|
|
557
|
+
"properties": {
|
|
558
|
+
"leaseHours": {
|
|
559
|
+
"type": "number",
|
|
560
|
+
"minimum": 0,
|
|
561
|
+
"default": 2,
|
|
562
|
+
"description": "Hours before an unfinished task claim goes stale and may be taken over"
|
|
563
|
+
}
|
|
564
|
+
}
|
|
565
|
+
},
|
|
566
|
+
"testing": {
|
|
567
|
+
"type": "object",
|
|
568
|
+
"description": "Testing configuration including TDD mode, coverage targets, and browser automation",
|
|
569
|
+
"properties": {
|
|
570
|
+
"defaultTestMode": {
|
|
571
|
+
"type": "string",
|
|
572
|
+
"description": "Default test mode for new increments",
|
|
573
|
+
"enum": ["TDD", "test-first", "test-after"],
|
|
574
|
+
"default": "test-after"
|
|
575
|
+
},
|
|
576
|
+
"defaultCoverageTarget": {
|
|
577
|
+
"type": "number",
|
|
578
|
+
"description": "Default code coverage target percentage",
|
|
579
|
+
"minimum": 0,
|
|
580
|
+
"maximum": 100,
|
|
581
|
+
"default": 80
|
|
582
|
+
},
|
|
583
|
+
"coverageTargets": {
|
|
584
|
+
"type": "object",
|
|
585
|
+
"description": "Per-level coverage targets",
|
|
586
|
+
"properties": {
|
|
587
|
+
"unit": {
|
|
588
|
+
"type": "number",
|
|
589
|
+
"description": "Unit test line coverage target (Istanbul/c8 percentage)",
|
|
590
|
+
"minimum": 0,
|
|
591
|
+
"maximum": 100,
|
|
592
|
+
"default": 80
|
|
593
|
+
},
|
|
594
|
+
"integration": {
|
|
595
|
+
"type": "number",
|
|
596
|
+
"description": "Integration test line coverage target (Istanbul/c8 percentage)",
|
|
597
|
+
"minimum": 0,
|
|
598
|
+
"maximum": 100,
|
|
599
|
+
"default": 70
|
|
600
|
+
},
|
|
601
|
+
"e2e": {
|
|
602
|
+
"type": "number",
|
|
603
|
+
"description": "E2E test pass-rate target (percentage of written Playwright tests that must pass, not line coverage)",
|
|
604
|
+
"minimum": 0,
|
|
605
|
+
"maximum": 100,
|
|
606
|
+
"default": 100
|
|
607
|
+
}
|
|
608
|
+
},
|
|
609
|
+
"additionalProperties": false
|
|
610
|
+
},
|
|
611
|
+
"tddEnforcement": {
|
|
612
|
+
"type": "string",
|
|
613
|
+
"description": "TDD enforcement level: strict blocks GREEN without RED, warn shows warning, off disables",
|
|
614
|
+
"enum": ["strict", "warn", "off"],
|
|
615
|
+
"default": "warn"
|
|
616
|
+
},
|
|
617
|
+
"playwright": {
|
|
618
|
+
"type": "object",
|
|
619
|
+
"description": "Playwright browser automation configuration for dual-mode (CLI vs MCP)",
|
|
620
|
+
"properties": {
|
|
621
|
+
"preferCli": {
|
|
622
|
+
"type": "boolean",
|
|
623
|
+
"description": "Prefer @playwright/cli over MCP plugin for automation tasks (98% token reduction). Set false to always use MCP.",
|
|
624
|
+
"default": true
|
|
625
|
+
},
|
|
626
|
+
"cliFlags": {
|
|
627
|
+
"type": "array",
|
|
628
|
+
"description": "Additional flags to pass to playwright-cli commands",
|
|
629
|
+
"items": {
|
|
630
|
+
"type": "string"
|
|
631
|
+
}
|
|
632
|
+
}
|
|
633
|
+
},
|
|
634
|
+
"additionalProperties": false
|
|
635
|
+
}
|
|
636
|
+
},
|
|
637
|
+
"additionalProperties": false
|
|
638
|
+
},
|
|
639
|
+
"sync": { "$ref": "./sync.schema.json" },
|
|
640
|
+
"livingDocs": {
|
|
641
|
+
"type": "object",
|
|
642
|
+
"description": "Living documentation sync configuration (v0.18.0+)",
|
|
643
|
+
"properties": {
|
|
644
|
+
"intelligent": {
|
|
645
|
+
"type": "object",
|
|
646
|
+
"description": "Intelligent living docs sync - automatically classify and distribute spec content",
|
|
647
|
+
"properties": {
|
|
648
|
+
"enabled": {
|
|
649
|
+
"type": "boolean",
|
|
650
|
+
"description": "Enable intelligent sync mode (parse, classify, distribute). If false, uses simple copy mode.",
|
|
651
|
+
"default": false
|
|
652
|
+
},
|
|
653
|
+
"splitByCategory": {
|
|
654
|
+
"type": "boolean",
|
|
655
|
+
"description": "Split spec into separate files by category (User Stories, Architecture, Operations, etc.)",
|
|
656
|
+
"default": true
|
|
657
|
+
},
|
|
658
|
+
"generateCrossLinks": {
|
|
659
|
+
"type": "boolean",
|
|
660
|
+
"description": "Generate cross-references between related documents for traceability",
|
|
661
|
+
"default": true
|
|
662
|
+
},
|
|
663
|
+
"preserveOriginal": {
|
|
664
|
+
"type": "boolean",
|
|
665
|
+
"description": "Keep original monolithic spec.md in archive folder for reference",
|
|
666
|
+
"default": true
|
|
667
|
+
},
|
|
668
|
+
"classificationConfidenceThreshold": {
|
|
669
|
+
"type": "number",
|
|
670
|
+
"description": "Minimum confidence (0.0-1.0) for automatic classification. Sections below threshold go to Unknown category.",
|
|
671
|
+
"minimum": 0,
|
|
672
|
+
"maximum": 1,
|
|
673
|
+
"default": 0.6
|
|
674
|
+
},
|
|
675
|
+
"fallbackProject": {
|
|
676
|
+
"type": "string",
|
|
677
|
+
"description": "Default project ID when project cannot be detected from increment name/metadata",
|
|
678
|
+
"default": "default",
|
|
679
|
+
"minLength": 1,
|
|
680
|
+
"maxLength": 64,
|
|
681
|
+
"pattern": "^[a-z0-9-]+$"
|
|
682
|
+
}
|
|
683
|
+
},
|
|
684
|
+
"additionalProperties": false
|
|
685
|
+
}
|
|
686
|
+
},
|
|
687
|
+
"additionalProperties": false
|
|
688
|
+
},
|
|
689
|
+
"workspace": { "$ref": "./workspace.schema.json" },
|
|
690
|
+
"projectMappings": {
|
|
691
|
+
"type": "object",
|
|
692
|
+
"description": "DEPRECATED: Use workspace.repos[].sync instead. Cross-project targeting (v0.33.0+).",
|
|
693
|
+
"patternProperties": {
|
|
694
|
+
"^[a-z0-9-]+$": {
|
|
695
|
+
"type": "object",
|
|
696
|
+
"description": "External tool mappings for a project",
|
|
697
|
+
"properties": {
|
|
698
|
+
"github": {
|
|
699
|
+
"type": "object",
|
|
700
|
+
"description": "GitHub repository mapping",
|
|
701
|
+
"properties": {
|
|
702
|
+
"owner": {
|
|
703
|
+
"type": "string",
|
|
704
|
+
"description": "GitHub owner (org or user)",
|
|
705
|
+
"minLength": 1
|
|
706
|
+
},
|
|
707
|
+
"repo": {
|
|
708
|
+
"type": "string",
|
|
709
|
+
"description": "GitHub repository name",
|
|
710
|
+
"minLength": 1
|
|
711
|
+
}
|
|
712
|
+
},
|
|
713
|
+
"required": ["owner", "repo"],
|
|
714
|
+
"additionalProperties": false
|
|
715
|
+
},
|
|
716
|
+
"jira": {
|
|
717
|
+
"type": "object",
|
|
718
|
+
"description": "JIRA project mapping",
|
|
719
|
+
"properties": {
|
|
720
|
+
"project": {
|
|
721
|
+
"type": "string",
|
|
722
|
+
"description": "JIRA project key (e.g., 'FE', 'BE', 'SECURITY')",
|
|
723
|
+
"minLength": 1
|
|
724
|
+
},
|
|
725
|
+
"board": {
|
|
726
|
+
"type": "string",
|
|
727
|
+
"description": "JIRA board name (for 2-level)",
|
|
728
|
+
"minLength": 1
|
|
729
|
+
}
|
|
730
|
+
},
|
|
731
|
+
"required": ["project"],
|
|
732
|
+
"additionalProperties": false
|
|
733
|
+
},
|
|
734
|
+
"ado": {
|
|
735
|
+
"type": "object",
|
|
736
|
+
"description": "Azure DevOps project mapping",
|
|
737
|
+
"properties": {
|
|
738
|
+
"project": {
|
|
739
|
+
"type": "string",
|
|
740
|
+
"description": "ADO project name",
|
|
741
|
+
"minLength": 1
|
|
742
|
+
},
|
|
743
|
+
"areaPath": {
|
|
744
|
+
"type": "string",
|
|
745
|
+
"description": "ADO area path (e.g., 'infrastructure/security')",
|
|
746
|
+
"minLength": 1
|
|
747
|
+
}
|
|
748
|
+
},
|
|
749
|
+
"required": ["project"],
|
|
750
|
+
"additionalProperties": false
|
|
751
|
+
}
|
|
752
|
+
},
|
|
753
|
+
"additionalProperties": false
|
|
754
|
+
}
|
|
755
|
+
},
|
|
756
|
+
"additionalProperties": false
|
|
757
|
+
},
|
|
758
|
+
"specs": {
|
|
759
|
+
"type": "object",
|
|
760
|
+
"description": "Spec identifier and sync configuration for flexible multi-project architecture (v0.16.0+)",
|
|
761
|
+
"properties": {
|
|
762
|
+
"identifierStrategy": {
|
|
763
|
+
"type": "string",
|
|
764
|
+
"description": "Default identifier strategy for new specs: auto (detect from context), external (JIRA/ADO/GitHub), custom (user-defined), title-slug (from spec title), sequential (001, 002, ...)",
|
|
765
|
+
"enum": ["auto", "external", "custom", "title-slug", "sequential"],
|
|
766
|
+
"default": "auto"
|
|
767
|
+
},
|
|
768
|
+
"preferTitleSlug": {
|
|
769
|
+
"type": "boolean",
|
|
770
|
+
"description": "Prefer title-based slugs over sequential numbers when no external ID exists",
|
|
771
|
+
"default": true
|
|
772
|
+
},
|
|
773
|
+
"minSlugLength": {
|
|
774
|
+
"type": "number",
|
|
775
|
+
"description": "Minimum length for title slugs to be considered valid",
|
|
776
|
+
"minimum": 3,
|
|
777
|
+
"maximum": 20,
|
|
778
|
+
"default": 5
|
|
779
|
+
},
|
|
780
|
+
"projects": {
|
|
781
|
+
"type": "object",
|
|
782
|
+
"description": "Project-specific spec configurations for multi-project sync (backend, frontend, mobile, infra, _parent, etc.)",
|
|
783
|
+
"patternProperties": {
|
|
784
|
+
"^[a-z0-9-_]+$": {
|
|
785
|
+
"type": "object",
|
|
786
|
+
"description": "Project configuration for spec sync",
|
|
787
|
+
"properties": {
|
|
788
|
+
"id": {
|
|
789
|
+
"type": "string",
|
|
790
|
+
"description": "Unique project identifier (must match PROJECT_CODES in spec-identifier.ts: backend, frontend, mobile, infra, _parent, default)",
|
|
791
|
+
"pattern": "^[a-z0-9-_]+$",
|
|
792
|
+
"minLength": 1,
|
|
793
|
+
"maxLength": 64
|
|
794
|
+
},
|
|
795
|
+
"displayName": {
|
|
796
|
+
"type": "string",
|
|
797
|
+
"description": "Human-readable project name",
|
|
798
|
+
"minLength": 1,
|
|
799
|
+
"maxLength": 128
|
|
800
|
+
},
|
|
801
|
+
"description": {
|
|
802
|
+
"type": "string",
|
|
803
|
+
"description": "Project description",
|
|
804
|
+
"maxLength": 512
|
|
805
|
+
},
|
|
806
|
+
"github": {
|
|
807
|
+
"type": ["object", "null"],
|
|
808
|
+
"description": "GitHub repository configuration (null = no sync, e.g., _parent project)",
|
|
809
|
+
"properties": {
|
|
810
|
+
"owner": {
|
|
811
|
+
"type": "string",
|
|
812
|
+
"description": "GitHub repository owner (organization or user)",
|
|
813
|
+
"minLength": 1,
|
|
814
|
+
"maxLength": 128
|
|
815
|
+
},
|
|
816
|
+
"repo": {
|
|
817
|
+
"type": "string",
|
|
818
|
+
"description": "GitHub repository name",
|
|
819
|
+
"minLength": 1,
|
|
820
|
+
"maxLength": 128
|
|
821
|
+
}
|
|
822
|
+
},
|
|
823
|
+
"required": ["owner", "repo"],
|
|
824
|
+
"additionalProperties": false
|
|
825
|
+
},
|
|
826
|
+
"defaultLabels": {
|
|
827
|
+
"type": "array",
|
|
828
|
+
"description": "Default labels for GitHub issues created from specs in this project",
|
|
829
|
+
"items": {
|
|
830
|
+
"type": "string",
|
|
831
|
+
"minLength": 1,
|
|
832
|
+
"maxLength": 64
|
|
833
|
+
},
|
|
834
|
+
"default": []
|
|
835
|
+
},
|
|
836
|
+
"team": {
|
|
837
|
+
"type": "string",
|
|
838
|
+
"description": "Team or organization name responsible for this project",
|
|
839
|
+
"maxLength": 128
|
|
840
|
+
},
|
|
841
|
+
"syncEnabled": {
|
|
842
|
+
"type": "boolean",
|
|
843
|
+
"description": "Enable GitHub sync for specs in this project (false = specs remain local-only)",
|
|
844
|
+
"default": true
|
|
845
|
+
}
|
|
846
|
+
},
|
|
847
|
+
"required": ["id", "displayName"],
|
|
848
|
+
"additionalProperties": false
|
|
849
|
+
}
|
|
850
|
+
},
|
|
851
|
+
"additionalProperties": false
|
|
852
|
+
}
|
|
853
|
+
},
|
|
854
|
+
"additionalProperties": false
|
|
855
|
+
},
|
|
856
|
+
"pluginAutoLoad": {
|
|
857
|
+
"type": "object",
|
|
858
|
+
"description": "Plugin auto-load configuration (v1.0.140+). Controls automatic plugin detection using LLM.",
|
|
859
|
+
"properties": {
|
|
860
|
+
"enabled": {
|
|
861
|
+
"type": "boolean",
|
|
862
|
+
"description": "Enable automatic plugin detection and installation. When true, uses Claude Haiku to analyze prompts (~5-6s overhead). When false, disables detection for maximum speed.",
|
|
863
|
+
"default": true
|
|
864
|
+
},
|
|
865
|
+
"suggestOnly": {
|
|
866
|
+
"type": "boolean",
|
|
867
|
+
"description": "When true, detected plugins are suggested with install commands but not auto-installed. User must install manually and restart the session. When false, plugins are installed automatically without asking.",
|
|
868
|
+
"default": true
|
|
869
|
+
}
|
|
870
|
+
},
|
|
871
|
+
"additionalProperties": false
|
|
872
|
+
},
|
|
873
|
+
"incrementAssist": {
|
|
874
|
+
"type": "object",
|
|
875
|
+
"description": "Increment assist configuration (v1.0.141+). Controls intelligent increment creation suggestions using LLM.",
|
|
876
|
+
"properties": {
|
|
877
|
+
"enabled": {
|
|
878
|
+
"type": "boolean",
|
|
879
|
+
"description": "Enable increment creation suggestions. When true, LLM analyzes prompts and suggests creating/reopening increments or proceeding without one. When false, disables suggestions for maximum speed.",
|
|
880
|
+
"default": true
|
|
881
|
+
},
|
|
882
|
+
"suggestNewIncrement": {
|
|
883
|
+
"type": "boolean",
|
|
884
|
+
"description": "Suggest creating new increments for feature work, multi-file changes, new functionality that should be spec'd and tracked.",
|
|
885
|
+
"default": true
|
|
886
|
+
},
|
|
887
|
+
"suggestReopen": {
|
|
888
|
+
"type": "boolean",
|
|
889
|
+
"description": "Suggest reopening existing increments when user mentions work related to recent increments (e.g., 'the login feature is broken').",
|
|
890
|
+
"default": true
|
|
891
|
+
},
|
|
892
|
+
"confidenceThreshold": {
|
|
893
|
+
"type": "number",
|
|
894
|
+
"description": "Minimum confidence threshold (0.0-1.0) for showing suggestions. Higher = fewer but more confident suggestions.",
|
|
895
|
+
"minimum": 0,
|
|
896
|
+
"maximum": 1,
|
|
897
|
+
"default": 0.7
|
|
898
|
+
},
|
|
899
|
+
"mandatory": {
|
|
900
|
+
"type": "boolean",
|
|
901
|
+
"description": "When true, BLOCKS prompts detected as implementation work until an increment is created via sw:increment. Overrides the LLM mandatory decision. Default: true (enforced).",
|
|
902
|
+
"default": true
|
|
903
|
+
}
|
|
904
|
+
},
|
|
905
|
+
"additionalProperties": false
|
|
906
|
+
}
|
|
907
|
+
},
|
|
908
|
+
"additionalProperties": true,
|
|
909
|
+
"examples": [
|
|
910
|
+
{
|
|
911
|
+
"plugins": {
|
|
912
|
+
"enabled": [
|
|
913
|
+
"specweave-github"
|
|
914
|
+
],
|
|
915
|
+
"settings": {
|
|
916
|
+
"specweave-github": {
|
|
917
|
+
"repo": "owner/repo",
|
|
918
|
+
"auto_create_issue": true,
|
|
919
|
+
"auto_update_progress": true,
|
|
920
|
+
"auto_close_issue": true,
|
|
921
|
+
"sync_frequency": "every-task",
|
|
922
|
+
"default_labels": [
|
|
923
|
+
"specweave",
|
|
924
|
+
"increment"
|
|
925
|
+
],
|
|
926
|
+
"milestone": "v1.0.0"
|
|
927
|
+
}
|
|
928
|
+
}
|
|
929
|
+
},
|
|
930
|
+
"project": {
|
|
931
|
+
"name": "my-project",
|
|
932
|
+
"version": "1.0.0",
|
|
933
|
+
"description": "My SpecWeave project"
|
|
934
|
+
},
|
|
935
|
+
"adapters": {
|
|
936
|
+
"default": "claude"
|
|
937
|
+
}
|
|
938
|
+
},
|
|
939
|
+
{
|
|
940
|
+
"plugins": {
|
|
941
|
+
"enabled": [
|
|
942
|
+
"specweave-github",
|
|
943
|
+
"specweave-frontend-stack",
|
|
944
|
+
"specweave-backend-stack"
|
|
945
|
+
],
|
|
946
|
+
"settings": {
|
|
947
|
+
"specweave-github": {
|
|
948
|
+
"repo": "myorg/myapp",
|
|
949
|
+
"auto_create_issue": true,
|
|
950
|
+
"sync_frequency": "every-task"
|
|
951
|
+
},
|
|
952
|
+
"specweave-frontend-stack": {
|
|
953
|
+
"framework": "react",
|
|
954
|
+
"typescript": true,
|
|
955
|
+
"styling": "tailwind"
|
|
956
|
+
},
|
|
957
|
+
"specweave-backend-stack": {
|
|
958
|
+
"language": "typescript",
|
|
959
|
+
"framework": "express",
|
|
960
|
+
"database": "postgresql"
|
|
961
|
+
}
|
|
962
|
+
}
|
|
963
|
+
},
|
|
964
|
+
"project": {
|
|
965
|
+
"name": "full-stack-app",
|
|
966
|
+
"version": "0.1.0"
|
|
967
|
+
}
|
|
968
|
+
},
|
|
969
|
+
{
|
|
970
|
+
"language": "ru",
|
|
971
|
+
"translation": {
|
|
972
|
+
"enabled": true,
|
|
973
|
+
"method": "in-session",
|
|
974
|
+
"autoTranslateInternalDocs": true,
|
|
975
|
+
"autoTranslateLivingDocs": true,
|
|
976
|
+
"keepFrameworkTerms": true,
|
|
977
|
+
"keepTechnicalTerms": true,
|
|
978
|
+
"translateCodeComments": true,
|
|
979
|
+
"translateVariableNames": false,
|
|
980
|
+
"filesAlwaysInEnglish": [
|
|
981
|
+
"spec.md",
|
|
982
|
+
"plan.md",
|
|
983
|
+
"tasks.md",
|
|
984
|
+
"tests.md",
|
|
985
|
+
"docs/internal/**/*.md"
|
|
986
|
+
],
|
|
987
|
+
"translationModel": "haiku"
|
|
988
|
+
},
|
|
989
|
+
"plugins": {
|
|
990
|
+
"enabled": []
|
|
991
|
+
},
|
|
992
|
+
"project": {
|
|
993
|
+
"name": "russian-project",
|
|
994
|
+
"version": "1.0.0"
|
|
995
|
+
}
|
|
996
|
+
},
|
|
997
|
+
{
|
|
998
|
+
"project": {
|
|
999
|
+
"name": "enterprise-project",
|
|
1000
|
+
"version": "2.0.0"
|
|
1001
|
+
},
|
|
1002
|
+
"limits": {
|
|
1003
|
+
"activeIncrements": 1
|
|
1004
|
+
},
|
|
1005
|
+
"plugins": {
|
|
1006
|
+
"enabled": [
|
|
1007
|
+
"specweave-github"
|
|
1008
|
+
]
|
|
1009
|
+
}
|
|
1010
|
+
},
|
|
1011
|
+
{
|
|
1012
|
+
"project": {
|
|
1013
|
+
"name": "multi-project-example",
|
|
1014
|
+
"version": "1.0.0",
|
|
1015
|
+
"description": "Multi-project enterprise setup"
|
|
1016
|
+
},
|
|
1017
|
+
"multiProject": {
|
|
1018
|
+
"enabled": true,
|
|
1019
|
+
"projects": [
|
|
1020
|
+
{
|
|
1021
|
+
"id": "web-app",
|
|
1022
|
+
"name": "Web Application",
|
|
1023
|
+
"description": "Customer-facing web application",
|
|
1024
|
+
"techStack": ["React", "TypeScript", "Node.js", "PostgreSQL"],
|
|
1025
|
+
"team": "Frontend Team",
|
|
1026
|
+
"contacts": {
|
|
1027
|
+
"lead": "lead@example.com",
|
|
1028
|
+
"pm": "pm@example.com"
|
|
1029
|
+
},
|
|
1030
|
+
"syncProfiles": ["web-app-github"]
|
|
1031
|
+
},
|
|
1032
|
+
{
|
|
1033
|
+
"id": "mobile-app",
|
|
1034
|
+
"name": "Mobile Application",
|
|
1035
|
+
"description": "iOS and Android mobile apps",
|
|
1036
|
+
"techStack": ["React Native", "TypeScript", "Firebase"],
|
|
1037
|
+
"team": "Mobile Team",
|
|
1038
|
+
"syncProfiles": ["mobile-jira"]
|
|
1039
|
+
},
|
|
1040
|
+
{
|
|
1041
|
+
"id": "platform-infra",
|
|
1042
|
+
"name": "Platform Infrastructure",
|
|
1043
|
+
"description": "DevOps and infrastructure management",
|
|
1044
|
+
"techStack": ["Terraform", "Kubernetes", "Python"],
|
|
1045
|
+
"team": "Platform Engineering",
|
|
1046
|
+
"syncProfiles": ["platform-ado"]
|
|
1047
|
+
}
|
|
1048
|
+
]
|
|
1049
|
+
},
|
|
1050
|
+
"brownfield": {
|
|
1051
|
+
"importHistory": [
|
|
1052
|
+
{
|
|
1053
|
+
"source": "notion",
|
|
1054
|
+
"workspace": "acme-corp",
|
|
1055
|
+
"importedAt": "2025-11-06T10:30:00Z",
|
|
1056
|
+
"project": "web-app",
|
|
1057
|
+
"filesImported": 47,
|
|
1058
|
+
"destination": ".specweave/docs/internal/projects/web-app/legacy/notion/"
|
|
1059
|
+
}
|
|
1060
|
+
]
|
|
1061
|
+
},
|
|
1062
|
+
"plugins": {
|
|
1063
|
+
"enabled": ["specweave-github"]
|
|
1064
|
+
}
|
|
1065
|
+
},
|
|
1066
|
+
{
|
|
1067
|
+
"project": {
|
|
1068
|
+
"name": "docs-preview-example",
|
|
1069
|
+
"version": "1.0.0",
|
|
1070
|
+
"description": "Project with documentation preview configured"
|
|
1071
|
+
},
|
|
1072
|
+
"documentation": {
|
|
1073
|
+
"preview": {
|
|
1074
|
+
"enabled": true,
|
|
1075
|
+
"autoInstall": false,
|
|
1076
|
+
"port": 3015,
|
|
1077
|
+
"openBrowser": true,
|
|
1078
|
+
"theme": "default",
|
|
1079
|
+
"excludeFolders": ["legacy", "node_modules", "_backlog"]
|
|
1080
|
+
}
|
|
1081
|
+
},
|
|
1082
|
+
"plugins": {
|
|
1083
|
+
"enabled": ["specweave-github", "specweave-frontend"]
|
|
1084
|
+
}
|
|
1085
|
+
},
|
|
1086
|
+
{
|
|
1087
|
+
"project": {
|
|
1088
|
+
"name": "cross-project-example",
|
|
1089
|
+
"version": "1.0.0",
|
|
1090
|
+
"description": "Cross-project targeting with projectMappings (v0.33.0+)"
|
|
1091
|
+
},
|
|
1092
|
+
"projectMappings": {
|
|
1093
|
+
"frontend-app": {
|
|
1094
|
+
"github": {
|
|
1095
|
+
"owner": "myorg",
|
|
1096
|
+
"repo": "frontend-app"
|
|
1097
|
+
},
|
|
1098
|
+
"jira": {
|
|
1099
|
+
"project": "FE",
|
|
1100
|
+
"board": "web-team"
|
|
1101
|
+
}
|
|
1102
|
+
},
|
|
1103
|
+
"backend-api": {
|
|
1104
|
+
"github": {
|
|
1105
|
+
"owner": "myorg",
|
|
1106
|
+
"repo": "backend-api"
|
|
1107
|
+
},
|
|
1108
|
+
"jira": {
|
|
1109
|
+
"project": "BE",
|
|
1110
|
+
"board": "api-team"
|
|
1111
|
+
}
|
|
1112
|
+
},
|
|
1113
|
+
"security-compliance": {
|
|
1114
|
+
"jira": {
|
|
1115
|
+
"project": "SECURITY"
|
|
1116
|
+
}
|
|
1117
|
+
},
|
|
1118
|
+
"infrastructure": {
|
|
1119
|
+
"ado": {
|
|
1120
|
+
"project": "platform",
|
|
1121
|
+
"areaPath": "infrastructure/security"
|
|
1122
|
+
}
|
|
1123
|
+
}
|
|
1124
|
+
},
|
|
1125
|
+
"plugins": {
|
|
1126
|
+
"enabled": ["specweave-github", "specweave-jira"]
|
|
1127
|
+
}
|
|
1128
|
+
}
|
|
1129
|
+
]
|
|
1130
|
+
}
|