specweave 0.30.6 → 0.30.9

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 (69) hide show
  1. package/dist/plugins/specweave-ado/lib/ado-profile-resolver.d.ts +9 -3
  2. package/dist/plugins/specweave-ado/lib/ado-profile-resolver.d.ts.map +1 -1
  3. package/dist/plugins/specweave-ado/lib/ado-profile-resolver.js +13 -6
  4. package/dist/plugins/specweave-ado/lib/ado-profile-resolver.js.map +1 -1
  5. package/dist/src/cli/helpers/init/external-import-grouping.js +1 -1
  6. package/dist/src/cli/helpers/init/external-import-grouping.js.map +1 -1
  7. package/dist/src/cli/helpers/init/sync-profile-helpers.d.ts.map +1 -1
  8. package/dist/src/cli/helpers/init/sync-profile-helpers.js +3 -2
  9. package/dist/src/cli/helpers/init/sync-profile-helpers.js.map +1 -1
  10. package/dist/src/cli/helpers/issue-tracker/ado.js +2 -2
  11. package/dist/src/cli/helpers/issue-tracker/ado.js.map +1 -1
  12. package/dist/src/cli/helpers/issue-tracker/index.d.ts.map +1 -1
  13. package/dist/src/cli/helpers/issue-tracker/index.js +6 -5
  14. package/dist/src/cli/helpers/issue-tracker/index.js.map +1 -1
  15. package/dist/src/cli/helpers/issue-tracker/sync-config-writer.js +15 -10
  16. package/dist/src/cli/helpers/issue-tracker/sync-config-writer.js.map +1 -1
  17. package/dist/src/cli/workers/clone-worker.js +55 -0
  18. package/dist/src/cli/workers/clone-worker.js.map +1 -1
  19. package/dist/src/cli/workers/living-docs-worker.js +7 -0
  20. package/dist/src/cli/workers/living-docs-worker.js.map +1 -1
  21. package/dist/src/config/types.d.ts +2 -2
  22. package/dist/src/core/config/types.d.ts +15 -1
  23. package/dist/src/core/config/types.d.ts.map +1 -1
  24. package/dist/src/core/config/types.js.map +1 -1
  25. package/dist/src/core/living-docs/discovery.d.ts +9 -0
  26. package/dist/src/core/living-docs/discovery.d.ts.map +1 -1
  27. package/dist/src/core/living-docs/discovery.js +204 -3
  28. package/dist/src/core/living-docs/discovery.js.map +1 -1
  29. package/dist/src/core/living-docs/foundation-builder.d.ts.map +1 -1
  30. package/dist/src/core/living-docs/foundation-builder.js +149 -34
  31. package/dist/src/core/living-docs/foundation-builder.js.map +1 -1
  32. package/dist/src/core/living-docs/living-docs-sync.d.ts +3 -3
  33. package/dist/src/core/living-docs/living-docs-sync.d.ts.map +1 -1
  34. package/dist/src/core/living-docs/living-docs-sync.js +35 -20
  35. package/dist/src/core/living-docs/living-docs-sync.js.map +1 -1
  36. package/dist/src/core/living-docs/suggestions-generator.d.ts +42 -0
  37. package/dist/src/core/living-docs/suggestions-generator.d.ts.map +1 -1
  38. package/dist/src/core/living-docs/suggestions-generator.js +219 -1
  39. package/dist/src/core/living-docs/suggestions-generator.js.map +1 -1
  40. package/dist/src/core/living-docs/umbrella-detector.d.ts +94 -0
  41. package/dist/src/core/living-docs/umbrella-detector.d.ts.map +1 -0
  42. package/dist/src/core/living-docs/umbrella-detector.js +484 -0
  43. package/dist/src/core/living-docs/umbrella-detector.js.map +1 -0
  44. package/dist/src/core/living-docs/workitem-matcher.d.ts +4 -0
  45. package/dist/src/core/living-docs/workitem-matcher.d.ts.map +1 -1
  46. package/dist/src/core/living-docs/workitem-matcher.js +513 -2
  47. package/dist/src/core/living-docs/workitem-matcher.js.map +1 -1
  48. package/dist/src/core/types/config.d.ts +41 -0
  49. package/dist/src/core/types/config.d.ts.map +1 -1
  50. package/dist/src/core/types/config.js.map +1 -1
  51. package/dist/src/core/types/sync-profile.d.ts +279 -2
  52. package/dist/src/core/types/sync-profile.d.ts.map +1 -1
  53. package/dist/src/core/types/sync-profile.js +163 -0
  54. package/dist/src/core/types/sync-profile.js.map +1 -1
  55. package/dist/src/importers/item-converter.d.ts +56 -1
  56. package/dist/src/importers/item-converter.d.ts.map +1 -1
  57. package/dist/src/importers/item-converter.js +217 -64
  58. package/dist/src/importers/item-converter.js.map +1 -1
  59. package/dist/src/init/compliance/types.d.ts +1 -1
  60. package/dist/src/living-docs/epic-id-allocator.d.ts +1 -1
  61. package/dist/src/living-docs/epic-id-allocator.js +1 -1
  62. package/package.json +1 -1
  63. package/plugins/specweave-ado/commands/specweave-ado-close-workitem.md +5 -5
  64. package/plugins/specweave-ado/commands/specweave-ado-create-workitem.md +4 -4
  65. package/plugins/specweave-ado/commands/specweave-ado-sync.md +5 -5
  66. package/plugins/specweave-ado/lib/ado-profile-resolver.js +5 -3
  67. package/plugins/specweave-ado/lib/ado-profile-resolver.ts +16 -6
  68. package/plugins/specweave-ado/lib/ado-project-detector.ts +2 -2
  69. package/src/templates/config.json.template +1 -1
@@ -60,6 +60,10 @@ async function findUserStoryFiles(specsDir) {
60
60
  }
61
61
  /**
62
62
  * Parse a user story markdown file
63
+ *
64
+ * Enhanced for umbrella projects (v0.31.0+):
65
+ * - Extracts team from folder structure (specs/{org}/{team}/...)
66
+ * - Extracts areaPath from frontmatter (ADO imports include this)
63
67
  */
64
68
  async function parseUserStoryFile(filePath, specsDir) {
65
69
  const content = fs.readFileSync(filePath, 'utf-8');
@@ -79,6 +83,40 @@ async function parseUserStoryFile(filePath, specsDir) {
79
83
  const description = descMatch ? descMatch[0] : frontmatter.description || '';
80
84
  // Extract keywords from title and description
81
85
  const keywords = extractKeywords((frontmatter.title || '') + ' ' + description);
86
+ // ==================================================
87
+ // UMBRELLA-SPECIFIC EXTRACTION (v0.31.0+)
88
+ // ==================================================
89
+ // Extract team from folder structure: specs/{org}/{team}/FS-XXX/...
90
+ // pathParts example: ["acme", "inventory", "FS-001", "us-001.md"]
91
+ let team;
92
+ if (pathParts.length >= 2) {
93
+ // Skip if first part looks like a feature ID (non-umbrella structure)
94
+ const potentialTeam = pathParts[1];
95
+ if (potentialTeam && !potentialTeam.startsWith('FS-') && !potentialTeam.startsWith('us-')) {
96
+ team = potentialTeam;
97
+ }
98
+ }
99
+ // Extract areaPath from frontmatter (ADO imports include this)
100
+ // Common frontmatter keys: area_path, areaPath, area, system_area_path
101
+ const areaPath = frontmatter.area_path ||
102
+ frontmatter.areaPath ||
103
+ frontmatter.system_area_path ||
104
+ frontmatter.area ||
105
+ undefined;
106
+ // If no team from folder but we have areaPath, derive team from it
107
+ if (!team && areaPath) {
108
+ const areaSegments = areaPath
109
+ .replace(/\\\\/g, '\\')
110
+ .split('\\')
111
+ .filter((s) => s.length > 0);
112
+ // Second segment is usually the team (after org)
113
+ if (areaSegments.length >= 2) {
114
+ team = areaSegments[1];
115
+ }
116
+ else if (areaSegments.length === 1) {
117
+ team = areaSegments[0];
118
+ }
119
+ }
82
120
  return {
83
121
  id: frontmatter.id || 'unknown',
84
122
  featureId,
@@ -89,7 +127,9 @@ async function parseUserStoryFile(filePath, specsDir) {
89
127
  filePath,
90
128
  externalSource: frontmatter.external_source,
91
129
  externalId: frontmatter.external_id,
92
- keywords
130
+ keywords,
131
+ team,
132
+ areaPath
93
133
  };
94
134
  }
95
135
  catch {
@@ -200,17 +240,62 @@ function findModuleMatches(workItem, modules) {
200
240
  }
201
241
  // Sort by score descending
202
242
  matches.sort((a, b) => b.score - a.score);
203
- // Return top 3 matches at most
243
+ // For umbrella projects, work items may legitimately match multiple related repos
244
+ // (e.g., assetcare-fe, assetcare-be, assetcare-api for the same team).
245
+ // Keep all matches with score >= 50 (high confidence), but limit lower scores to top 3
246
+ const highConfidenceThreshold = 50;
247
+ if (matches.length <= 3) {
248
+ return matches;
249
+ }
250
+ // If we have more than 3 matches, keep all high-confidence ones plus top 3 overall
251
+ const highConfidence = matches.filter(m => m.score >= highConfidenceThreshold);
252
+ if (highConfidence.length >= 3) {
253
+ return highConfidence;
254
+ }
255
+ // Otherwise, return top 3
204
256
  return matches.slice(0, 3);
205
257
  }
206
258
  /**
207
259
  * Score the match between a work item and a module
260
+ *
261
+ * Enhanced for umbrella projects (v0.31.0+):
262
+ * - Area path matching: "Acme\\Inventory" → "inventory-*"
263
+ * - Team prefix matching: team "inventory" → repo "inventory-fe"
264
+ * - File path structure: specs/acme/inventory/ → inventory repos
208
265
  */
209
266
  function scoreMatch(workItem, module) {
210
267
  let score = 0;
211
268
  const reasons = [];
212
269
  const moduleName = module.name.toLowerCase();
213
270
  const modulePathParts = module.path.toLowerCase().split('/');
271
+ // ==================================================
272
+ // UMBRELLA-SPECIFIC MATCHING (v0.31.0+)
273
+ // ==================================================
274
+ // 1. Area path matching (highest priority for ADO imports)
275
+ if (workItem.areaPath) {
276
+ const areaPathScore = scoreAreaPathMatch(workItem.areaPath, moduleName, module.path);
277
+ if (areaPathScore.score > 0) {
278
+ score += areaPathScore.score;
279
+ reasons.push(...areaPathScore.reasons);
280
+ }
281
+ }
282
+ // 2. Team-based matching
283
+ if (workItem.team) {
284
+ const teamScore = scoreTeamMatch(workItem.team, moduleName, module.path);
285
+ if (teamScore.score > 0) {
286
+ score += teamScore.score;
287
+ reasons.push(...teamScore.reasons);
288
+ }
289
+ }
290
+ // 3. File path structure matching (specs/org/team/ → org/team-*)
291
+ const filePathScore = scoreFilePathMatch(workItem.filePath, moduleName, module.path);
292
+ if (filePathScore.score > 0) {
293
+ score += filePathScore.score;
294
+ reasons.push(...filePathScore.reasons);
295
+ }
296
+ // ==================================================
297
+ // STANDARD MATCHING (existing logic)
298
+ // ==================================================
214
299
  // Check title match
215
300
  const titleLower = workItem.title.toLowerCase();
216
301
  if (titleLower.includes(moduleName)) {
@@ -255,6 +340,432 @@ function scoreMatch(workItem, module) {
255
340
  score = Math.min(score, 100);
256
341
  return { score, reasons };
257
342
  }
343
+ /**
344
+ * Score area path match (v0.31.0+ / Enhanced v0.31.1+)
345
+ *
346
+ * ADO area paths like "Acme\\Inventory\\Feature" should match
347
+ * repos like "inventory-fe", "inventory-be", "inv-api", "inventory_service"
348
+ *
349
+ * Uses smart fuzzy matching to handle:
350
+ * - Different naming conventions (camelCase, kebab-case, etc.)
351
+ * - Acronyms (AssetCare → AC)
352
+ * - Common abbreviations (service → svc, frontend → fe)
353
+ */
354
+ function scoreAreaPathMatch(areaPath, moduleName, modulePath) {
355
+ let score = 0;
356
+ const reasons = [];
357
+ // Parse area path segments (handle both \\ and \ separators)
358
+ const areaSegments = areaPath
359
+ .replace(/\\\\/g, '\\')
360
+ .split('\\')
361
+ .map(s => s.trim())
362
+ .filter(s => s.length > 0);
363
+ if (areaSegments.length === 0) {
364
+ return { score: 0, reasons: [] };
365
+ }
366
+ // The team/project is usually the 2nd segment (after org)
367
+ // e.g., "Acme\\Inventory" → "Inventory"
368
+ const teamFromArea = areaSegments.length >= 2
369
+ ? areaSegments[1]
370
+ : areaSegments[0];
371
+ // Use smart fuzzy matching
372
+ const fuzzyResult = smartFuzzyMatch(teamFromArea, moduleName);
373
+ if (fuzzyResult.score > 0) {
374
+ // Scale the score based on match quality
375
+ if (fuzzyResult.confidence === 'high') {
376
+ score += Math.round(fuzzyResult.score * 0.7); // Up to 70 points
377
+ reasons.push(`area path "${teamFromArea}" → "${moduleName}" (${fuzzyResult.matchType}, high confidence)`);
378
+ }
379
+ else if (fuzzyResult.confidence === 'medium') {
380
+ score += Math.round(fuzzyResult.score * 0.5); // Up to 50 points
381
+ reasons.push(`area path "${teamFromArea}" ~ "${moduleName}" (${fuzzyResult.matchType}, medium confidence)`);
382
+ }
383
+ else {
384
+ score += Math.round(fuzzyResult.score * 0.3); // Up to 30 points
385
+ reasons.push(`area path "${teamFromArea}" ~? "${moduleName}" (${fuzzyResult.matchType}, low confidence)`);
386
+ }
387
+ }
388
+ // Also check module path for org/team structure
389
+ const pathSegments = modulePath.toLowerCase().split('/');
390
+ const teamLower = teamFromArea.toLowerCase();
391
+ const teamTokens = tokenize(teamFromArea);
392
+ for (const seg of pathSegments) {
393
+ const segFuzzy = smartFuzzyMatch(teamFromArea, seg);
394
+ if (segFuzzy.score >= 50) {
395
+ score += 15;
396
+ reasons.push(`module path segment "${seg}" matches area team`);
397
+ break;
398
+ }
399
+ }
400
+ return { score, reasons };
401
+ }
402
+ /**
403
+ * Score team-based match (v0.31.0+ / Enhanced v0.31.1+)
404
+ *
405
+ * Uses smart fuzzy matching to handle team name variations:
406
+ * - "DataPlatform" → "data-platform-api", "dp-service", "dataplatform-be"
407
+ * - "UserMgmt" → "user-management-fe", "um-api"
408
+ */
409
+ function scoreTeamMatch(team, moduleName, modulePath) {
410
+ let score = 0;
411
+ const reasons = [];
412
+ // Use smart fuzzy matching
413
+ const fuzzyResult = smartFuzzyMatch(team, moduleName);
414
+ if (fuzzyResult.score > 0) {
415
+ if (fuzzyResult.confidence === 'high') {
416
+ score += Math.round(fuzzyResult.score * 0.6); // Up to 60 points
417
+ reasons.push(`team "${team}" → "${moduleName}" (${fuzzyResult.matchType}, high confidence)`);
418
+ }
419
+ else if (fuzzyResult.confidence === 'medium') {
420
+ score += Math.round(fuzzyResult.score * 0.4); // Up to 40 points
421
+ reasons.push(`team "${team}" ~ "${moduleName}" (${fuzzyResult.matchType}, medium confidence)`);
422
+ }
423
+ else {
424
+ score += Math.round(fuzzyResult.score * 0.25); // Up to 25 points
425
+ reasons.push(`team "${team}" ~? "${moduleName}" (${fuzzyResult.matchType}, low confidence)`);
426
+ }
427
+ }
428
+ return { score, reasons };
429
+ }
430
+ /**
431
+ * Score file path structure match (v0.31.0+ / Enhanced v0.31.1+)
432
+ *
433
+ * Work item at specs/acme/inventory/FS-001/ should match
434
+ * repos at acme/inventory-*, acme/inv-*, inventory-*
435
+ *
436
+ * Uses smart fuzzy matching for flexible team-to-module mapping
437
+ */
438
+ function scoreFilePathMatch(filePath, moduleName, modulePath) {
439
+ let score = 0;
440
+ const reasons = [];
441
+ // Extract team folder from file path
442
+ // Pattern: .specweave/docs/internal/specs/{org}/{team}/...
443
+ const specsMatch = filePath.match(/specs[/\\]([^/\\]+)[/\\]([^/\\]+)/);
444
+ if (!specsMatch) {
445
+ return { score: 0, reasons: [] };
446
+ }
447
+ const [, org, team] = specsMatch;
448
+ // Check if module path starts with org (using fuzzy match)
449
+ const pathSegments = modulePath.split('/');
450
+ if (pathSegments.length > 0) {
451
+ const orgFuzzy = smartFuzzyMatch(org, pathSegments[0]);
452
+ if (orgFuzzy.score >= 50) {
453
+ score += 15;
454
+ reasons.push(`module path org matches "${org}"`);
455
+ }
456
+ }
457
+ // Use smart fuzzy matching for team → module
458
+ const fuzzyResult = smartFuzzyMatch(team, moduleName);
459
+ if (fuzzyResult.score > 0) {
460
+ if (fuzzyResult.confidence === 'high') {
461
+ score += Math.round(fuzzyResult.score * 0.4); // Up to 40 points
462
+ reasons.push(`specs folder "${team}" → "${moduleName}" (${fuzzyResult.matchType})`);
463
+ }
464
+ else if (fuzzyResult.confidence === 'medium') {
465
+ score += Math.round(fuzzyResult.score * 0.25); // Up to 25 points
466
+ reasons.push(`specs folder "${team}" ~ "${moduleName}" (${fuzzyResult.matchType})`);
467
+ }
468
+ else {
469
+ score += Math.round(fuzzyResult.score * 0.15); // Up to 15 points
470
+ reasons.push(`specs folder "${team}" ~? "${moduleName}" (${fuzzyResult.matchType})`);
471
+ }
472
+ }
473
+ return { score, reasons };
474
+ }
475
+ // ==================================================
476
+ // SMART FUZZY MATCHING ENGINE (v0.31.1+)
477
+ // ==================================================
478
+ /**
479
+ * Common abbreviation mappings for enterprise naming
480
+ */
481
+ const ABBREVIATION_MAP = {
482
+ // Component type abbreviations
483
+ 'fe': ['frontend', 'front', 'ui', 'web', 'client'],
484
+ 'be': ['backend', 'back', 'server', 'srv'],
485
+ 'api': ['service', 'svc', 'rest', 'gateway', 'gw'],
486
+ 'db': ['database', 'data', 'store', 'storage'],
487
+ 'ui': ['frontend', 'fe', 'web', 'client', 'app'],
488
+ 'svc': ['service', 'api', 'srv', 'microservice', 'ms'],
489
+ 'srv': ['service', 'server', 'svc'],
490
+ 'gw': ['gateway', 'api', 'proxy'],
491
+ 'ms': ['microservice', 'service', 'svc'],
492
+ 'lib': ['library', 'common', 'shared', 'core'],
493
+ 'pkg': ['package', 'lib', 'module'],
494
+ 'mgr': ['manager', 'management', 'admin'],
495
+ 'mgmt': ['management', 'manager', 'admin'], // Added mgmt
496
+ 'admin': ['administration', 'mgmt', 'management'],
497
+ 'auth': ['authentication', 'authorization', 'identity', 'idp'],
498
+ 'msg': ['messaging', 'message', 'queue', 'mq'],
499
+ 'mq': ['messagequeue', 'messaging', 'queue', 'rabbit', 'kafka'],
500
+ 'cfg': ['config', 'configuration', 'settings'],
501
+ 'infra': ['infrastructure', 'platform', 'devops', 'ops'],
502
+ 'mon': ['monitoring', 'observability', 'metrics', 'telemetry'],
503
+ 'log': ['logging', 'logs', 'audit'],
504
+ 'notif': ['notification', 'notifications', 'alerts'],
505
+ 'inv': ['inventory', 'stock', 'warehouse'],
506
+ 'fin': ['finance', 'financial', 'billing', 'payment'],
507
+ 'hr': ['humanresources', 'people', 'employee'],
508
+ 'crm': ['customerrelations', 'customer', 'sales'],
509
+ 'erp': ['enterprise', 'business', 'core'],
510
+ // Add reverse mappings for common full words
511
+ 'management': ['mgmt', 'mgr'],
512
+ 'manager': ['mgr', 'mgmt'],
513
+ 'frontend': ['fe', 'ui', 'web'],
514
+ 'backend': ['be', 'srv', 'server'],
515
+ 'service': ['svc', 'srv', 'api'],
516
+ };
517
+ /**
518
+ * Reverse lookup: full word → abbreviations
519
+ */
520
+ const REVERSE_ABBREV_MAP = {};
521
+ for (const [abbrev, fullWords] of Object.entries(ABBREVIATION_MAP)) {
522
+ for (const word of fullWords) {
523
+ if (!REVERSE_ABBREV_MAP[word]) {
524
+ REVERSE_ABBREV_MAP[word] = [];
525
+ }
526
+ REVERSE_ABBREV_MAP[word].push(abbrev);
527
+ }
528
+ }
529
+ /**
530
+ * Common suffixes to strip from target for core matching (P1 fix from judge review)
531
+ * Using Set for O(1) lookup instead of array recreation per call
532
+ */
533
+ const CORE_SUFFIXES = new Set([
534
+ 'fe', 'be', 'api', 'web', 'mobile', 'backend', 'frontend',
535
+ 'service', 'srv', 'app', 'worker', 'job', 'cron', 'portal',
536
+ 'admin', 'engine', 'sync', 'analytics', 'data'
537
+ ]);
538
+ /**
539
+ * Tokenize a string into words
540
+ * Handles: camelCase, PascalCase, kebab-case, snake_case, spaces, ALL_CAPS
541
+ *
542
+ * "AssetCare" → ["asset", "care"]
543
+ * "data-platform-api" → ["data", "platform", "api"]
544
+ * "user_management_service" → ["user", "management", "service"]
545
+ * "CRM" → ["crm"] (short all-caps stays as one token)
546
+ * "CRMPortal" → ["crm", "portal"]
547
+ */
548
+ function tokenize(str) {
549
+ // Handle short all-caps strings (3-4 chars) as single token
550
+ if (/^[A-Z]{2,4}$/.test(str)) {
551
+ return [str.toLowerCase()];
552
+ }
553
+ return str
554
+ // Handle all-caps followed by lowercase (CRMPortal → CRM Portal)
555
+ .replace(/([A-Z]{2,})([A-Z][a-z])/g, '$1 $2')
556
+ // Insert space before uppercase letters (camelCase/PascalCase)
557
+ .replace(/([a-z])([A-Z])/g, '$1 $2')
558
+ // Replace separators with spaces
559
+ .replace(/[-_]+/g, ' ')
560
+ // Split and filter
561
+ .toLowerCase()
562
+ .split(/\s+/)
563
+ .filter(word => word.length > 0);
564
+ }
565
+ /**
566
+ * Generate acronym from words
567
+ * ["asset", "care"] → "ac"
568
+ * ["data", "platform"] → "dp"
569
+ */
570
+ function generateAcronym(words) {
571
+ return words
572
+ .map(w => w.charAt(0))
573
+ .join('')
574
+ .toLowerCase();
575
+ }
576
+ /**
577
+ * Calculate word overlap score between two token arrays
578
+ * Returns 0-100 based on how many words match
579
+ */
580
+ function calculateWordOverlap(tokens1, tokens2) {
581
+ if (tokens1.length === 0 || tokens2.length === 0)
582
+ return 0;
583
+ let matches = 0;
584
+ const used = new Set();
585
+ for (const t1 of tokens1) {
586
+ for (let i = 0; i < tokens2.length; i++) {
587
+ if (used.has(i))
588
+ continue;
589
+ const t2 = tokens2[i];
590
+ if (t1 === t2 ||
591
+ wordsAreSimilar(t1, t2)) {
592
+ matches++;
593
+ used.add(i);
594
+ break;
595
+ }
596
+ }
597
+ }
598
+ // Score based on proportion of matches
599
+ const maxTokens = Math.max(tokens1.length, tokens2.length);
600
+ return Math.round((matches / maxTokens) * 100);
601
+ }
602
+ /**
603
+ * Check if two words are similar (abbreviation match, fuzzy match, or prefix)
604
+ */
605
+ function wordsAreSimilar(word1, word2) {
606
+ // Exact match
607
+ if (word1 === word2)
608
+ return true;
609
+ // One is abbreviation of the other
610
+ if (ABBREVIATION_MAP[word1]?.includes(word2))
611
+ return true;
612
+ if (ABBREVIATION_MAP[word2]?.includes(word1))
613
+ return true;
614
+ if (REVERSE_ABBREV_MAP[word1]?.includes(word2))
615
+ return true;
616
+ if (REVERSE_ABBREV_MAP[word2]?.includes(word1))
617
+ return true;
618
+ // Prefix match (at least 3 chars)
619
+ if (word1.length >= 3 && word2.length >= 3) {
620
+ if (word1.startsWith(word2) || word2.startsWith(word1))
621
+ return true;
622
+ }
623
+ // Fuzzy match using Levenshtein distance
624
+ // Allow 1 edit for short words, 2 for longer
625
+ const maxDistance = Math.max(word1.length, word2.length) <= 5 ? 1 : 2;
626
+ if (levenshteinDistance(word1, word2) <= maxDistance)
627
+ return true;
628
+ return false;
629
+ }
630
+ /**
631
+ * Calculate Levenshtein distance between two strings
632
+ */
633
+ function levenshteinDistance(str1, str2) {
634
+ const m = str1.length;
635
+ const n = str2.length;
636
+ // Quick checks
637
+ if (m === 0)
638
+ return n;
639
+ if (n === 0)
640
+ return m;
641
+ if (str1 === str2)
642
+ return 0;
643
+ // Use two-row optimization for memory efficiency
644
+ let prevRow = Array.from({ length: n + 1 }, (_, i) => i);
645
+ let currRow = new Array(n + 1);
646
+ for (let i = 1; i <= m; i++) {
647
+ currRow[0] = i;
648
+ for (let j = 1; j <= n; j++) {
649
+ const cost = str1[i - 1] === str2[j - 1] ? 0 : 1;
650
+ currRow[j] = Math.min(prevRow[j] + 1, // deletion
651
+ currRow[j - 1] + 1, // insertion
652
+ prevRow[j - 1] + cost // substitution
653
+ );
654
+ }
655
+ [prevRow, currRow] = [currRow, prevRow];
656
+ }
657
+ return prevRow[n];
658
+ }
659
+ /**
660
+ * Smart fuzzy match between area path/team and module name
661
+ *
662
+ * Handles:
663
+ * - "AssetCare" → "assetcare-fe", "asset-care-api", "ac-service"
664
+ * - "DataPlatform" → "data-platform-be", "dp-api", "dataplatform-worker"
665
+ * - "UserManagement" → "user-mgmt-svc", "um-api", "usermanagement-fe"
666
+ */
667
+ function smartFuzzyMatch(source, target) {
668
+ // Guard against empty strings (P1 fix from judge review)
669
+ if (!source || !target) {
670
+ return { score: 0, matchType: 'none', confidence: 'low' };
671
+ }
672
+ const sourceTokens = tokenize(source);
673
+ const targetTokens = tokenize(target);
674
+ // Filter out common suffixes from target for core matching
675
+ const targetCoreTokens = targetTokens.filter(t => !CORE_SUFFIXES.has(t));
676
+ // Handle short source strings (like "CRM", "ERP") - they should match as prefixes
677
+ const sourceJoined = sourceTokens.join('');
678
+ const targetCoreJoined = targetCoreTokens.join('');
679
+ const targetFullJoined = targetTokens.join('');
680
+ // Short source (2-4 chars) should match if target starts with it
681
+ if (sourceJoined.length >= 2 && sourceJoined.length <= 4) {
682
+ if (targetFullJoined.startsWith(sourceJoined) || targetCoreJoined.startsWith(sourceJoined)) {
683
+ return { score: 90, matchType: 'short-prefix', confidence: 'high' };
684
+ }
685
+ if (targetFullJoined.includes(sourceJoined)) {
686
+ return { score: 70, matchType: 'short-contains', confidence: 'medium' };
687
+ }
688
+ // Also check original target (before tokenization) for no-separator cases like "crmapi"
689
+ const targetLower = target.toLowerCase();
690
+ if (targetLower.startsWith(sourceJoined)) {
691
+ return { score: 85, matchType: 'raw-prefix', confidence: 'high' };
692
+ }
693
+ }
694
+ // 1. Check for exact token match (after normalization)
695
+ if (sourceJoined === targetCoreJoined) {
696
+ return { score: 100, matchType: 'exact', confidence: 'high' };
697
+ }
698
+ // 2. Check for acronym match
699
+ const sourceAcronym = generateAcronym(sourceTokens);
700
+ const targetAcronym = generateAcronym(targetCoreTokens);
701
+ // Source acronym matches target start (e.g., "AC" matches "ac-service")
702
+ if (sourceAcronym.length >= 2 && targetCoreJoined.startsWith(sourceAcronym)) {
703
+ return { score: 85, matchType: 'acronym-prefix', confidence: 'high' };
704
+ }
705
+ // Target is the acronym (e.g., target "ac" matches source "AssetCare")
706
+ if (targetCoreJoined === sourceAcronym && sourceAcronym.length >= 2) {
707
+ return { score: 80, matchType: 'acronym-exact', confidence: 'high' };
708
+ }
709
+ // 3. Check word overlap with abbreviation expansion
710
+ const wordOverlap = calculateWordOverlap(sourceTokens, targetCoreTokens);
711
+ if (wordOverlap >= 80) {
712
+ return { score: 75, matchType: 'word-overlap-high', confidence: 'high' };
713
+ }
714
+ if (wordOverlap >= 50) {
715
+ return { score: 55, matchType: 'word-overlap-medium', confidence: 'medium' };
716
+ }
717
+ // 4. Check if source is prefix of target (after removing separators)
718
+ if (targetCoreJoined.startsWith(sourceJoined)) {
719
+ return { score: 70, matchType: 'prefix', confidence: 'high' };
720
+ }
721
+ // 5. Check if target contains source
722
+ if (targetCoreJoined.includes(sourceJoined) && sourceJoined.length >= 4) {
723
+ return { score: 50, matchType: 'contains', confidence: 'medium' };
724
+ }
725
+ // 6. Fuzzy string similarity for the whole string
726
+ const distance = levenshteinDistance(sourceJoined, targetCoreJoined);
727
+ const maxLen = Math.max(sourceJoined.length, targetCoreJoined.length);
728
+ const similarity = maxLen > 0 ? (1 - distance / maxLen) * 100 : 0;
729
+ if (similarity >= 80) {
730
+ return { score: 60, matchType: 'fuzzy-high', confidence: 'medium' };
731
+ }
732
+ if (similarity >= 60) {
733
+ return { score: 40, matchType: 'fuzzy-medium', confidence: 'low' };
734
+ }
735
+ // 7. Partial word match (at least one significant word matches)
736
+ if (wordOverlap >= 30 && sourceTokens.length >= 2) {
737
+ return { score: 30, matchType: 'word-overlap-low', confidence: 'low' };
738
+ }
739
+ return { score: 0, matchType: 'none', confidence: 'low' };
740
+ }
741
+ /**
742
+ * Normalize team name for matching (legacy, kept for compatibility)
743
+ */
744
+ function normalizeTeamName(team) {
745
+ return team
746
+ .toLowerCase()
747
+ .replace(/[_\s-]+/g, '') // Remove separators
748
+ .replace(/team$/i, '') // Remove "team" suffix
749
+ .trim();
750
+ }
751
+ /**
752
+ * Normalize module name for matching (legacy, kept for compatibility)
753
+ */
754
+ function normalizeModuleName(name) {
755
+ return name
756
+ .toLowerCase()
757
+ .replace(/-fe$/, '')
758
+ .replace(/-be$/, '')
759
+ .replace(/-api$/, '')
760
+ .replace(/-web$/, '')
761
+ .replace(/-mobile$/, '')
762
+ .replace(/-backend$/, '')
763
+ .replace(/-frontend$/, '')
764
+ .replace(/-service$/, '')
765
+ .replace(/-srv$/, '')
766
+ .replace(/-app$/, '')
767
+ .trim();
768
+ }
258
769
  /**
259
770
  * Calculate priority based on work item count
260
771
  */
@@ -1 +1 @@
1
- {"version":3,"file":"workitem-matcher.js","sourceRoot":"","sources":["../../../../src/core/living-docs/workitem-matcher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workitem-matcher.js","sourceRoot":"","sources":["../../../../src/core/living-docs/workitem-matcher.ts"],"names":[],"mappings":"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"}