specweave 0.17.2 → 0.17.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/.claude-plugin/README.md +2 -2
  2. package/.claude-plugin/marketplace.json +22 -22
  3. package/dist/src/cli/commands/init.js +10 -10
  4. package/dist/src/cli/commands/init.js.map +1 -1
  5. package/dist/src/cli/helpers/issue-tracker/index.d.ts.map +1 -1
  6. package/dist/src/cli/helpers/issue-tracker/index.js +18 -15
  7. package/dist/src/cli/helpers/issue-tracker/index.js.map +1 -1
  8. package/dist/src/core/spec-task-mapper.d.ts.map +1 -1
  9. package/dist/src/core/spec-task-mapper.js +7 -12
  10. package/dist/src/core/spec-task-mapper.js.map +1 -1
  11. package/dist/src/locales/de/.gitkeep +0 -0
  12. package/dist/src/locales/de/cli.json +108 -0
  13. package/dist/src/locales/en/cli.json +287 -0
  14. package/dist/src/locales/en/errors.json +7 -0
  15. package/dist/src/locales/en/templates.json +6 -0
  16. package/dist/src/locales/es/.gitkeep +0 -0
  17. package/dist/src/locales/es/cli.json +41 -0
  18. package/dist/src/locales/fr/.gitkeep +0 -0
  19. package/dist/src/locales/fr/cli.json +108 -0
  20. package/dist/src/locales/ja/.gitkeep +0 -0
  21. package/dist/src/locales/ja/cli.json +108 -0
  22. package/dist/src/locales/ko/.gitkeep +0 -0
  23. package/dist/src/locales/ko/cli.json +108 -0
  24. package/dist/src/locales/pt/.gitkeep +0 -0
  25. package/dist/src/locales/pt/cli.json +108 -0
  26. package/dist/src/locales/ru/.gitkeep +0 -0
  27. package/dist/src/locales/ru/cli.json +269 -0
  28. package/dist/src/locales/zh/.gitkeep +0 -0
  29. package/dist/src/locales/zh/cli.json +108 -0
  30. package/package.json +1 -1
  31. package/plugins/specweave/hooks/post-task-completion.sh +72 -12
  32. package/plugins/specweave/skills/increment-planner/SKILL.md +4 -4
  33. package/plugins/specweave-github/hooks/post-task-completion.sh +35 -15
  34. package/plugins/specweave-ui/.claude-plugin/plugin.json +1 -1
@@ -0,0 +1,108 @@
1
+ {
2
+ "init": {
3
+ "welcome": "🚀 SpecWeave Initialization",
4
+ "projectName": "Project name:",
5
+ "projectNamePrompt": "Project name (for templates):",
6
+ "projectNameDefault": "my-saas",
7
+ "detectingTool": "Detecting AI tool...",
8
+ "foundClaude": "✅ Found Claude Code",
9
+ "foundCursor": "✅ Found Cursor",
10
+ "foundCopilot": "✅ Found GitHub Copilot",
11
+ "noToolDetected": "No AI tool detected, using Generic adapter",
12
+ "complete": "✨ Initialization complete!",
13
+ "claudeNativeComplete": "✨ Claude Code native installation complete!",
14
+ "claudeNativeBenefits": "✅ Native skills, agents, hooks work out of the box",
15
+ "projectSuccess": "SpecWeave project created successfully!",
16
+ "readyToBuild": "🚀 Ready to build with SpecWeave!",
17
+ "errors": {
18
+ "invalidName": "Project name must contain only lowercase letters, numbers, and hyphens",
19
+ "alreadyExists": ".specweave directory already exists",
20
+ "cancelled": "❌ Initialization cancelled",
21
+ "invalidLanguage": "❌ Invalid language: {{language}}",
22
+ "supportedLanguages": "Supported languages: {{languages}}",
23
+ "nestedNotSupported": "❌ Nested .specweave/ folders are NOT supported!",
24
+ "parentFound": "Found parent .specweave/ at:",
25
+ "projectCreationFailed": "Failed to create project",
26
+ "commandsCopyFailed": "❌ Commands copy failed: {{error}}",
27
+ "agentsCopyFailed": "❌ Agents copy failed: {{error}}",
28
+ "skillsCopyFailed": "❌ Skills copy failed: {{error}}",
29
+ "hooksCopyFailed": "❌ Hooks copy failed: {{error}}"
30
+ },
31
+ "warnings": {
32
+ "invalidDirName": "âš ī¸ Current directory name '{{dirName}}' contains invalid characters.",
33
+ "directoryNotEmpty": "âš ī¸ Current directory contains {{count}} file{{plural}}.",
34
+ "skillsIndexWarning": "âš ī¸ Warning: Could not generate skills index: {{error}}",
35
+ "skillsIndexNote": "Skills will still work, but manual indexing may be needed."
36
+ },
37
+ "prompts": {
38
+ "confirmInitInCurrent": "Initialize SpecWeave in current directory?",
39
+ "overwriteSpecweave": ".specweave directory already exists. Overwrite?",
40
+ "overwriteDirectory": "Directory {{projectName}} already exists. Overwrite?",
41
+ "enablePlugins": "Enable suggested plugins now?"
42
+ },
43
+ "info": {
44
+ "nestedEnforcement": "SpecWeave enforces a single source of truth:",
45
+ "nestedBullet1": "â€ĸ Use the parent folder for all increments",
46
+ "nestedBullet2": "â€ĸ Increments can span multiple subdirectories",
47
+ "nestedBullet3": "â€ĸ See CLAUDE.md section \"Root-Level .specweave/ Folder\"",
48
+ "nestedToFix": "To fix:",
49
+ "suggestedPlugins": "💡 Suggested Plugins:",
50
+ "copiedFiles": "✓ Copied {{count}} command files",
51
+ "copiedAgents": "✓ Copied {{count}} agent directories",
52
+ "copiedSkills": "✓ Copied {{count}} skill directories",
53
+ "copiedHooks": "✓ Copied {{count}} hook files"
54
+ },
55
+ "progress": {
56
+ "creatingProject": "Creating SpecWeave project...",
57
+ "detected": "Detected {{tool}}...",
58
+ "usingTool": "Using {{tool}}...",
59
+ "directoryCreated": "Directory structure created...",
60
+ "templatesCopied": "Base templates copied...",
61
+ "installingComponents": "Installing Claude Code components...",
62
+ "commandsInstalled": "Slash commands installed...",
63
+ "agentsInstalled": "Agents installed...",
64
+ "skillsInstalled": "Skills installed...",
65
+ "hooksInstalled": "Hooks installed...",
66
+ "generatingIndex": "Generating skills index...",
67
+ "indexGenerated": "Skills index generated...",
68
+ "installingAdapter": "Installing {{tool}} adapter...",
69
+ "projectSuccess": "SpecWeave project created successfully!",
70
+ "detectingPlugins": "Detecting plugins...",
71
+ "detectedPlugins": "Detected {{count}} suggested plugins",
72
+ "enablingPlugins": "Enabling plugins...",
73
+ "enabledPlugin": "Enabled {{plugin}}",
74
+ "pluginsEnabled": "Plugins enabled"
75
+ },
76
+ "nextSteps": {
77
+ "header": "đŸŽ¯ Next steps:",
78
+ "cd": "cd {{projectName}}",
79
+ "footer": "🚀 Ready to build with SpecWeave!",
80
+ "docsLink": "Documentation: https://spec-weave.com",
81
+ "githubLink": "GitHub: https://github.com/anton-abyzov/specweave"
82
+ }
83
+ },
84
+ "increment": {
85
+ "creating": "📝 Creating increment: {name}",
86
+ "created": "✅ Increment {id} created successfully!",
87
+ "nextStepDo": "Next: Run /specweave.do to start implementation",
88
+ "errors": {
89
+ "incompleteFound": "Cannot create new increment! Previous increments incomplete"
90
+ }
91
+ },
92
+ "progress": {
93
+ "currentIncrement": "Current Increment: {id}",
94
+ "status": "Status: {status}",
95
+ "completion": "Completion: {percent}%"
96
+ },
97
+ "translate": {
98
+ "translating": "🌐 Translating content to {language}...",
99
+ "complete": "✅ Translation complete!"
100
+ },
101
+ "version": {
102
+ "current": "SpecWeave version: {version}"
103
+ },
104
+ "errors": {
105
+ "fileNotFound": "❌ File not found: {path}",
106
+ "invalidConfig": "❌ Invalid configuration: {error}"
107
+ }
108
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "specweave",
3
- "version": "0.17.2",
3
+ "version": "0.17.4",
4
4
  "description": "Spec-driven development framework for Claude Code. AI-native workflow with living documentation, intelligent agents, and multilingual support (9 languages). Enterprise-grade traceability with permanent specs and temporary increments.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -202,10 +202,30 @@ if command -v node &> /dev/null; then
202
202
  if [ -n "$CURRENT_INCREMENT" ]; then
203
203
  echo "[$(date)] 📚 Checking living docs sync for $CURRENT_INCREMENT" >> "$DEBUG_LOG" 2>/dev/null || true
204
204
 
205
- # Run living docs sync (non-blocking, best-effort)
206
- node ${CLAUDE_PLUGIN_ROOT}/lib/hooks/sync-living-docs.js "$CURRENT_INCREMENT" 2>&1 | tee -a "$DEBUG_LOG" >/dev/null || {
207
- echo "[$(date)] âš ī¸ Failed to sync living docs (non-blocking)" >> "$DEBUG_LOG" 2>/dev/null || true
208
- }
205
+ # Determine which sync script to use (project local or global)
206
+ SYNC_SCRIPT=""
207
+ if [ -f "$PROJECT_ROOT/dist/plugins/specweave/lib/hooks/sync-living-docs.js" ]; then
208
+ # Development: Use project's compiled files (has node_modules)
209
+ SYNC_SCRIPT="$PROJECT_ROOT/dist/plugins/specweave/lib/hooks/sync-living-docs.js"
210
+ echo "[$(date)] Using local dist: $SYNC_SCRIPT" >> "$DEBUG_LOG" 2>/dev/null || true
211
+ elif [ -f "$PROJECT_ROOT/node_modules/specweave/dist/plugins/specweave/lib/hooks/sync-living-docs.js" ]; then
212
+ # Installed as dependency: Use node_modules version
213
+ SYNC_SCRIPT="$PROJECT_ROOT/node_modules/specweave/dist/plugins/specweave/lib/hooks/sync-living-docs.js"
214
+ echo "[$(date)] Using node_modules: $SYNC_SCRIPT" >> "$DEBUG_LOG" 2>/dev/null || true
215
+ elif [ -n "${CLAUDE_PLUGIN_ROOT}" ] && [ -f "${CLAUDE_PLUGIN_ROOT}/lib/hooks/sync-living-docs.js" ]; then
216
+ # Fallback: Plugin marketplace (may fail if deps missing)
217
+ SYNC_SCRIPT="${CLAUDE_PLUGIN_ROOT}/lib/hooks/sync-living-docs.js"
218
+ echo "[$(date)] Using plugin marketplace: $SYNC_SCRIPT" >> "$DEBUG_LOG" 2>/dev/null || true
219
+ fi
220
+
221
+ if [ -n "$SYNC_SCRIPT" ]; then
222
+ # Run living docs sync (non-blocking, best-effort)
223
+ (cd "$PROJECT_ROOT" && node "$SYNC_SCRIPT" "$CURRENT_INCREMENT") 2>&1 | tee -a "$DEBUG_LOG" >/dev/null || {
224
+ echo "[$(date)] âš ī¸ Failed to sync living docs (non-blocking)" >> "$DEBUG_LOG" 2>/dev/null || true
225
+ }
226
+ else
227
+ echo "[$(date)] âš ī¸ sync-living-docs.js not found in any location" >> "$DEBUG_LOG" 2>/dev/null || true
228
+ fi
209
229
  fi
210
230
  fi
211
231
 
@@ -217,10 +237,30 @@ if command -v node &> /dev/null; then
217
237
  if [ -n "$CURRENT_INCREMENT" ]; then
218
238
  echo "[$(date)] 🌐 Checking if living docs translation is needed for $CURRENT_INCREMENT" >> "$DEBUG_LOG" 2>/dev/null || true
219
239
 
220
- # Run living docs translation (non-blocking, best-effort)
221
- node ${CLAUDE_PLUGIN_ROOT}/lib/hooks/translate-living-docs.js "$CURRENT_INCREMENT" 2>&1 | tee -a "$DEBUG_LOG" >/dev/null || {
222
- echo "[$(date)] âš ī¸ Failed to translate living docs (non-blocking)" >> "$DEBUG_LOG" 2>/dev/null || true
223
- }
240
+ # Determine which translation script to use (project local or global)
241
+ TRANSLATE_SCRIPT=""
242
+ if [ -f "$PROJECT_ROOT/dist/plugins/specweave/lib/hooks/translate-living-docs.js" ]; then
243
+ # Development: Use project's compiled files (has node_modules)
244
+ TRANSLATE_SCRIPT="$PROJECT_ROOT/dist/plugins/specweave/lib/hooks/translate-living-docs.js"
245
+ echo "[$(date)] Using local dist: $TRANSLATE_SCRIPT" >> "$DEBUG_LOG" 2>/dev/null || true
246
+ elif [ -f "$PROJECT_ROOT/node_modules/specweave/dist/plugins/specweave/lib/hooks/translate-living-docs.js" ]; then
247
+ # Installed as dependency: Use node_modules version
248
+ TRANSLATE_SCRIPT="$PROJECT_ROOT/node_modules/specweave/dist/plugins/specweave/lib/hooks/translate-living-docs.js"
249
+ echo "[$(date)] Using node_modules: $TRANSLATE_SCRIPT" >> "$DEBUG_LOG" 2>/dev/null || true
250
+ elif [ -n "${CLAUDE_PLUGIN_ROOT}" ] && [ -f "${CLAUDE_PLUGIN_ROOT}/lib/hooks/translate-living-docs.js" ]; then
251
+ # Fallback: Plugin marketplace (may fail if deps missing)
252
+ TRANSLATE_SCRIPT="${CLAUDE_PLUGIN_ROOT}/lib/hooks/translate-living-docs.js"
253
+ echo "[$(date)] Using plugin marketplace: $TRANSLATE_SCRIPT" >> "$DEBUG_LOG" 2>/dev/null || true
254
+ fi
255
+
256
+ if [ -n "$TRANSLATE_SCRIPT" ]; then
257
+ # Run living docs translation (non-blocking, best-effort)
258
+ (cd "$PROJECT_ROOT" && node "$TRANSLATE_SCRIPT" "$CURRENT_INCREMENT") 2>&1 | tee -a "$DEBUG_LOG" >/dev/null || {
259
+ echo "[$(date)] âš ī¸ Failed to translate living docs (non-blocking)" >> "$DEBUG_LOG" 2>/dev/null || true
260
+ }
261
+ else
262
+ echo "[$(date)] âš ī¸ translate-living-docs.js not found in any location" >> "$DEBUG_LOG" 2>/dev/null || true
263
+ fi
224
264
  fi
225
265
  fi
226
266
 
@@ -256,10 +296,30 @@ if command -v node &> /dev/null; then
256
296
  LATEST_TASK=$(grep "^## T-[0-9]" ".specweave/increments/$CURRENT_INCREMENT/tasks.md" 2>/dev/null | tail -1 | awk '{print $2}' | sed 's/://')
257
297
 
258
298
  if [ -n "$LATEST_TASK" ]; then
259
- # Prepare reflection context (non-blocking, best-effort)
260
- node ${CLAUDE_PLUGIN_ROOT}/lib/hooks/prepare-reflection-context.js "$CURRENT_INCREMENT" "$LATEST_TASK" 2>&1 | tee -a "$DEBUG_LOG" >/dev/null || {
261
- echo "[$(date)] âš ī¸ Failed to prepare reflection context (non-blocking)" >> "$DEBUG_LOG" 2>/dev/null || true
262
- }
299
+ # Determine which reflection script to use (project local or global)
300
+ REFLECTION_SCRIPT=""
301
+ if [ -f "$PROJECT_ROOT/dist/plugins/specweave/lib/hooks/prepare-reflection-context.js" ]; then
302
+ # Development: Use project's compiled files (has node_modules)
303
+ REFLECTION_SCRIPT="$PROJECT_ROOT/dist/plugins/specweave/lib/hooks/prepare-reflection-context.js"
304
+ echo "[$(date)] Using local dist: $REFLECTION_SCRIPT" >> "$DEBUG_LOG" 2>/dev/null || true
305
+ elif [ -f "$PROJECT_ROOT/node_modules/specweave/dist/plugins/specweave/lib/hooks/prepare-reflection-context.js" ]; then
306
+ # Installed as dependency: Use node_modules version
307
+ REFLECTION_SCRIPT="$PROJECT_ROOT/node_modules/specweave/dist/plugins/specweave/lib/hooks/prepare-reflection-context.js"
308
+ echo "[$(date)] Using node_modules: $REFLECTION_SCRIPT" >> "$DEBUG_LOG" 2>/dev/null || true
309
+ elif [ -n "${CLAUDE_PLUGIN_ROOT}" ] && [ -f "${CLAUDE_PLUGIN_ROOT}/lib/hooks/prepare-reflection-context.js" ]; then
310
+ # Fallback: Plugin marketplace (may fail if deps missing)
311
+ REFLECTION_SCRIPT="${CLAUDE_PLUGIN_ROOT}/lib/hooks/prepare-reflection-context.js"
312
+ echo "[$(date)] Using plugin marketplace: $REFLECTION_SCRIPT" >> "$DEBUG_LOG" 2>/dev/null || true
313
+ fi
314
+
315
+ if [ -n "$REFLECTION_SCRIPT" ]; then
316
+ # Prepare reflection context (non-blocking, best-effort)
317
+ (cd "$PROJECT_ROOT" && node "$REFLECTION_SCRIPT" "$CURRENT_INCREMENT" "$LATEST_TASK") 2>&1 | tee -a "$DEBUG_LOG" >/dev/null || {
318
+ echo "[$(date)] âš ī¸ Failed to prepare reflection context (non-blocking)" >> "$DEBUG_LOG" 2>/dev/null || true
319
+ }
320
+ else
321
+ echo "[$(date)] âš ī¸ prepare-reflection-context.js not found in any location" >> "$DEBUG_LOG" 2>/dev/null || true
322
+ fi
263
323
  else
264
324
  echo "[$(date)] â„šī¸ No tasks found in tasks.md, skipping reflection" >> "$DEBUG_LOG" 2>/dev/null || true
265
325
  fi
@@ -125,10 +125,10 @@ import { ProjectManager } from '../../core/project-manager';
125
125
  const projectManager = new ProjectManager(projectRoot);
126
126
  const activeProject = projectManager.getActiveProject();
127
127
 
128
- // Get correct paths for active project
129
- const specsPath = projectManager.getSpecsPath(); // projects/{activeProject.id}/specs/
130
- const modulesPath = projectManager.getModulesPath(); // projects/{activeProject.id}/modules/
131
- const teamPath = projectManager.getTeamPath(); // projects/{activeProject.id}/team/
128
+ // Get correct paths for active project (flattened structure v0.16.11+)
129
+ const specsPath = projectManager.getSpecsPath(); // specs/{activeProject.id}/
130
+ const modulesPath = projectManager.getModulesPath(); // modules/{activeProject.id}/
131
+ const teamPath = projectManager.getTeamPath(); // team/{activeProject.id}/
132
132
  ```
133
133
 
134
134
  **In PM Agent Instructions**:
@@ -71,10 +71,10 @@ EOF
71
71
  exit 0
72
72
  fi
73
73
 
74
- # Check if github-spec-sync CLI exists
75
- SYNC_CLI="$PROJECT_ROOT/dist/cli/commands/sync-specs-to-github.js"
74
+ # Check if github-spec-content-sync CLI exists
75
+ SYNC_CLI="$PROJECT_ROOT/dist/src/cli/commands/sync-spec-content.js"
76
76
  if [ ! -f "$SYNC_CLI" ]; then
77
- echo "[$(date)] [GitHub] âš ī¸ github-spec-sync CLI not found at $SYNC_CLI, skipping sync" >> "$DEBUG_LOG" 2>/dev/null || true
77
+ echo "[$(date)] [GitHub] âš ī¸ sync-spec-content CLI not found at $SYNC_CLI, skipping sync" >> "$DEBUG_LOG" 2>/dev/null || true
78
78
  cat <<EOF
79
79
  {
80
80
  "continue": true
@@ -131,23 +131,43 @@ fi
131
131
  # ============================================================================
132
132
 
133
133
  if [ -n "$SPEC_ID" ]; then
134
- # Sync specific spec
135
- echo "[$(date)] [GitHub] 🔄 Syncing spec $SPEC_ID to GitHub Project..." >> "$DEBUG_LOG" 2>/dev/null || true
134
+ # Convert SPEC_ID to spec file path
135
+ SPEC_FILE=$(find .specweave/docs/internal/specs -name "${SPEC_ID}*.md" -o -name "${SPEC_ID}.md" 2>/dev/null | head -1)
136
136
 
137
- node "$SYNC_CLI" --spec-id "$SPEC_ID" 2>&1 | tee -a "$DEBUG_LOG" >/dev/null || {
138
- echo "[$(date)] [GitHub] âš ī¸ Spec sync failed for $SPEC_ID (non-blocking)" >> "$DEBUG_LOG" 2>/dev/null || true
139
- }
137
+ if [ -n "$SPEC_FILE" ]; then
138
+ # Sync specific spec
139
+ echo "[$(date)] [GitHub] 🔄 Syncing spec $SPEC_ID ($SPEC_FILE) to GitHub..." >> "$DEBUG_LOG" 2>/dev/null || true
140
140
 
141
- echo "[$(date)] [GitHub] ✅ Spec sync complete for $SPEC_ID" >> "$DEBUG_LOG" 2>/dev/null || true
141
+ (cd "$PROJECT_ROOT" && node "$SYNC_CLI" --spec "$SPEC_FILE" --provider github) 2>&1 | tee -a "$DEBUG_LOG" >/dev/null || {
142
+ echo "[$(date)] [GitHub] âš ī¸ Spec sync failed for $SPEC_ID (non-blocking)" >> "$DEBUG_LOG" 2>/dev/null || true
143
+ }
144
+
145
+ echo "[$(date)] [GitHub] ✅ Spec sync complete for $SPEC_ID" >> "$DEBUG_LOG" 2>/dev/null || true
146
+ else
147
+ echo "[$(date)] [GitHub] âš ī¸ Spec file not found for $SPEC_ID" >> "$DEBUG_LOG" 2>/dev/null || true
148
+ fi
142
149
  else
143
- # Sync all changed specs (fallback)
144
- echo "[$(date)] [GitHub] 🔄 Syncing all changed specs to GitHub..." >> "$DEBUG_LOG" 2>/dev/null || true
150
+ # Sync all modified specs (check git diff)
151
+ echo "[$(date)] [GitHub] 🔄 Checking for modified specs..." >> "$DEBUG_LOG" 2>/dev/null || true
152
+
153
+ MODIFIED_SPECS=$(git diff --name-only HEAD .specweave/docs/internal/specs/*.md 2>/dev/null || echo "")
145
154
 
146
- node "$SYNC_CLI" --all 2>&1 | tee -a "$DEBUG_LOG" >/dev/null || {
147
- echo "[$(date)] [GitHub] âš ī¸ Batch spec sync failed (non-blocking)" >> "$DEBUG_LOG" 2>/dev/null || true
148
- }
155
+ if [ -n "$MODIFIED_SPECS" ]; then
156
+ echo "[$(date)] [GitHub] 📝 Found modified specs:" >> "$DEBUG_LOG" 2>/dev/null || true
157
+ echo "$MODIFIED_SPECS" >> "$DEBUG_LOG" 2>/dev/null || true
149
158
 
150
- echo "[$(date)] [GitHub] ✅ Batch spec sync complete" >> "$DEBUG_LOG" 2>/dev/null || true
159
+ # Sync each modified spec
160
+ echo "$MODIFIED_SPECS" | while read -r SPEC_FILE; do
161
+ if [ -n "$SPEC_FILE" ]; then
162
+ echo "[$(date)] [GitHub] 🔄 Syncing $SPEC_FILE..." >> "$DEBUG_LOG" 2>/dev/null || true
163
+ (cd "$PROJECT_ROOT" && node "$SYNC_CLI" --spec "$SPEC_FILE" --provider github) 2>&1 | tee -a "$DEBUG_LOG" >/dev/null || true
164
+ fi
165
+ done
166
+
167
+ echo "[$(date)] [GitHub] ✅ Batch spec sync complete" >> "$DEBUG_LOG" 2>/dev/null || true
168
+ else
169
+ echo "[$(date)] [GitHub] â„šī¸ No modified specs found, skipping sync" >> "$DEBUG_LOG" 2>/dev/null || true
170
+ fi
151
171
  fi
152
172
 
153
173
  # ============================================================================
@@ -4,7 +4,7 @@
4
4
  "version": "1.0.0",
5
5
  "author": {
6
6
  "name": "SpecWeave Team",
7
- "email": "anton@spec-weave.com",
7
+ "email": "anton.abyzov@gmail.com",
8
8
  "url": "https://spec-weave.com"
9
9
  },
10
10
  "license": "MIT",