specweave 0.28.13 → 0.28.15
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/dist/src/cli/commands/archive.d.ts +0 -1
- package/dist/src/cli/commands/archive.d.ts.map +1 -1
- package/dist/src/cli/commands/archive.js +1 -4
- package/dist/src/cli/commands/archive.js.map +1 -1
- package/dist/src/cli/commands/import-external.d.ts.map +1 -1
- package/dist/src/cli/commands/import-external.js +128 -16
- package/dist/src/cli/commands/import-external.js.map +1 -1
- package/dist/src/cli/commands/init.js +5 -5
- package/dist/src/cli/commands/init.js.map +1 -1
- package/dist/src/cli/helpers/init/external-import.d.ts +3 -1
- package/dist/src/cli/helpers/init/external-import.d.ts.map +1 -1
- package/dist/src/cli/helpers/init/external-import.js +407 -19
- package/dist/src/cli/helpers/init/external-import.js.map +1 -1
- package/dist/src/cli/helpers/init/next-steps.d.ts.map +1 -1
- package/dist/src/cli/helpers/init/next-steps.js +77 -5
- package/dist/src/cli/helpers/init/next-steps.js.map +1 -1
- package/dist/src/cli/helpers/init/smart-reinit.d.ts +2 -0
- package/dist/src/cli/helpers/init/smart-reinit.d.ts.map +1 -1
- package/dist/src/cli/helpers/init/smart-reinit.js +371 -36
- package/dist/src/cli/helpers/init/smart-reinit.js.map +1 -1
- package/dist/src/cli/helpers/init/testing-config.d.ts +5 -2
- package/dist/src/cli/helpers/init/testing-config.d.ts.map +1 -1
- package/dist/src/cli/helpers/init/testing-config.js +322 -31
- package/dist/src/cli/helpers/init/testing-config.js.map +1 -1
- package/dist/src/core/feature-deleter/validator.d.ts +1 -0
- package/dist/src/core/feature-deleter/validator.d.ts.map +1 -1
- package/dist/src/core/feature-deleter/validator.js +8 -10
- package/dist/src/core/feature-deleter/validator.js.map +1 -1
- package/dist/src/core/increment/increment-archiver.d.ts.map +1 -1
- package/dist/src/core/increment/increment-archiver.js +12 -5
- package/dist/src/core/increment/increment-archiver.js.map +1 -1
- package/dist/src/core/living-docs/feature-archiver.d.ts +25 -3
- package/dist/src/core/living-docs/feature-archiver.d.ts.map +1 -1
- package/dist/src/core/living-docs/feature-archiver.js +131 -129
- package/dist/src/core/living-docs/feature-archiver.js.map +1 -1
- package/dist/src/core/living-docs/feature-consistency-validator.d.ts +23 -22
- package/dist/src/core/living-docs/feature-consistency-validator.d.ts.map +1 -1
- package/dist/src/core/living-docs/feature-consistency-validator.js +68 -150
- package/dist/src/core/living-docs/feature-consistency-validator.js.map +1 -1
- package/dist/src/core/living-docs/feature-id-manager.d.ts +5 -1
- package/dist/src/core/living-docs/feature-id-manager.d.ts.map +1 -1
- package/dist/src/core/living-docs/feature-id-manager.js +43 -23
- package/dist/src/core/living-docs/feature-id-manager.js.map +1 -1
- package/dist/src/core/living-docs/hierarchy-mapper.d.ts +21 -12
- package/dist/src/core/living-docs/hierarchy-mapper.d.ts.map +1 -1
- package/dist/src/core/living-docs/hierarchy-mapper.js +89 -70
- package/dist/src/core/living-docs/hierarchy-mapper.js.map +1 -1
- package/dist/src/core/living-docs/living-docs-sync.d.ts +10 -11
- package/dist/src/core/living-docs/living-docs-sync.d.ts.map +1 -1
- package/dist/src/core/living-docs/living-docs-sync.js +24 -56
- package/dist/src/core/living-docs/living-docs-sync.js.map +1 -1
- package/dist/src/core/repo-structure/repo-bulk-discovery.d.ts +1 -1
- package/dist/src/core/repo-structure/repo-bulk-discovery.d.ts.map +1 -1
- package/dist/src/core/repo-structure/repo-bulk-discovery.js +168 -126
- package/dist/src/core/repo-structure/repo-bulk-discovery.js.map +1 -1
- package/dist/src/core/spec-detector.js +2 -2
- package/dist/src/core/spec-detector.js.map +1 -1
- package/dist/src/importers/duplicate-detector.d.ts +6 -0
- package/dist/src/importers/duplicate-detector.d.ts.map +1 -1
- package/dist/src/importers/duplicate-detector.js +8 -2
- package/dist/src/importers/duplicate-detector.js.map +1 -1
- package/dist/src/importers/external-importer.d.ts +6 -0
- package/dist/src/importers/external-importer.d.ts.map +1 -1
- package/dist/src/importers/import-coordinator.d.ts +38 -2
- package/dist/src/importers/import-coordinator.d.ts.map +1 -1
- package/dist/src/importers/import-coordinator.js +142 -5
- package/dist/src/importers/import-coordinator.js.map +1 -1
- package/dist/src/importers/item-converter.d.ts +39 -1
- package/dist/src/importers/item-converter.d.ts.map +1 -1
- package/dist/src/importers/item-converter.js +202 -24
- package/dist/src/importers/item-converter.js.map +1 -1
- package/dist/src/living-docs/fs-id-allocator.d.ts +9 -2
- package/dist/src/living-docs/fs-id-allocator.d.ts.map +1 -1
- package/dist/src/living-docs/fs-id-allocator.js +24 -10
- package/dist/src/living-docs/fs-id-allocator.js.map +1 -1
- package/dist/src/sync/sync-metadata.d.ts.map +1 -1
- package/dist/src/sync/sync-metadata.js +31 -2
- package/dist/src/sync/sync-metadata.js.map +1 -1
- package/dist/src/utils/project-detection.d.ts +13 -10
- package/dist/src/utils/project-detection.d.ts.map +1 -1
- package/dist/src/utils/project-detection.js +26 -11
- package/dist/src/utils/project-detection.js.map +1 -1
- package/package.json +1 -1
- package/plugins/specweave/agents/AGENTS-INDEX.md +0 -9
- package/plugins/specweave-github/hooks/.specweave/logs/hooks-debug.log +12 -0
- package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +18 -0
|
@@ -6,47 +6,336 @@ import * as fs from '../../../utils/fs-native.js';
|
|
|
6
6
|
import * as path from 'path';
|
|
7
7
|
import chalk from 'chalk';
|
|
8
8
|
import { select, input } from '@inquirer/prompts';
|
|
9
|
+
/**
|
|
10
|
+
* Get translated strings for testing configuration
|
|
11
|
+
*/
|
|
12
|
+
function getTestingStrings(language) {
|
|
13
|
+
const strings = {
|
|
14
|
+
en: {
|
|
15
|
+
header: '🧪 Testing Configuration',
|
|
16
|
+
subheader: 'Configure your default testing approach and coverage targets',
|
|
17
|
+
guidance: '💡 Which testing approach should you choose?',
|
|
18
|
+
tddTitle: '✓ TDD (Test-Driven Development)',
|
|
19
|
+
tddBestFor: 'Best for: Complex business logic, critical features, refactoring',
|
|
20
|
+
tddBenefits: 'Benefits: Better design, fewer bugs, confidence in changes',
|
|
21
|
+
tddTradeoff: 'Tradeoff: Slower initial development, requires discipline',
|
|
22
|
+
testAfterTitle: '✓ Test-After',
|
|
23
|
+
testAfterBestFor: 'Best for: Most projects, rapid prototyping, exploratory work',
|
|
24
|
+
testAfterBenefits: 'Benefits: Fast iteration, flexible design, good coverage',
|
|
25
|
+
testAfterTradeoff: 'Tradeoff: May miss edge cases, harder to test after design',
|
|
26
|
+
manualTitle: '✓ Manual Testing',
|
|
27
|
+
manualBestFor: 'Best for: Quick prototypes, proof-of-concepts, learning',
|
|
28
|
+
manualBenefits: 'Benefits: Fastest development, no test maintenance',
|
|
29
|
+
manualTradeoff: 'Tradeoff: No safety net, regressions, hard to refactor',
|
|
30
|
+
selectApproach: 'Select your testing approach:',
|
|
31
|
+
tddOption: '🔴 TDD - Write tests first (recommended for production apps)',
|
|
32
|
+
testAfterOption: '🔵 Test-After - Implement first, test later (balanced approach)',
|
|
33
|
+
manualOption: '🟡 Manual - No automated tests (prototypes only)',
|
|
34
|
+
selectCoverage: 'Select your coverage target level:',
|
|
35
|
+
coverage70: '70% - Acceptable (core paths covered)',
|
|
36
|
+
coverage80: '80% - Good (recommended - most paths covered)',
|
|
37
|
+
coverage90: '90% - Excellent (comprehensive coverage)',
|
|
38
|
+
coverageCustom: 'Custom (enter your own value)',
|
|
39
|
+
enterCustom: 'Enter custom coverage target (70-95):',
|
|
40
|
+
coverageValidation: 'Coverage target must be between 70% and 95%',
|
|
41
|
+
selectedTesting: '✔ Testing:',
|
|
42
|
+
selectedCoverage: '✔ Coverage Target:',
|
|
43
|
+
configNotFound: '⚠️ config.json not found, cannot update testing configuration',
|
|
44
|
+
},
|
|
45
|
+
ru: {
|
|
46
|
+
header: '🧪 Конфигурация тестирования',
|
|
47
|
+
subheader: 'Настройте подход к тестированию по умолчанию и целевые показатели покрытия',
|
|
48
|
+
guidance: '💡 Какой подход к тестированию выбрать?',
|
|
49
|
+
tddTitle: '✓ TDD (Разработка через тестирование)',
|
|
50
|
+
tddBestFor: 'Подходит для: Сложной бизнес-логики, критических функций, рефакторинга',
|
|
51
|
+
tddBenefits: 'Преимущества: Лучший дизайн, меньше багов, уверенность в изменениях',
|
|
52
|
+
tddTradeoff: 'Компромисс: Медленная начальная разработка, требует дисциплины',
|
|
53
|
+
testAfterTitle: '✓ Test-After (Тестирование после)',
|
|
54
|
+
testAfterBestFor: 'Подходит для: Большинства проектов, быстрого прототипирования, исследований',
|
|
55
|
+
testAfterBenefits: 'Преимущества: Быстрая итерация, гибкий дизайн, хорошее покрытие',
|
|
56
|
+
testAfterTradeoff: 'Компромисс: Могут быть упущены крайние случаи, сложнее тестировать после проектирования',
|
|
57
|
+
manualTitle: '✓ Ручное тестирование',
|
|
58
|
+
manualBestFor: 'Подходит для: Быстрых прототипов, проверки концепций, обучения',
|
|
59
|
+
manualBenefits: 'Преимущества: Самая быстрая разработка, нет поддержки тестов',
|
|
60
|
+
manualTradeoff: 'Компромисс: Нет страховки, регрессии, сложно рефакторить',
|
|
61
|
+
selectApproach: 'Выберите подход к тестированию:',
|
|
62
|
+
tddOption: '🔴 TDD - Сначала тесты (рекомендуется для production)',
|
|
63
|
+
testAfterOption: '🔵 Test-After - Сначала код, потом тесты (сбалансированный)',
|
|
64
|
+
manualOption: '🟡 Ручное - Без автоматических тестов (только прототипы)',
|
|
65
|
+
selectCoverage: 'Выберите целевой уровень покрытия:',
|
|
66
|
+
coverage70: '70% - Приемлемо (основные пути покрыты)',
|
|
67
|
+
coverage80: '80% - Хорошо (рекомендуется - большинство путей покрыто)',
|
|
68
|
+
coverage90: '90% - Отлично (полное покрытие)',
|
|
69
|
+
coverageCustom: 'Свое значение (введите вручную)',
|
|
70
|
+
enterCustom: 'Введите целевое покрытие (70-95):',
|
|
71
|
+
coverageValidation: 'Целевое покрытие должно быть между 70% и 95%',
|
|
72
|
+
selectedTesting: '✔ Тестирование:',
|
|
73
|
+
selectedCoverage: '✔ Целевое покрытие:',
|
|
74
|
+
configNotFound: '⚠️ config.json не найден, невозможно обновить конфигурацию тестирования',
|
|
75
|
+
},
|
|
76
|
+
es: {
|
|
77
|
+
header: '🧪 Configuración de pruebas',
|
|
78
|
+
subheader: 'Configure su enfoque de pruebas predeterminado y objetivos de cobertura',
|
|
79
|
+
guidance: '💡 ¿Qué enfoque de pruebas debería elegir?',
|
|
80
|
+
tddTitle: '✓ TDD (Desarrollo Guiado por Pruebas)',
|
|
81
|
+
tddBestFor: 'Mejor para: Lógica de negocio compleja, funciones críticas, refactorización',
|
|
82
|
+
tddBenefits: 'Beneficios: Mejor diseño, menos errores, confianza en los cambios',
|
|
83
|
+
tddTradeoff: 'Compensación: Desarrollo inicial más lento, requiere disciplina',
|
|
84
|
+
testAfterTitle: '✓ Test-After (Pruebas después)',
|
|
85
|
+
testAfterBestFor: 'Mejor para: La mayoría de proyectos, prototipado rápido, trabajo exploratorio',
|
|
86
|
+
testAfterBenefits: 'Beneficios: Iteración rápida, diseño flexible, buena cobertura',
|
|
87
|
+
testAfterTradeoff: 'Compensación: Puede perder casos límite, más difícil probar después del diseño',
|
|
88
|
+
manualTitle: '✓ Pruebas manuales',
|
|
89
|
+
manualBestFor: 'Mejor para: Prototipos rápidos, pruebas de concepto, aprendizaje',
|
|
90
|
+
manualBenefits: 'Beneficios: Desarrollo más rápido, sin mantenimiento de pruebas',
|
|
91
|
+
manualTradeoff: 'Compensación: Sin red de seguridad, regresiones, difícil refactorizar',
|
|
92
|
+
selectApproach: 'Seleccione su enfoque de pruebas:',
|
|
93
|
+
tddOption: '🔴 TDD - Escribir pruebas primero (recomendado para producción)',
|
|
94
|
+
testAfterOption: '🔵 Test-After - Implementar primero, probar después (enfoque equilibrado)',
|
|
95
|
+
manualOption: '🟡 Manual - Sin pruebas automatizadas (solo prototipos)',
|
|
96
|
+
selectCoverage: 'Seleccione su nivel de cobertura objetivo:',
|
|
97
|
+
coverage70: '70% - Aceptable (rutas principales cubiertas)',
|
|
98
|
+
coverage80: '80% - Bueno (recomendado - mayoría de rutas cubiertas)',
|
|
99
|
+
coverage90: '90% - Excelente (cobertura completa)',
|
|
100
|
+
coverageCustom: 'Personalizado (ingrese su propio valor)',
|
|
101
|
+
enterCustom: 'Ingrese cobertura objetivo personalizada (70-95):',
|
|
102
|
+
coverageValidation: 'La cobertura objetivo debe estar entre 70% y 95%',
|
|
103
|
+
selectedTesting: '✔ Pruebas:',
|
|
104
|
+
selectedCoverage: '✔ Cobertura objetivo:',
|
|
105
|
+
configNotFound: '⚠️ config.json no encontrado, no se puede actualizar la configuración de pruebas',
|
|
106
|
+
},
|
|
107
|
+
zh: {
|
|
108
|
+
header: '🧪 测试配置',
|
|
109
|
+
subheader: '配置默认测试方法和覆盖率目标',
|
|
110
|
+
guidance: '💡 应该选择哪种测试方法?',
|
|
111
|
+
tddTitle: '✓ TDD(测试驱动开发)',
|
|
112
|
+
tddBestFor: '适用于:复杂业务逻辑、关键功能、重构',
|
|
113
|
+
tddBenefits: '优点:更好的设计、更少的bug、对变更有信心',
|
|
114
|
+
tddTradeoff: '权衡:初期开发较慢、需要纪律',
|
|
115
|
+
testAfterTitle: '✓ 后置测试',
|
|
116
|
+
testAfterBestFor: '适用于:大多数项目、快速原型、探索性工作',
|
|
117
|
+
testAfterBenefits: '优点:快速迭代、灵活设计、良好覆盖',
|
|
118
|
+
testAfterTradeoff: '权衡:可能遗漏边缘情况、设计后测试更难',
|
|
119
|
+
manualTitle: '✓ 手动测试',
|
|
120
|
+
manualBestFor: '适用于:快速原型、概念验证、学习',
|
|
121
|
+
manualBenefits: '优点:最快开发、无测试维护',
|
|
122
|
+
manualTradeoff: '权衡:无安全网、会有回归、难以重构',
|
|
123
|
+
selectApproach: '选择您的测试方法:',
|
|
124
|
+
tddOption: '🔴 TDD - 先写测试(推荐用于生产应用)',
|
|
125
|
+
testAfterOption: '🔵 后置测试 - 先实现后测试(平衡方法)',
|
|
126
|
+
manualOption: '🟡 手动 - 无自动化测试(仅限原型)',
|
|
127
|
+
selectCoverage: '选择您的覆盖率目标级别:',
|
|
128
|
+
coverage70: '70% - 可接受(核心路径已覆盖)',
|
|
129
|
+
coverage80: '80% - 良好(推荐 - 大多数路径已覆盖)',
|
|
130
|
+
coverage90: '90% - 优秀(全面覆盖)',
|
|
131
|
+
coverageCustom: '自定义(输入您自己的值)',
|
|
132
|
+
enterCustom: '输入自定义覆盖率目标(70-95):',
|
|
133
|
+
coverageValidation: '覆盖率目标必须在70%到95%之间',
|
|
134
|
+
selectedTesting: '✔ 测试:',
|
|
135
|
+
selectedCoverage: '✔ 覆盖率目标:',
|
|
136
|
+
configNotFound: '⚠️ 未找到config.json,无法更新测试配置',
|
|
137
|
+
},
|
|
138
|
+
de: {
|
|
139
|
+
header: '🧪 Test-Konfiguration',
|
|
140
|
+
subheader: 'Konfigurieren Sie Ihren Standard-Testansatz und Abdeckungsziele',
|
|
141
|
+
guidance: '💡 Welchen Testansatz sollten Sie wählen?',
|
|
142
|
+
tddTitle: '✓ TDD (Testgetriebene Entwicklung)',
|
|
143
|
+
tddBestFor: 'Am besten für: Komplexe Geschäftslogik, kritische Funktionen, Refactoring',
|
|
144
|
+
tddBenefits: 'Vorteile: Besseres Design, weniger Fehler, Vertrauen in Änderungen',
|
|
145
|
+
tddTradeoff: 'Kompromiss: Langsamere anfängliche Entwicklung, erfordert Disziplin',
|
|
146
|
+
testAfterTitle: '✓ Test-After',
|
|
147
|
+
testAfterBestFor: 'Am besten für: Die meisten Projekte, schnelles Prototyping, explorative Arbeit',
|
|
148
|
+
testAfterBenefits: 'Vorteile: Schnelle Iteration, flexibles Design, gute Abdeckung',
|
|
149
|
+
testAfterTradeoff: 'Kompromiss: Kann Randfälle übersehen, schwieriger nach dem Design zu testen',
|
|
150
|
+
manualTitle: '✓ Manuelles Testen',
|
|
151
|
+
manualBestFor: 'Am besten für: Schnelle Prototypen, Proof-of-Concepts, Lernen',
|
|
152
|
+
manualBenefits: 'Vorteile: Schnellste Entwicklung, keine Testwartung',
|
|
153
|
+
manualTradeoff: 'Kompromiss: Kein Sicherheitsnetz, Regressionen, schwer zu refaktorieren',
|
|
154
|
+
selectApproach: 'Wählen Sie Ihren Testansatz:',
|
|
155
|
+
tddOption: '🔴 TDD - Zuerst Tests schreiben (empfohlen für Produktions-Apps)',
|
|
156
|
+
testAfterOption: '🔵 Test-After - Erst implementieren, dann testen (ausgewogener Ansatz)',
|
|
157
|
+
manualOption: '🟡 Manuell - Keine automatisierten Tests (nur Prototypen)',
|
|
158
|
+
selectCoverage: 'Wählen Sie Ihr Abdeckungsziel:',
|
|
159
|
+
coverage70: '70% - Akzeptabel (Kernpfade abgedeckt)',
|
|
160
|
+
coverage80: '80% - Gut (empfohlen - die meisten Pfade abgedeckt)',
|
|
161
|
+
coverage90: '90% - Exzellent (umfassende Abdeckung)',
|
|
162
|
+
coverageCustom: 'Benutzerdefiniert (eigenen Wert eingeben)',
|
|
163
|
+
enterCustom: 'Geben Sie ein benutzerdefiniertes Abdeckungsziel ein (70-95):',
|
|
164
|
+
coverageValidation: 'Abdeckungsziel muss zwischen 70% und 95% liegen',
|
|
165
|
+
selectedTesting: '✔ Testen:',
|
|
166
|
+
selectedCoverage: '✔ Abdeckungsziel:',
|
|
167
|
+
configNotFound: '⚠️ config.json nicht gefunden, kann Testkonfiguration nicht aktualisieren',
|
|
168
|
+
},
|
|
169
|
+
fr: {
|
|
170
|
+
header: '🧪 Configuration des tests',
|
|
171
|
+
subheader: 'Configurez votre approche de test par défaut et vos objectifs de couverture',
|
|
172
|
+
guidance: '💡 Quelle approche de test devriez-vous choisir ?',
|
|
173
|
+
tddTitle: '✓ TDD (Développement Piloté par les Tests)',
|
|
174
|
+
tddBestFor: 'Idéal pour : Logique métier complexe, fonctionnalités critiques, refactoring',
|
|
175
|
+
tddBenefits: 'Avantages : Meilleur design, moins de bugs, confiance dans les changements',
|
|
176
|
+
tddTradeoff: 'Compromis : Développement initial plus lent, nécessite de la discipline',
|
|
177
|
+
testAfterTitle: '✓ Test-After',
|
|
178
|
+
testAfterBestFor: 'Idéal pour : La plupart des projets, prototypage rapide, travail exploratoire',
|
|
179
|
+
testAfterBenefits: 'Avantages : Itération rapide, design flexible, bonne couverture',
|
|
180
|
+
testAfterTradeoff: 'Compromis : Peut manquer des cas limites, plus difficile à tester après la conception',
|
|
181
|
+
manualTitle: '✓ Tests manuels',
|
|
182
|
+
manualBestFor: 'Idéal pour : Prototypes rapides, preuves de concept, apprentissage',
|
|
183
|
+
manualBenefits: 'Avantages : Développement le plus rapide, pas de maintenance des tests',
|
|
184
|
+
manualTradeoff: 'Compromis : Pas de filet de sécurité, régressions, difficile à refactorer',
|
|
185
|
+
selectApproach: 'Sélectionnez votre approche de test :',
|
|
186
|
+
tddOption: '🔴 TDD - Écrire les tests en premier (recommandé pour la production)',
|
|
187
|
+
testAfterOption: '🔵 Test-After - Implémenter d\'abord, tester ensuite (approche équilibrée)',
|
|
188
|
+
manualOption: '🟡 Manuel - Pas de tests automatisés (prototypes uniquement)',
|
|
189
|
+
selectCoverage: 'Sélectionnez votre niveau de couverture cible :',
|
|
190
|
+
coverage70: '70% - Acceptable (chemins principaux couverts)',
|
|
191
|
+
coverage80: '80% - Bon (recommandé - la plupart des chemins couverts)',
|
|
192
|
+
coverage90: '90% - Excellent (couverture complète)',
|
|
193
|
+
coverageCustom: 'Personnalisé (entrez votre propre valeur)',
|
|
194
|
+
enterCustom: 'Entrez une couverture cible personnalisée (70-95) :',
|
|
195
|
+
coverageValidation: 'La couverture cible doit être entre 70% et 95%',
|
|
196
|
+
selectedTesting: '✔ Tests :',
|
|
197
|
+
selectedCoverage: '✔ Couverture cible :',
|
|
198
|
+
configNotFound: '⚠️ config.json non trouvé, impossible de mettre à jour la configuration des tests',
|
|
199
|
+
},
|
|
200
|
+
ja: {
|
|
201
|
+
header: '🧪 テスト設定',
|
|
202
|
+
subheader: 'デフォルトのテストアプローチとカバレッジ目標を設定します',
|
|
203
|
+
guidance: '💡 どのテストアプローチを選ぶべきですか?',
|
|
204
|
+
tddTitle: '✓ TDD(テスト駆動開発)',
|
|
205
|
+
tddBestFor: '最適:複雑なビジネスロジック、重要な機能、リファクタリング',
|
|
206
|
+
tddBenefits: '利点:より良い設計、バグ減少、変更への自信',
|
|
207
|
+
tddTradeoff: 'トレードオフ:初期開発が遅い、規律が必要',
|
|
208
|
+
testAfterTitle: '✓ テスト後付け',
|
|
209
|
+
testAfterBestFor: '最適:ほとんどのプロジェクト、高速プロトタイピング、探索的作業',
|
|
210
|
+
testAfterBenefits: '利点:高速イテレーション、柔軟な設計、良好なカバレッジ',
|
|
211
|
+
testAfterTradeoff: 'トレードオフ:エッジケースを見逃す可能性、設計後のテストが難しい',
|
|
212
|
+
manualTitle: '✓ 手動テスト',
|
|
213
|
+
manualBestFor: '最適:クイックプロトタイプ、概念実証、学習',
|
|
214
|
+
manualBenefits: '利点:最速の開発、テストメンテナンス不要',
|
|
215
|
+
manualTradeoff: 'トレードオフ:セーフティネットなし、回帰、リファクタリング困難',
|
|
216
|
+
selectApproach: 'テストアプローチを選択してください:',
|
|
217
|
+
tddOption: '🔴 TDD - テストを先に書く(本番アプリに推奨)',
|
|
218
|
+
testAfterOption: '🔵 テスト後付け - 先に実装、後でテスト(バランスのとれたアプローチ)',
|
|
219
|
+
manualOption: '🟡 手動 - 自動テストなし(プロトタイプのみ)',
|
|
220
|
+
selectCoverage: 'カバレッジ目標レベルを選択してください:',
|
|
221
|
+
coverage70: '70% - 許容範囲(コアパスをカバー)',
|
|
222
|
+
coverage80: '80% - 良好(推奨 - ほとんどのパスをカバー)',
|
|
223
|
+
coverage90: '90% - 優秀(包括的カバレッジ)',
|
|
224
|
+
coverageCustom: 'カスタム(独自の値を入力)',
|
|
225
|
+
enterCustom: 'カスタムカバレッジ目標を入力(70-95):',
|
|
226
|
+
coverageValidation: 'カバレッジ目標は70%から95%の間でなければなりません',
|
|
227
|
+
selectedTesting: '✔ テスト:',
|
|
228
|
+
selectedCoverage: '✔ カバレッジ目標:',
|
|
229
|
+
configNotFound: '⚠️ config.jsonが見つかりません。テスト設定を更新できません',
|
|
230
|
+
},
|
|
231
|
+
ko: {
|
|
232
|
+
header: '🧪 테스트 구성',
|
|
233
|
+
subheader: '기본 테스트 접근 방식과 커버리지 목표를 구성합니다',
|
|
234
|
+
guidance: '💡 어떤 테스트 접근 방식을 선택해야 할까요?',
|
|
235
|
+
tddTitle: '✓ TDD (테스트 주도 개발)',
|
|
236
|
+
tddBestFor: '적합: 복잡한 비즈니스 로직, 중요 기능, 리팩토링',
|
|
237
|
+
tddBenefits: '장점: 더 나은 설계, 적은 버그, 변경에 대한 자신감',
|
|
238
|
+
tddTradeoff: '단점: 초기 개발이 느림, 규율 필요',
|
|
239
|
+
testAfterTitle: '✓ 테스트 후행',
|
|
240
|
+
testAfterBestFor: '적합: 대부분의 프로젝트, 빠른 프로토타이핑, 탐색적 작업',
|
|
241
|
+
testAfterBenefits: '장점: 빠른 반복, 유연한 설계, 좋은 커버리지',
|
|
242
|
+
testAfterTradeoff: '단점: 엣지 케이스 누락 가능, 설계 후 테스트 어려움',
|
|
243
|
+
manualTitle: '✓ 수동 테스트',
|
|
244
|
+
manualBestFor: '적합: 빠른 프로토타입, 개념 증명, 학습',
|
|
245
|
+
manualBenefits: '장점: 가장 빠른 개발, 테스트 유지보수 없음',
|
|
246
|
+
manualTradeoff: '단점: 안전망 없음, 회귀, 리팩토링 어려움',
|
|
247
|
+
selectApproach: '테스트 접근 방식을 선택하세요:',
|
|
248
|
+
tddOption: '🔴 TDD - 테스트 먼저 작성 (프로덕션 앱에 권장)',
|
|
249
|
+
testAfterOption: '🔵 테스트 후행 - 먼저 구현, 나중에 테스트 (균형 잡힌 접근)',
|
|
250
|
+
manualOption: '🟡 수동 - 자동화된 테스트 없음 (프로토타입만)',
|
|
251
|
+
selectCoverage: '커버리지 목표 수준을 선택하세요:',
|
|
252
|
+
coverage70: '70% - 허용 가능 (핵심 경로 커버)',
|
|
253
|
+
coverage80: '80% - 좋음 (권장 - 대부분 경로 커버)',
|
|
254
|
+
coverage90: '90% - 우수 (포괄적 커버리지)',
|
|
255
|
+
coverageCustom: '사용자 지정 (직접 값 입력)',
|
|
256
|
+
enterCustom: '사용자 지정 커버리지 목표 입력 (70-95):',
|
|
257
|
+
coverageValidation: '커버리지 목표는 70%에서 95% 사이여야 합니다',
|
|
258
|
+
selectedTesting: '✔ 테스트:',
|
|
259
|
+
selectedCoverage: '✔ 커버리지 목표:',
|
|
260
|
+
configNotFound: '⚠️ config.json을 찾을 수 없어 테스트 구성을 업데이트할 수 없습니다',
|
|
261
|
+
},
|
|
262
|
+
pt: {
|
|
263
|
+
header: '🧪 Configuração de Testes',
|
|
264
|
+
subheader: 'Configure sua abordagem de teste padrão e metas de cobertura',
|
|
265
|
+
guidance: '💡 Qual abordagem de teste você deve escolher?',
|
|
266
|
+
tddTitle: '✓ TDD (Desenvolvimento Orientado a Testes)',
|
|
267
|
+
tddBestFor: 'Melhor para: Lógica de negócios complexa, recursos críticos, refatoração',
|
|
268
|
+
tddBenefits: 'Benefícios: Melhor design, menos bugs, confiança nas mudanças',
|
|
269
|
+
tddTradeoff: 'Compensação: Desenvolvimento inicial mais lento, requer disciplina',
|
|
270
|
+
testAfterTitle: '✓ Test-After',
|
|
271
|
+
testAfterBestFor: 'Melhor para: A maioria dos projetos, prototipagem rápida, trabalho exploratório',
|
|
272
|
+
testAfterBenefits: 'Benefícios: Iteração rápida, design flexível, boa cobertura',
|
|
273
|
+
testAfterTradeoff: 'Compensação: Pode perder casos extremos, mais difícil testar após o design',
|
|
274
|
+
manualTitle: '✓ Testes Manuais',
|
|
275
|
+
manualBestFor: 'Melhor para: Protótipos rápidos, provas de conceito, aprendizado',
|
|
276
|
+
manualBenefits: 'Benefícios: Desenvolvimento mais rápido, sem manutenção de testes',
|
|
277
|
+
manualTradeoff: 'Compensação: Sem rede de segurança, regressões, difícil refatorar',
|
|
278
|
+
selectApproach: 'Selecione sua abordagem de teste:',
|
|
279
|
+
tddOption: '🔴 TDD - Escrever testes primeiro (recomendado para apps de produção)',
|
|
280
|
+
testAfterOption: '🔵 Test-After - Implementar primeiro, testar depois (abordagem equilibrada)',
|
|
281
|
+
manualOption: '🟡 Manual - Sem testes automatizados (apenas protótipos)',
|
|
282
|
+
selectCoverage: 'Selecione seu nível de cobertura alvo:',
|
|
283
|
+
coverage70: '70% - Aceitável (caminhos principais cobertos)',
|
|
284
|
+
coverage80: '80% - Bom (recomendado - maioria dos caminhos cobertos)',
|
|
285
|
+
coverage90: '90% - Excelente (cobertura abrangente)',
|
|
286
|
+
coverageCustom: 'Personalizado (digite seu próprio valor)',
|
|
287
|
+
enterCustom: 'Digite a cobertura alvo personalizada (70-95):',
|
|
288
|
+
coverageValidation: 'A cobertura alvo deve estar entre 70% e 95%',
|
|
289
|
+
selectedTesting: '✔ Testes:',
|
|
290
|
+
selectedCoverage: '✔ Cobertura Alvo:',
|
|
291
|
+
configNotFound: '⚠️ config.json não encontrado, não é possível atualizar a configuração de testes',
|
|
292
|
+
},
|
|
293
|
+
};
|
|
294
|
+
return strings[language] || strings.en;
|
|
295
|
+
}
|
|
9
296
|
/**
|
|
10
297
|
* Prompt user for testing configuration
|
|
11
298
|
*
|
|
299
|
+
* @param language - Language for translations
|
|
12
300
|
* @returns Testing configuration
|
|
13
301
|
*/
|
|
14
|
-
export async function promptTestingConfig() {
|
|
302
|
+
export async function promptTestingConfig(language = 'en') {
|
|
303
|
+
const strings = getTestingStrings(language);
|
|
15
304
|
console.log('');
|
|
16
|
-
console.log(chalk.cyan.bold(
|
|
17
|
-
console.log(chalk.gray('
|
|
305
|
+
console.log(chalk.cyan.bold(strings.header));
|
|
306
|
+
console.log(chalk.gray(' ' + strings.subheader));
|
|
18
307
|
console.log('');
|
|
19
308
|
// Add guidance on which testing approach to choose
|
|
20
|
-
console.log(chalk.white(
|
|
309
|
+
console.log(chalk.white(strings.guidance));
|
|
21
310
|
console.log('');
|
|
22
|
-
console.log(chalk.green('
|
|
23
|
-
console.log(chalk.gray('
|
|
24
|
-
console.log(chalk.gray('
|
|
25
|
-
console.log(chalk.gray('
|
|
311
|
+
console.log(chalk.green(' ' + strings.tddTitle));
|
|
312
|
+
console.log(chalk.gray(' ' + strings.tddBestFor));
|
|
313
|
+
console.log(chalk.gray(' ' + strings.tddBenefits));
|
|
314
|
+
console.log(chalk.gray(' ' + strings.tddTradeoff));
|
|
26
315
|
console.log('');
|
|
27
|
-
console.log(chalk.blue('
|
|
28
|
-
console.log(chalk.gray('
|
|
29
|
-
console.log(chalk.gray('
|
|
30
|
-
console.log(chalk.gray('
|
|
316
|
+
console.log(chalk.blue(' ' + strings.testAfterTitle));
|
|
317
|
+
console.log(chalk.gray(' ' + strings.testAfterBestFor));
|
|
318
|
+
console.log(chalk.gray(' ' + strings.testAfterBenefits));
|
|
319
|
+
console.log(chalk.gray(' ' + strings.testAfterTradeoff));
|
|
31
320
|
console.log('');
|
|
32
|
-
console.log(chalk.yellow('
|
|
33
|
-
console.log(chalk.gray('
|
|
34
|
-
console.log(chalk.gray('
|
|
35
|
-
console.log(chalk.gray('
|
|
321
|
+
console.log(chalk.yellow(' ' + strings.manualTitle));
|
|
322
|
+
console.log(chalk.gray(' ' + strings.manualBestFor));
|
|
323
|
+
console.log(chalk.gray(' ' + strings.manualBenefits));
|
|
324
|
+
console.log(chalk.gray(' ' + strings.manualTradeoff));
|
|
36
325
|
console.log('');
|
|
37
326
|
const testMode = await select({
|
|
38
|
-
message:
|
|
327
|
+
message: strings.selectApproach,
|
|
39
328
|
choices: [
|
|
40
329
|
{
|
|
41
|
-
name:
|
|
330
|
+
name: strings.tddOption,
|
|
42
331
|
value: 'TDD',
|
|
43
332
|
},
|
|
44
333
|
{
|
|
45
|
-
name:
|
|
334
|
+
name: strings.testAfterOption,
|
|
46
335
|
value: 'test-after',
|
|
47
336
|
},
|
|
48
337
|
{
|
|
49
|
-
name:
|
|
338
|
+
name: strings.manualOption,
|
|
50
339
|
value: 'manual',
|
|
51
340
|
}
|
|
52
341
|
],
|
|
@@ -56,22 +345,22 @@ export async function promptTestingConfig() {
|
|
|
56
345
|
// Only ask for coverage if not manual testing
|
|
57
346
|
if (testMode !== 'manual') {
|
|
58
347
|
const selectedCoverageLevel = await select({
|
|
59
|
-
message:
|
|
348
|
+
message: strings.selectCoverage,
|
|
60
349
|
choices: [
|
|
61
350
|
{
|
|
62
|
-
name:
|
|
351
|
+
name: strings.coverage70,
|
|
63
352
|
value: 70,
|
|
64
353
|
},
|
|
65
354
|
{
|
|
66
|
-
name:
|
|
355
|
+
name: strings.coverage80,
|
|
67
356
|
value: 80,
|
|
68
357
|
},
|
|
69
358
|
{
|
|
70
|
-
name:
|
|
359
|
+
name: strings.coverage90,
|
|
71
360
|
value: 90,
|
|
72
361
|
},
|
|
73
362
|
{
|
|
74
|
-
name:
|
|
363
|
+
name: strings.coverageCustom,
|
|
75
364
|
value: 'custom',
|
|
76
365
|
}
|
|
77
366
|
],
|
|
@@ -79,12 +368,12 @@ export async function promptTestingConfig() {
|
|
|
79
368
|
});
|
|
80
369
|
if (selectedCoverageLevel === 'custom') {
|
|
81
370
|
const customInput = await input({
|
|
82
|
-
message:
|
|
371
|
+
message: strings.enterCustom,
|
|
83
372
|
default: '80',
|
|
84
373
|
validate: (val) => {
|
|
85
374
|
const num = parseInt(val, 10);
|
|
86
375
|
if (isNaN(num) || num < 70 || num > 95) {
|
|
87
|
-
return
|
|
376
|
+
return strings.coverageValidation;
|
|
88
377
|
}
|
|
89
378
|
return true;
|
|
90
379
|
}
|
|
@@ -96,9 +385,9 @@ export async function promptTestingConfig() {
|
|
|
96
385
|
}
|
|
97
386
|
}
|
|
98
387
|
console.log('');
|
|
99
|
-
console.log(chalk.green(`
|
|
388
|
+
console.log(chalk.green(` ${strings.selectedTesting} ${testMode}`));
|
|
100
389
|
if (testMode !== 'manual') {
|
|
101
|
-
console.log(chalk.green(`
|
|
390
|
+
console.log(chalk.green(` ${strings.selectedCoverage} ${coverageTarget}%`));
|
|
102
391
|
}
|
|
103
392
|
console.log('');
|
|
104
393
|
return { testMode, coverageTarget };
|
|
@@ -109,11 +398,13 @@ export async function promptTestingConfig() {
|
|
|
109
398
|
* @param targetDir - Project directory
|
|
110
399
|
* @param testMode - Selected test mode
|
|
111
400
|
* @param coverageTarget - Selected coverage target
|
|
401
|
+
* @param language - Language for translations
|
|
112
402
|
*/
|
|
113
|
-
export function updateConfigWithTesting(targetDir, testMode, coverageTarget) {
|
|
403
|
+
export function updateConfigWithTesting(targetDir, testMode, coverageTarget, language = 'en') {
|
|
404
|
+
const strings = getTestingStrings(language);
|
|
114
405
|
const configPath = path.join(targetDir, '.specweave', 'config.json');
|
|
115
406
|
if (!fs.existsSync(configPath)) {
|
|
116
|
-
console.error(chalk.red(
|
|
407
|
+
console.error(chalk.red(strings.configNotFound));
|
|
117
408
|
return;
|
|
118
409
|
}
|
|
119
410
|
const config = fs.readJsonSync(configPath);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing-config.js","sourceRoot":"","sources":["../../../../../src/cli/helpers/init/testing-config.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"testing-config.js","sourceRoot":"","sources":["../../../../../src/cli/helpers/init/testing-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,6 +28,7 @@ export declare class FeatureValidator {
|
|
|
28
28
|
private scanIncrementReferences;
|
|
29
29
|
/**
|
|
30
30
|
* T-005: Detect all feature files (living docs + user stories)
|
|
31
|
+
* v5.0.0: Features now live in {project}/FS-XXX/ (no _features folder)
|
|
31
32
|
*/
|
|
32
33
|
private detectFeatureFiles;
|
|
33
34
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../../../src/core/feature-deleter/validator.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,eAAe,EAEhB,MAAM,YAAY,CAAC;AAIpB;;;;GAIG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAS;gBAEX,OAAO,GAAE,uBAA4B;IAKjD;;;OAGG;IACG,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA2DtF;;;;OAIG;YACW,uBAAuB;IAsDrC
|
|
1
|
+
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../../../src/core/feature-deleter/validator.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,eAAe,EAEhB,MAAM,YAAY,CAAC;AAIpB;;;;GAIG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAS;gBAEX,OAAO,GAAE,uBAA4B;IAKjD;;;OAGG;IACG,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA2DtF;;;;OAIG;YACW,uBAAuB;IAsDrC;;;OAGG;YACW,kBAAkB;IA2ChC;;OAEG;YACW,iBAAiB;IAgB/B;;OAEG;YACW,WAAW;IAiBzB;;OAEG;IACH,sBAAsB,CAAC,UAAU,EAAE,gBAAgB,GAAG,MAAM;CAiC7D"}
|
|
@@ -118,20 +118,13 @@ export class FeatureValidator {
|
|
|
118
118
|
}
|
|
119
119
|
/**
|
|
120
120
|
* T-005: Detect all feature files (living docs + user stories)
|
|
121
|
+
* v5.0.0: Features now live in {project}/FS-XXX/ (no _features folder)
|
|
121
122
|
*/
|
|
122
123
|
async detectFeatureFiles(featureId) {
|
|
123
124
|
const livingDocsFiles = [];
|
|
124
125
|
const userStoryFiles = [];
|
|
125
|
-
//
|
|
126
|
-
|
|
127
|
-
try {
|
|
128
|
-
const files = await this.getAllFiles(livingDocsPath);
|
|
129
|
-
livingDocsFiles.push(...files);
|
|
130
|
-
}
|
|
131
|
-
catch (error) {
|
|
132
|
-
// Living docs folder doesn't exist - not an error
|
|
133
|
-
}
|
|
134
|
-
// Scan user story files: .specweave/docs/internal/specs/*/{featureId}/us-*.md
|
|
126
|
+
// v5.0.0: Features live in project folders {project}/FS-XXX/
|
|
127
|
+
// Scan all project folders for this feature
|
|
135
128
|
const specsPath = path.join(this.projectRoot, '.specweave/docs/internal/specs');
|
|
136
129
|
try {
|
|
137
130
|
const projects = await fs.readdir(specsPath, { withFileTypes: true });
|
|
@@ -140,6 +133,11 @@ export class FeatureValidator {
|
|
|
140
133
|
const featurePath = path.join(specsPath, project.name, featureId);
|
|
141
134
|
try {
|
|
142
135
|
const files = await fs.readdir(featurePath);
|
|
136
|
+
// FEATURE.md goes to livingDocsFiles
|
|
137
|
+
if (files.includes('FEATURE.md')) {
|
|
138
|
+
livingDocsFiles.push(path.join(featurePath, 'FEATURE.md'));
|
|
139
|
+
}
|
|
140
|
+
// User stories go to userStoryFiles
|
|
143
141
|
const userStoryPaths = files
|
|
144
142
|
.filter(f => f.startsWith('us-') && f.endsWith('.md'))
|
|
145
143
|
.map(f => path.join(featurePath, f));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../../../src/core/feature-deleter/validator.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../../../src/core/feature-deleter/validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"increment-archiver.d.ts","sourceRoot":"","sources":["../../../../src/core/increment/increment-archiver.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,OAAO,EAAE,MAAM,EAAiB,MAAM,uBAAuB,CAAC;AAgB9D,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,YAAY,CAAS;gBAEjB,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAO;IAS9D;;OAEG;IACG,OAAO,CAAC,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,aAAa,CAAC;IAmDnE;;OAEG;YACW,aAAa;IAsB3B;;;;;OAKG;YACW,gBAAgB;IAiE9B;;OAEG;YACW,aAAa;IAkD3B;;OAEG;YACW,gBAAgB;IAsC9B;;OAEG;YACW,WAAW;IAczB;;OAEG;YACW,qBAAqB;IAMnC;;OAEG;YACW,gBAAgB;IA8C9B;;;;;;OAMG;YACW,yBAAyB;
|
|
1
|
+
{"version":3,"file":"increment-archiver.d.ts","sourceRoot":"","sources":["../../../../src/core/increment/increment-archiver.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,OAAO,EAAE,MAAM,EAAiB,MAAM,uBAAuB,CAAC;AAgB9D,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,YAAY,CAAS;gBAEjB,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAO;IAS9D;;OAEG;IACG,OAAO,CAAC,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,aAAa,CAAC;IAmDnE;;OAEG;YACW,aAAa;IAsB3B;;;;;OAKG;YACW,gBAAgB;IAiE9B;;OAEG;YACW,aAAa;IAkD3B;;OAEG;YACW,gBAAgB;IAsC9B;;OAEG;YACW,WAAW;IAczB;;OAEG;YACW,qBAAqB;IAMnC;;OAEG;YACW,gBAAgB;IA8C9B;;;;;;OAMG;YACW,yBAAyB;IAkGvC;;OAEG;YACW,aAAa;IAa3B;;OAEG;YACW,gBAAgB;IAc9B;;OAEG;IACG,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA8C/C;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IA0BvC;;;;;;OAMG;YACW,wBAAwB;IAyBtC;;;;;;;OAOG;IACH,OAAO,CAAC,2BAA2B;IAanC;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC;QACxB,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;KAC/B,CAAC;CAuBH"}
|
|
@@ -277,7 +277,7 @@ export class IncrementArchiver {
|
|
|
277
277
|
});
|
|
278
278
|
if (result.archivedFeatures.length > 0) {
|
|
279
279
|
this.logger.success(`✅ Archived ${result.archivedFeatures.length} features: ${result.archivedFeatures.join(', ')}`);
|
|
280
|
-
this.logger.info(` Features moved to
|
|
280
|
+
this.logger.info(` Features moved to {project}/_archive/ folders`);
|
|
281
281
|
}
|
|
282
282
|
else {
|
|
283
283
|
this.logger.info(`ℹ️ No features to archive (all active or already archived)`);
|
|
@@ -323,9 +323,16 @@ export class IncrementArchiver {
|
|
|
323
323
|
return;
|
|
324
324
|
}
|
|
325
325
|
this.logger.info(` Feature linkage: ${featureId}`);
|
|
326
|
-
// 2. Check if feature is in archive
|
|
327
|
-
|
|
328
|
-
const
|
|
326
|
+
// 2. Check if feature is in archive (v5.0.0: check project folders, not _features)
|
|
327
|
+
// Get the default/first project to check
|
|
328
|
+
const specsDir = path.join(this.rootDir, '.specweave', 'docs', 'internal', 'specs');
|
|
329
|
+
const projectFolders = await fs.readdir(specsDir, { withFileTypes: true });
|
|
330
|
+
const projects = projectFolders
|
|
331
|
+
.filter(d => d.isDirectory() && !d.name.startsWith('_'))
|
|
332
|
+
.map(d => d.name);
|
|
333
|
+
const defaultProject = projects[0] || 'default';
|
|
334
|
+
const archivePath = path.join(specsDir, defaultProject, '_archive', featureId);
|
|
335
|
+
const activePath = path.join(specsDir, defaultProject, featureId);
|
|
329
336
|
const featureInArchive = await fs.pathExists(archivePath);
|
|
330
337
|
const featureAlreadyActive = await fs.pathExists(activePath);
|
|
331
338
|
if (!featureInArchive) {
|
|
@@ -372,7 +379,7 @@ export class IncrementArchiver {
|
|
|
372
379
|
const featureArchiver = new FeatureArchiver(this.rootDir);
|
|
373
380
|
await featureArchiver.restoreFeature(featureId);
|
|
374
381
|
this.logger.success(`✅ Restored feature ${featureId} from archive (linked to ${increment})`);
|
|
375
|
-
this.logger.info(` Feature moved:
|
|
382
|
+
this.logger.info(` Feature moved: {project}/_archive/${featureId}/ → {project}/${featureId}/`);
|
|
376
383
|
this.logger.info(` Links updated throughout codebase`);
|
|
377
384
|
}
|
|
378
385
|
catch (error) {
|