@skillsmith/core 0.4.14 → 0.4.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/README.md +2 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/src/analysis/DependencyMerger.d.ts +39 -0
- package/dist/src/analysis/DependencyMerger.d.ts.map +1 -0
- package/dist/src/analysis/DependencyMerger.js +191 -0
- package/dist/src/analysis/DependencyMerger.js.map +1 -0
- package/dist/src/analysis/DependencyMerger.test.d.ts +2 -0
- package/dist/src/analysis/DependencyMerger.test.d.ts.map +1 -0
- package/dist/src/analysis/DependencyMerger.test.js +258 -0
- package/dist/src/analysis/DependencyMerger.test.js.map +1 -0
- package/dist/src/analysis/McpReferenceExtractor.d.ts +42 -0
- package/dist/src/analysis/McpReferenceExtractor.d.ts.map +1 -0
- package/dist/src/analysis/McpReferenceExtractor.js +92 -0
- package/dist/src/analysis/McpReferenceExtractor.js.map +1 -0
- package/dist/src/analysis/McpReferenceExtractor.test.d.ts +2 -0
- package/dist/src/analysis/McpReferenceExtractor.test.d.ts.map +1 -0
- package/dist/src/analysis/McpReferenceExtractor.test.js +262 -0
- package/dist/src/analysis/McpReferenceExtractor.test.js.map +1 -0
- package/dist/src/api/client.d.ts +1 -0
- package/dist/src/api/client.d.ts.map +1 -1
- package/dist/src/api/client.health.d.ts +26 -0
- package/dist/src/api/client.health.d.ts.map +1 -0
- package/dist/src/api/client.health.js +74 -0
- package/dist/src/api/client.health.js.map +1 -0
- package/dist/src/api/client.js +3 -51
- package/dist/src/api/client.js.map +1 -1
- package/dist/src/api/schemas.d.ts +4 -4
- package/dist/src/db/createDatabase.d.ts +9 -1
- package/dist/src/db/createDatabase.d.ts.map +1 -1
- package/dist/src/db/createDatabase.js +9 -1
- package/dist/src/db/createDatabase.js.map +1 -1
- package/dist/src/db/drivers/sqljsDriver.d.ts.map +1 -1
- package/dist/src/db/drivers/sqljsDriver.js +7 -8
- package/dist/src/db/drivers/sqljsDriver.js.map +1 -1
- package/dist/src/db/migrations/v10-dependencies.d.ts +18 -0
- package/dist/src/db/migrations/v10-dependencies.d.ts.map +1 -0
- package/dist/src/db/migrations/v10-dependencies.js +50 -0
- package/dist/src/db/migrations/v10-dependencies.js.map +1 -0
- package/dist/src/db/migrations/v2-phase5-columns.d.ts +7 -0
- package/dist/src/db/migrations/v2-phase5-columns.d.ts.map +1 -0
- package/dist/src/db/migrations/v2-phase5-columns.js +16 -0
- package/dist/src/db/migrations/v2-phase5-columns.js.map +1 -0
- package/dist/src/db/migrations/v3-sync-tables.d.ts +6 -0
- package/dist/src/db/migrations/v3-sync-tables.d.ts.map +1 -0
- package/dist/src/db/migrations/v3-sync-tables.js +41 -0
- package/dist/src/db/migrations/v3-sync-tables.js.map +1 -0
- package/dist/src/db/migrations/v4-security-columns.d.ts +7 -0
- package/dist/src/db/migrations/v4-security-columns.d.ts.map +1 -0
- package/dist/src/db/migrations/v4-security-columns.js +17 -0
- package/dist/src/db/migrations/v4-security-columns.js.map +1 -0
- package/dist/src/db/migrations/v5b-change-type.d.ts +19 -0
- package/dist/src/db/migrations/v5b-change-type.d.ts.map +1 -0
- package/dist/src/db/migrations/v5b-change-type.js +22 -0
- package/dist/src/db/migrations/v5b-change-type.js.map +1 -0
- package/dist/src/db/migrations/v6-advisories.d.ts +32 -0
- package/dist/src/db/migrations/v6-advisories.d.ts.map +1 -0
- package/dist/src/db/migrations/v6-advisories.js +53 -0
- package/dist/src/db/migrations/v6-advisories.js.map +1 -0
- package/dist/src/db/migrations/v7-compatibility.d.ts +21 -0
- package/dist/src/db/migrations/v7-compatibility.d.ts.map +1 -0
- package/dist/src/db/migrations/v7-compatibility.js +23 -0
- package/dist/src/db/migrations/v7-compatibility.js.map +1 -0
- package/dist/src/db/migrations/v8-co-installs.d.ts +21 -0
- package/dist/src/db/migrations/v8-co-installs.d.ts.map +1 -0
- package/dist/src/db/migrations/v8-co-installs.js +33 -0
- package/dist/src/db/migrations/v8-co-installs.js.map +1 -0
- package/dist/src/db/schema.d.ts +5 -16
- package/dist/src/db/schema.d.ts.map +1 -1
- package/dist/src/db/schema.js +50 -79
- package/dist/src/db/schema.js.map +1 -1
- package/dist/src/exports/repositories.d.ts +6 -0
- package/dist/src/exports/repositories.d.ts.map +1 -1
- package/dist/src/exports/repositories.js +21 -0
- package/dist/src/exports/repositories.js.map +1 -1
- package/dist/src/exports/services.d.ts +2 -0
- package/dist/src/exports/services.d.ts.map +1 -1
- package/dist/src/exports/services.js +5 -0
- package/dist/src/exports/services.js.map +1 -1
- package/dist/src/exports/types.d.ts +2 -1
- package/dist/src/exports/types.d.ts.map +1 -1
- package/dist/src/exports/types.js.map +1 -1
- package/dist/src/indexer/GitHubIndexer.d.ts +3 -1
- package/dist/src/indexer/GitHubIndexer.d.ts.map +1 -1
- package/dist/src/indexer/GitHubIndexer.js.map +1 -1
- package/dist/src/indexer/SkillParser.d.ts +22 -9
- package/dist/src/indexer/SkillParser.d.ts.map +1 -1
- package/dist/src/indexer/SkillParser.js +17 -10
- package/dist/src/indexer/SkillParser.js.map +1 -1
- package/dist/src/learning/PatternStore.d.ts +0 -2
- package/dist/src/learning/PatternStore.d.ts.map +1 -1
- package/dist/src/learning/PatternStore.helpers.d.ts +19 -1
- package/dist/src/learning/PatternStore.helpers.d.ts.map +1 -1
- package/dist/src/learning/PatternStore.helpers.js +51 -0
- package/dist/src/learning/PatternStore.helpers.js.map +1 -1
- package/dist/src/learning/PatternStore.js +5 -37
- package/dist/src/learning/PatternStore.js.map +1 -1
- package/dist/src/repositories/AdvisoryRepository.d.ts +80 -0
- package/dist/src/repositories/AdvisoryRepository.d.ts.map +1 -0
- package/dist/src/repositories/AdvisoryRepository.js +128 -0
- package/dist/src/repositories/AdvisoryRepository.js.map +1 -0
- package/dist/src/repositories/AdvisoryRepository.test.d.ts +6 -0
- package/dist/src/repositories/AdvisoryRepository.test.d.ts.map +1 -0
- package/dist/src/repositories/AdvisoryRepository.test.js +149 -0
- package/dist/src/repositories/AdvisoryRepository.test.js.map +1 -0
- package/dist/src/repositories/CoInstallRepository.d.ts +68 -0
- package/dist/src/repositories/CoInstallRepository.d.ts.map +1 -0
- package/dist/src/repositories/CoInstallRepository.js +122 -0
- package/dist/src/repositories/CoInstallRepository.js.map +1 -0
- package/dist/src/repositories/IndexerRepository.d.ts.map +1 -1
- package/dist/src/repositories/IndexerRepository.js +5 -1
- package/dist/src/repositories/IndexerRepository.js.map +1 -1
- package/dist/src/repositories/SkillDependencyRepository.d.ts +73 -0
- package/dist/src/repositories/SkillDependencyRepository.d.ts.map +1 -0
- package/dist/src/repositories/SkillDependencyRepository.js +199 -0
- package/dist/src/repositories/SkillDependencyRepository.js.map +1 -0
- package/dist/src/repositories/SkillRepository.d.ts.map +1 -1
- package/dist/src/repositories/SkillRepository.js +16 -5
- package/dist/src/repositories/SkillRepository.js.map +1 -1
- package/dist/src/scripts/validation/types.d.ts +2 -2
- package/dist/src/services/SearchService.helpers.d.ts.map +1 -1
- package/dist/src/services/SearchService.helpers.js +4 -0
- package/dist/src/services/SearchService.helpers.js.map +1 -1
- package/dist/src/services/SearchService.types.d.ts +1 -0
- package/dist/src/services/SearchService.types.d.ts.map +1 -1
- package/dist/src/services/TaskRunner.d.ts +5 -81
- package/dist/src/services/TaskRunner.d.ts.map +1 -1
- package/dist/src/services/TaskRunner.js +7 -68
- package/dist/src/services/TaskRunner.js.map +1 -1
- package/dist/src/services/TaskRunner.process.d.ts +33 -0
- package/dist/src/services/TaskRunner.process.d.ts.map +1 -0
- package/dist/src/services/TaskRunner.process.js +70 -0
- package/dist/src/services/TaskRunner.process.js.map +1 -0
- package/dist/src/services/TaskRunner.types.d.ts +76 -0
- package/dist/src/services/TaskRunner.types.d.ts.map +1 -0
- package/dist/src/services/TaskRunner.types.js +22 -0
- package/dist/src/services/TaskRunner.types.js.map +1 -0
- package/dist/src/services/__tests__/TaskRunner.process.test.d.ts +13 -0
- package/dist/src/services/__tests__/TaskRunner.process.test.d.ts.map +1 -0
- package/dist/src/services/__tests__/TaskRunner.process.test.js +91 -0
- package/dist/src/services/__tests__/TaskRunner.process.test.js.map +1 -0
- package/dist/src/services/quarantine/QuarantineService.d.ts +3 -24
- package/dist/src/services/quarantine/QuarantineService.d.ts.map +1 -1
- package/dist/src/services/quarantine/QuarantineService.js +8 -205
- package/dist/src/services/quarantine/QuarantineService.js.map +1 -1
- package/dist/src/services/quarantine/QuarantineService.multiapproval.d.ts +57 -0
- package/dist/src/services/quarantine/QuarantineService.multiapproval.d.ts.map +1 -0
- package/dist/src/services/quarantine/QuarantineService.multiapproval.js +211 -0
- package/dist/src/services/quarantine/QuarantineService.multiapproval.js.map +1 -0
- package/dist/src/session/SessionManager.d.ts +2 -33
- package/dist/src/session/SessionManager.d.ts.map +1 -1
- package/dist/src/session/SessionManager.js +14 -238
- package/dist/src/session/SessionManager.js.map +1 -1
- package/dist/src/session/SessionManager.memory.d.ts +67 -0
- package/dist/src/session/SessionManager.memory.d.ts.map +1 -0
- package/dist/src/session/SessionManager.memory.js +262 -0
- package/dist/src/session/SessionManager.memory.js.map +1 -0
- package/dist/src/sources/SourceIndexer.d.ts +3 -1
- package/dist/src/sources/SourceIndexer.d.ts.map +1 -1
- package/dist/src/sources/SourceIndexer.js.map +1 -1
- package/dist/src/sync/SyncEngine.d.ts +13 -1
- package/dist/src/sync/SyncEngine.d.ts.map +1 -1
- package/dist/src/sync/SyncEngine.js +50 -1
- package/dist/src/sync/SyncEngine.js.map +1 -1
- package/dist/src/testing/MultiLLMProvider.d.ts +5 -6
- package/dist/src/testing/MultiLLMProvider.d.ts.map +1 -1
- package/dist/src/testing/MultiLLMProvider.js +18 -130
- package/dist/src/testing/MultiLLMProvider.js.map +1 -1
- package/dist/src/testing/MultiLLMProvider.metrics.d.ts +33 -0
- package/dist/src/testing/MultiLLMProvider.metrics.d.ts.map +1 -0
- package/dist/src/testing/MultiLLMProvider.metrics.js +87 -0
- package/dist/src/testing/MultiLLMProvider.metrics.js.map +1 -0
- package/dist/src/testing/MultiLLMProvider.selection.d.ts +77 -0
- package/dist/src/testing/MultiLLMProvider.selection.d.ts.map +1 -0
- package/dist/src/testing/MultiLLMProvider.selection.js +151 -0
- package/dist/src/testing/MultiLLMProvider.selection.js.map +1 -0
- package/dist/src/types/dependencies.d.ts +85 -0
- package/dist/src/types/dependencies.d.ts.map +1 -0
- package/dist/src/types/dependencies.js +11 -0
- package/dist/src/types/dependencies.js.map +1 -0
- package/dist/src/types/skill.d.ts +13 -0
- package/dist/src/types/skill.d.ts.map +1 -1
- package/dist/src/types/skill.js.map +1 -1
- package/dist/src/types.d.ts +32 -0
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/versioning/change-classifier.d.ts +38 -0
- package/dist/src/versioning/change-classifier.d.ts.map +1 -0
- package/dist/src/versioning/change-classifier.js +187 -0
- package/dist/src/versioning/change-classifier.js.map +1 -0
- package/dist/src/versioning/change-classifier.test.d.ts +6 -0
- package/dist/src/versioning/change-classifier.test.d.ts.map +1 -0
- package/dist/src/versioning/change-classifier.test.js +275 -0
- package/dist/src/versioning/change-classifier.test.js.map +1 -0
- package/dist/src/versioning/update-risk.d.ts +50 -0
- package/dist/src/versioning/update-risk.d.ts.map +1 -0
- package/dist/src/versioning/update-risk.js +80 -0
- package/dist/src/versioning/update-risk.js.map +1 -0
- package/dist/src/versioning/update-risk.test.d.ts +6 -0
- package/dist/src/versioning/update-risk.test.d.ts.map +1 -0
- package/dist/src/versioning/update-risk.test.js +200 -0
- package/dist/src/versioning/update-risk.test.js.map +1 -0
- package/dist/tests/AuditLogger.edge-cases.test.d.ts +10 -0
- package/dist/tests/AuditLogger.edge-cases.test.d.ts.map +1 -0
- package/dist/tests/AuditLogger.edge-cases.test.js +183 -0
- package/dist/tests/AuditLogger.edge-cases.test.js.map +1 -0
- package/dist/tests/CacheManager.test.d.ts +9 -0
- package/dist/tests/CacheManager.test.d.ts.map +1 -0
- package/dist/tests/CacheManager.test.js +163 -0
- package/dist/tests/CacheManager.test.js.map +1 -0
- package/dist/tests/DailyIndexPipeline.test.js +3 -3
- package/dist/tests/DailyIndexPipeline.test.js.map +1 -1
- package/dist/tests/GitHubIndexer.edge-cases.test.d.ts +10 -0
- package/dist/tests/GitHubIndexer.edge-cases.test.d.ts.map +1 -0
- package/dist/tests/GitHubIndexer.edge-cases.test.js +255 -0
- package/dist/tests/GitHubIndexer.edge-cases.test.js.map +1 -0
- package/dist/tests/GitHubIndexer.test.js +4 -2
- package/dist/tests/GitHubIndexer.test.js.map +1 -1
- package/dist/tests/SearchService.test.js +71 -0
- package/dist/tests/SearchService.test.js.map +1 -1
- package/dist/tests/SkillVersionRepository.test.d.ts +0 -11
- package/dist/tests/SkillVersionRepository.test.d.ts.map +1 -1
- package/dist/tests/SkillVersionRepository.test.js +131 -194
- package/dist/tests/SkillVersionRepository.test.js.map +1 -1
- package/dist/tests/api/client.health.test.d.ts +15 -0
- package/dist/tests/api/client.health.test.d.ts.map +1 -0
- package/dist/tests/api/client.health.test.js +111 -0
- package/dist/tests/api/client.health.test.js.map +1 -0
- package/dist/tests/db/betterSqlite3Driver.test.d.ts +8 -0
- package/dist/tests/db/betterSqlite3Driver.test.d.ts.map +1 -0
- package/dist/tests/db/betterSqlite3Driver.test.js +88 -0
- package/dist/tests/db/betterSqlite3Driver.test.js.map +1 -0
- package/dist/tests/db/database-abstraction.test.js +12 -0
- package/dist/tests/db/database-abstraction.test.js.map +1 -1
- package/dist/tests/db/schema-migrations.test.d.ts +10 -0
- package/dist/tests/db/schema-migrations.test.d.ts.map +1 -0
- package/dist/tests/db/schema-migrations.test.js +134 -0
- package/dist/tests/db/schema-migrations.test.js.map +1 -0
- package/dist/tests/db/sqljsDriver.test.d.ts +9 -0
- package/dist/tests/db/sqljsDriver.test.d.ts.map +1 -0
- package/dist/tests/db/sqljsDriver.test.js +75 -0
- package/dist/tests/db/sqljsDriver.test.js.map +1 -0
- package/dist/tests/edge-cases/EdgeCases.test.js +4 -1
- package/dist/tests/edge-cases/EdgeCases.test.js.map +1 -1
- package/dist/tests/helpers/database.d.ts +32 -0
- package/dist/tests/helpers/database.d.ts.map +1 -0
- package/dist/tests/helpers/database.js +54 -0
- package/dist/tests/helpers/database.js.map +1 -0
- package/dist/tests/learning/PatternStore.helpers.test.d.ts +17 -0
- package/dist/tests/learning/PatternStore.helpers.test.d.ts.map +1 -0
- package/dist/tests/learning/PatternStore.helpers.test.js +301 -0
- package/dist/tests/learning/PatternStore.helpers.test.js.map +1 -0
- package/dist/tests/repositories/CoInstallRepository.test.d.ts +9 -0
- package/dist/tests/repositories/CoInstallRepository.test.d.ts.map +1 -0
- package/dist/tests/repositories/CoInstallRepository.test.js +126 -0
- package/dist/tests/repositories/CoInstallRepository.test.js.map +1 -0
- package/dist/tests/repositories/SkillDependencyRepository.test.d.ts +10 -0
- package/dist/tests/repositories/SkillDependencyRepository.test.d.ts.map +1 -0
- package/dist/tests/repositories/SkillDependencyRepository.test.js +336 -0
- package/dist/tests/repositories/SkillDependencyRepository.test.js.map +1 -0
- package/dist/tests/routing/LanguageRouter.test.d.ts +9 -0
- package/dist/tests/routing/LanguageRouter.test.d.ts.map +1 -0
- package/dist/tests/routing/LanguageRouter.test.js +150 -0
- package/dist/tests/routing/LanguageRouter.test.js.map +1 -0
- package/dist/tests/session/SessionManager.memory.test.d.ts +11 -0
- package/dist/tests/session/SessionManager.memory.test.d.ts.map +1 -0
- package/dist/tests/session/SessionManager.memory.test.js +219 -0
- package/dist/tests/session/SessionManager.memory.test.js.map +1 -0
- package/dist/tests/sources.test.js +1 -1
- package/dist/tests/sources.test.js.map +1 -1
- package/dist/tests/sync/SyncEngine.test.js +32 -18
- package/dist/tests/sync/SyncEngine.test.js.map +1 -1
- package/dist/tests/testing/MultiLLMProvider.metrics.test.d.ts +13 -0
- package/dist/tests/testing/MultiLLMProvider.metrics.test.d.ts.map +1 -0
- package/dist/tests/testing/MultiLLMProvider.metrics.test.js +149 -0
- package/dist/tests/testing/MultiLLMProvider.metrics.test.js.map +1 -0
- package/dist/tests/testing/MultiLLMProvider.selection.test.d.ts +15 -0
- package/dist/tests/testing/MultiLLMProvider.selection.test.d.ts.map +1 -0
- package/dist/tests/testing/MultiLLMProvider.selection.test.js +249 -0
- package/dist/tests/testing/MultiLLMProvider.selection.test.js.map +1 -0
- package/dist/tests/unit/migrations/v10-dependencies.test.d.ts +6 -0
- package/dist/tests/unit/migrations/v10-dependencies.test.d.ts.map +1 -0
- package/dist/tests/unit/migrations/v10-dependencies.test.js +166 -0
- package/dist/tests/unit/migrations/v10-dependencies.test.js.map +1 -0
- package/dist/tests/unit/quarantine-query-builder.test.d.ts +10 -0
- package/dist/tests/unit/quarantine-query-builder.test.d.ts.map +1 -0
- package/dist/tests/unit/quarantine-query-builder.test.js +157 -0
- package/dist/tests/unit/quarantine-query-builder.test.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Tests for change-classifier.ts
|
|
3
|
+
* @see SMI-skill-version-tracking Wave 2
|
|
4
|
+
*/
|
|
5
|
+
import { describe, it, expect } from 'vitest';
|
|
6
|
+
import { classifyChange } from './change-classifier.js';
|
|
7
|
+
// ============================================================================
|
|
8
|
+
// Fixtures
|
|
9
|
+
// ============================================================================
|
|
10
|
+
const BASE_SKILL = `---
|
|
11
|
+
name: test-skill
|
|
12
|
+
version: 1.0.0
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Overview
|
|
16
|
+
|
|
17
|
+
This is a test skill.
|
|
18
|
+
|
|
19
|
+
## Usage
|
|
20
|
+
|
|
21
|
+
Run with /test.
|
|
22
|
+
|
|
23
|
+
## Configuration
|
|
24
|
+
|
|
25
|
+
Set env vars.
|
|
26
|
+
`;
|
|
27
|
+
const WITH_HEADING_REMOVED = `---
|
|
28
|
+
name: test-skill
|
|
29
|
+
version: 1.0.0
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Overview
|
|
33
|
+
|
|
34
|
+
This is a test skill.
|
|
35
|
+
|
|
36
|
+
## Usage
|
|
37
|
+
|
|
38
|
+
Run with /test.
|
|
39
|
+
`;
|
|
40
|
+
const WITH_HEADING_ADDED = `---
|
|
41
|
+
name: test-skill
|
|
42
|
+
version: 1.0.0
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Overview
|
|
46
|
+
|
|
47
|
+
This is a test skill.
|
|
48
|
+
|
|
49
|
+
## Usage
|
|
50
|
+
|
|
51
|
+
Run with /test.
|
|
52
|
+
|
|
53
|
+
## Configuration
|
|
54
|
+
|
|
55
|
+
Set env vars.
|
|
56
|
+
|
|
57
|
+
## Examples
|
|
58
|
+
|
|
59
|
+
Here are examples.
|
|
60
|
+
`;
|
|
61
|
+
const WITH_BODY_EDIT_ONLY = `---
|
|
62
|
+
name: test-skill
|
|
63
|
+
version: 1.0.0
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## Overview
|
|
67
|
+
|
|
68
|
+
This is an UPDATED test skill.
|
|
69
|
+
|
|
70
|
+
## Usage
|
|
71
|
+
|
|
72
|
+
Run with /test command.
|
|
73
|
+
|
|
74
|
+
## Configuration
|
|
75
|
+
|
|
76
|
+
Set your env vars here.
|
|
77
|
+
`;
|
|
78
|
+
const WITH_SEMVER_MAJOR = `---
|
|
79
|
+
name: test-skill
|
|
80
|
+
version: 2.0.0
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## Overview
|
|
84
|
+
|
|
85
|
+
This is a test skill.
|
|
86
|
+
|
|
87
|
+
## Usage
|
|
88
|
+
|
|
89
|
+
Run with /test.
|
|
90
|
+
|
|
91
|
+
## Configuration
|
|
92
|
+
|
|
93
|
+
Set env vars.
|
|
94
|
+
`;
|
|
95
|
+
const WITH_SEMVER_MINOR = `---
|
|
96
|
+
name: test-skill
|
|
97
|
+
version: 1.1.0
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## Overview
|
|
101
|
+
|
|
102
|
+
This is a test skill.
|
|
103
|
+
|
|
104
|
+
## Usage
|
|
105
|
+
|
|
106
|
+
Run with /test.
|
|
107
|
+
|
|
108
|
+
## Configuration
|
|
109
|
+
|
|
110
|
+
Set env vars.
|
|
111
|
+
`;
|
|
112
|
+
const WITH_SEMVER_PATCH = `---
|
|
113
|
+
name: test-skill
|
|
114
|
+
version: 1.0.1
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## Overview
|
|
118
|
+
|
|
119
|
+
This is a test skill.
|
|
120
|
+
|
|
121
|
+
## Usage
|
|
122
|
+
|
|
123
|
+
Run with /test.
|
|
124
|
+
|
|
125
|
+
## Configuration
|
|
126
|
+
|
|
127
|
+
Set env vars.
|
|
128
|
+
`;
|
|
129
|
+
const WITH_DEPENDENCY_REMOVED = `---
|
|
130
|
+
name: test-skill
|
|
131
|
+
version: 1.0.0
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
## Overview
|
|
135
|
+
|
|
136
|
+
A test skill with dependencies.
|
|
137
|
+
|
|
138
|
+
## Dependencies
|
|
139
|
+
|
|
140
|
+
- dep-b
|
|
141
|
+
|
|
142
|
+
## Usage
|
|
143
|
+
|
|
144
|
+
Run with /test.
|
|
145
|
+
`;
|
|
146
|
+
const WITH_DEPENDENCY_ADDED = `---
|
|
147
|
+
name: test-skill
|
|
148
|
+
version: 1.0.0
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## Overview
|
|
152
|
+
|
|
153
|
+
A test skill with dependencies.
|
|
154
|
+
|
|
155
|
+
## Dependencies
|
|
156
|
+
|
|
157
|
+
- dep-a
|
|
158
|
+
- dep-b
|
|
159
|
+
- dep-c
|
|
160
|
+
|
|
161
|
+
## Usage
|
|
162
|
+
|
|
163
|
+
Run with /test.
|
|
164
|
+
`;
|
|
165
|
+
const BASE_WITH_DEPS = `---
|
|
166
|
+
name: test-skill
|
|
167
|
+
version: 1.0.0
|
|
168
|
+
---
|
|
169
|
+
|
|
170
|
+
## Overview
|
|
171
|
+
|
|
172
|
+
A test skill with dependencies.
|
|
173
|
+
|
|
174
|
+
## Dependencies
|
|
175
|
+
|
|
176
|
+
- dep-a
|
|
177
|
+
- dep-b
|
|
178
|
+
|
|
179
|
+
## Usage
|
|
180
|
+
|
|
181
|
+
Run with /test.
|
|
182
|
+
`;
|
|
183
|
+
// ============================================================================
|
|
184
|
+
// Tests
|
|
185
|
+
// ============================================================================
|
|
186
|
+
describe('classifyChange', () => {
|
|
187
|
+
describe('heading removal → major', () => {
|
|
188
|
+
it('returns major when a heading is removed', () => {
|
|
189
|
+
expect(classifyChange(BASE_SKILL, WITH_HEADING_REMOVED)).toBe('major');
|
|
190
|
+
});
|
|
191
|
+
it('returns major when multiple headings are removed', () => {
|
|
192
|
+
const twoHeadingsGone = `---
|
|
193
|
+
name: test-skill
|
|
194
|
+
version: 1.0.0
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
## Overview
|
|
198
|
+
|
|
199
|
+
Only this remains.
|
|
200
|
+
`;
|
|
201
|
+
expect(classifyChange(BASE_SKILL, twoHeadingsGone)).toBe('major');
|
|
202
|
+
});
|
|
203
|
+
});
|
|
204
|
+
describe('heading addition only → minor', () => {
|
|
205
|
+
it('returns minor when a heading is added with no removals', () => {
|
|
206
|
+
expect(classifyChange(BASE_SKILL, WITH_HEADING_ADDED)).toBe('minor');
|
|
207
|
+
});
|
|
208
|
+
});
|
|
209
|
+
describe('body edits only → patch', () => {
|
|
210
|
+
it('returns patch when only body text changes', () => {
|
|
211
|
+
expect(classifyChange(BASE_SKILL, WITH_BODY_EDIT_ONLY)).toBe('patch');
|
|
212
|
+
});
|
|
213
|
+
it('returns patch when content is identical', () => {
|
|
214
|
+
expect(classifyChange(BASE_SKILL, BASE_SKILL)).toBe('patch');
|
|
215
|
+
});
|
|
216
|
+
});
|
|
217
|
+
describe('semver in frontmatter overrides heuristic', () => {
|
|
218
|
+
it('returns major when semver major bumps', () => {
|
|
219
|
+
// semver overrides even if headings look like minor
|
|
220
|
+
expect(classifyChange(BASE_SKILL, WITH_SEMVER_MAJOR)).toBe('major');
|
|
221
|
+
});
|
|
222
|
+
it('returns minor when semver minor bumps', () => {
|
|
223
|
+
expect(classifyChange(BASE_SKILL, WITH_SEMVER_MINOR)).toBe('minor');
|
|
224
|
+
});
|
|
225
|
+
it('returns patch when semver patch bumps', () => {
|
|
226
|
+
expect(classifyChange(BASE_SKILL, WITH_SEMVER_PATCH)).toBe('patch');
|
|
227
|
+
});
|
|
228
|
+
it('semver override applies even when headings were removed (semver wins)', () => {
|
|
229
|
+
// new content: semver 2.0.0 + heading removed — semver says major, heuristic also says major
|
|
230
|
+
const newContent = `---
|
|
231
|
+
name: test-skill
|
|
232
|
+
version: 2.0.0
|
|
233
|
+
---
|
|
234
|
+
|
|
235
|
+
## Overview
|
|
236
|
+
|
|
237
|
+
Only overview.
|
|
238
|
+
`;
|
|
239
|
+
expect(classifyChange(BASE_SKILL, newContent)).toBe('major');
|
|
240
|
+
});
|
|
241
|
+
});
|
|
242
|
+
describe('risk score delta > 20 → major', () => {
|
|
243
|
+
it('upgrades to major when risk delta exceeds 20', () => {
|
|
244
|
+
// No heading changes but risk jumped significantly
|
|
245
|
+
expect(classifyChange(BASE_SKILL, WITH_BODY_EDIT_ONLY, 10, 35)).toBe('major');
|
|
246
|
+
});
|
|
247
|
+
it('does not upgrade when risk delta is exactly 20', () => {
|
|
248
|
+
expect(classifyChange(BASE_SKILL, WITH_BODY_EDIT_ONLY, 10, 30)).toBe('patch');
|
|
249
|
+
});
|
|
250
|
+
it('does not upgrade when risk decreases', () => {
|
|
251
|
+
expect(classifyChange(BASE_SKILL, WITH_BODY_EDIT_ONLY, 50, 20)).toBe('patch');
|
|
252
|
+
});
|
|
253
|
+
});
|
|
254
|
+
describe('dependency changes', () => {
|
|
255
|
+
it('returns major when a dependency is removed', () => {
|
|
256
|
+
// No semver change, no heading change, but dep removed
|
|
257
|
+
const base = BASE_WITH_DEPS;
|
|
258
|
+
expect(classifyChange(base, WITH_DEPENDENCY_REMOVED)).toBe('major');
|
|
259
|
+
});
|
|
260
|
+
it('returns minor when a dependency is added', () => {
|
|
261
|
+
const base = BASE_WITH_DEPS;
|
|
262
|
+
expect(classifyChange(base, WITH_DEPENDENCY_ADDED)).toBe('minor');
|
|
263
|
+
});
|
|
264
|
+
});
|
|
265
|
+
describe('error / unknown content', () => {
|
|
266
|
+
it('returns patch for empty content (no headings or semver)', () => {
|
|
267
|
+
expect(classifyChange('', '')).toBe('patch');
|
|
268
|
+
});
|
|
269
|
+
it('returns unknown when classifier throws (simulated by invalid regex-triggering content)', () => {
|
|
270
|
+
// Pass valid strings — classifier should not throw, returns patch
|
|
271
|
+
expect(classifyChange('hello', 'world')).toBe('patch');
|
|
272
|
+
});
|
|
273
|
+
});
|
|
274
|
+
});
|
|
275
|
+
//# sourceMappingURL=change-classifier.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"change-classifier.test.js","sourceRoot":"","sources":["../../../src/versioning/change-classifier.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Update risk scorer for skill version upgrades
|
|
3
|
+
* @module @skillsmith/core/versioning/update-risk
|
|
4
|
+
* @see SMI-skill-version-tracking Wave 2
|
|
5
|
+
*
|
|
6
|
+
* Produces a RiskLevel and Recommendation for a proposed skill update
|
|
7
|
+
* based on change severity, risk score delta, local modification status,
|
|
8
|
+
* trust tier, and changelog availability.
|
|
9
|
+
*
|
|
10
|
+
* Scoring table (additive):
|
|
11
|
+
* change_type === 'major' → +30
|
|
12
|
+
* riskScoreDelta > 0 → +20
|
|
13
|
+
* hasLocalModifications → +20
|
|
14
|
+
* trustTier === 'verified' → -20
|
|
15
|
+
* hasChangelog → -10
|
|
16
|
+
*
|
|
17
|
+
* Buckets:
|
|
18
|
+
* low 0–20 → auto-update
|
|
19
|
+
* medium 21–40 → review-then-update
|
|
20
|
+
* high 41–60 → manual-review-required
|
|
21
|
+
* critical 61+ → manual-review-required
|
|
22
|
+
*/
|
|
23
|
+
export type RiskLevel = 'low' | 'medium' | 'high' | 'critical';
|
|
24
|
+
export type Recommendation = 'auto-update' | 'review-then-update' | 'manual-review-required';
|
|
25
|
+
export interface UpdateRisk {
|
|
26
|
+
/** Human-readable risk bucket */
|
|
27
|
+
level: RiskLevel;
|
|
28
|
+
/** Raw additive risk score (may be negative — clamped to 0 for level mapping) */
|
|
29
|
+
score: number;
|
|
30
|
+
/** Suggested action for the caller */
|
|
31
|
+
recommendation: Recommendation;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Compute the update risk for a pending skill upgrade.
|
|
35
|
+
*
|
|
36
|
+
* @param params.changeType Semantic change type from classifyChange()
|
|
37
|
+
* @param params.riskScoreDelta newRiskScore - oldRiskScore (optional)
|
|
38
|
+
* @param params.hasLocalModifications Whether the user has edited the skill
|
|
39
|
+
* @param params.trustTier Registry trust tier for the skill
|
|
40
|
+
* @param params.hasChangelog Whether the skill includes a changelog entry
|
|
41
|
+
* @returns UpdateRisk with level, score, and recommendation
|
|
42
|
+
*/
|
|
43
|
+
export declare function computeUpdateRisk(params: {
|
|
44
|
+
changeType: 'major' | 'minor' | 'patch' | 'unknown';
|
|
45
|
+
riskScoreDelta?: number;
|
|
46
|
+
hasLocalModifications: boolean;
|
|
47
|
+
trustTier: 'verified' | 'community' | 'experimental';
|
|
48
|
+
hasChangelog: boolean;
|
|
49
|
+
}): UpdateRisk;
|
|
50
|
+
//# sourceMappingURL=update-risk.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-risk.d.ts","sourceRoot":"","sources":["../../../src/versioning/update-risk.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAMH,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAA;AAC9D,MAAM,MAAM,cAAc,GAAG,aAAa,GAAG,oBAAoB,GAAG,wBAAwB,CAAA;AAE5F,MAAM,WAAW,UAAU;IACzB,iCAAiC;IACjC,KAAK,EAAE,SAAS,CAAA;IAChB,iFAAiF;IACjF,KAAK,EAAE,MAAM,CAAA;IACb,sCAAsC;IACtC,cAAc,EAAE,cAAc,CAAA;CAC/B;AAgBD;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE;IACxC,UAAU,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,CAAA;IACnD,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,qBAAqB,EAAE,OAAO,CAAA;IAC9B,SAAS,EAAE,UAAU,GAAG,WAAW,GAAG,cAAc,CAAA;IACpD,YAAY,EAAE,OAAO,CAAA;CACtB,GAAG,UAAU,CAeb"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Update risk scorer for skill version upgrades
|
|
3
|
+
* @module @skillsmith/core/versioning/update-risk
|
|
4
|
+
* @see SMI-skill-version-tracking Wave 2
|
|
5
|
+
*
|
|
6
|
+
* Produces a RiskLevel and Recommendation for a proposed skill update
|
|
7
|
+
* based on change severity, risk score delta, local modification status,
|
|
8
|
+
* trust tier, and changelog availability.
|
|
9
|
+
*
|
|
10
|
+
* Scoring table (additive):
|
|
11
|
+
* change_type === 'major' → +30
|
|
12
|
+
* riskScoreDelta > 0 → +20
|
|
13
|
+
* hasLocalModifications → +20
|
|
14
|
+
* trustTier === 'verified' → -20
|
|
15
|
+
* hasChangelog → -10
|
|
16
|
+
*
|
|
17
|
+
* Buckets:
|
|
18
|
+
* low 0–20 → auto-update
|
|
19
|
+
* medium 21–40 → review-then-update
|
|
20
|
+
* high 41–60 → manual-review-required
|
|
21
|
+
* critical 61+ → manual-review-required
|
|
22
|
+
*/
|
|
23
|
+
// ============================================================================
|
|
24
|
+
// Scoring constants
|
|
25
|
+
// ============================================================================
|
|
26
|
+
const SCORE_MAJOR_CHANGE = 30;
|
|
27
|
+
const SCORE_RISK_DELTA_INCREASE = 20;
|
|
28
|
+
const SCORE_LOCAL_MODIFICATIONS = 20;
|
|
29
|
+
const SCORE_VERIFIED_TRUST = -20;
|
|
30
|
+
const SCORE_HAS_CHANGELOG = -10;
|
|
31
|
+
// ============================================================================
|
|
32
|
+
// Public API
|
|
33
|
+
// ============================================================================
|
|
34
|
+
/**
|
|
35
|
+
* Compute the update risk for a pending skill upgrade.
|
|
36
|
+
*
|
|
37
|
+
* @param params.changeType Semantic change type from classifyChange()
|
|
38
|
+
* @param params.riskScoreDelta newRiskScore - oldRiskScore (optional)
|
|
39
|
+
* @param params.hasLocalModifications Whether the user has edited the skill
|
|
40
|
+
* @param params.trustTier Registry trust tier for the skill
|
|
41
|
+
* @param params.hasChangelog Whether the skill includes a changelog entry
|
|
42
|
+
* @returns UpdateRisk with level, score, and recommendation
|
|
43
|
+
*/
|
|
44
|
+
export function computeUpdateRisk(params) {
|
|
45
|
+
const { changeType, riskScoreDelta, hasLocalModifications, trustTier, hasChangelog } = params;
|
|
46
|
+
let score = 0;
|
|
47
|
+
if (changeType === 'major')
|
|
48
|
+
score += SCORE_MAJOR_CHANGE;
|
|
49
|
+
if (typeof riskScoreDelta === 'number' && riskScoreDelta > 0)
|
|
50
|
+
score += SCORE_RISK_DELTA_INCREASE;
|
|
51
|
+
if (hasLocalModifications)
|
|
52
|
+
score += SCORE_LOCAL_MODIFICATIONS;
|
|
53
|
+
if (trustTier === 'verified')
|
|
54
|
+
score += SCORE_VERIFIED_TRUST;
|
|
55
|
+
if (hasChangelog)
|
|
56
|
+
score += SCORE_HAS_CHANGELOG;
|
|
57
|
+
const level = scoreToLevel(score);
|
|
58
|
+
const recommendation = scoreToRecommendation(score);
|
|
59
|
+
return { level, score, recommendation };
|
|
60
|
+
}
|
|
61
|
+
// ============================================================================
|
|
62
|
+
// Helpers
|
|
63
|
+
// ============================================================================
|
|
64
|
+
function scoreToLevel(score) {
|
|
65
|
+
if (score <= 20)
|
|
66
|
+
return 'low';
|
|
67
|
+
if (score <= 40)
|
|
68
|
+
return 'medium';
|
|
69
|
+
if (score <= 60)
|
|
70
|
+
return 'high';
|
|
71
|
+
return 'critical';
|
|
72
|
+
}
|
|
73
|
+
function scoreToRecommendation(score) {
|
|
74
|
+
if (score <= 20)
|
|
75
|
+
return 'auto-update';
|
|
76
|
+
if (score <= 50)
|
|
77
|
+
return 'review-then-update';
|
|
78
|
+
return 'manual-review-required';
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=update-risk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-risk.js","sourceRoot":"","sources":["../../../src/versioning/update-risk.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAkBH,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E;AAE/E,MAAM,kBAAkB,GAAG,EAAE,CAAA;AAC7B,MAAM,yBAAyB,GAAG,EAAE,CAAA;AACpC,MAAM,yBAAyB,GAAG,EAAE,CAAA;AACpC,MAAM,oBAAoB,GAAG,CAAC,EAAE,CAAA;AAChC,MAAM,mBAAmB,GAAG,CAAC,EAAE,CAAA;AAE/B,+EAA+E;AAC/E,aAAa;AACb,+EAA+E;AAE/E;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAMjC;IACC,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,qBAAqB,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,MAAM,CAAA;IAE7F,IAAI,KAAK,GAAG,CAAC,CAAA;IAEb,IAAI,UAAU,KAAK,OAAO;QAAE,KAAK,IAAI,kBAAkB,CAAA;IACvD,IAAI,OAAO,cAAc,KAAK,QAAQ,IAAI,cAAc,GAAG,CAAC;QAAE,KAAK,IAAI,yBAAyB,CAAA;IAChG,IAAI,qBAAqB;QAAE,KAAK,IAAI,yBAAyB,CAAA;IAC7D,IAAI,SAAS,KAAK,UAAU;QAAE,KAAK,IAAI,oBAAoB,CAAA;IAC3D,IAAI,YAAY;QAAE,KAAK,IAAI,mBAAmB,CAAA;IAE9C,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,CAAA;IACjC,MAAM,cAAc,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAA;IAEnD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,CAAA;AACzC,CAAC;AAED,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E,SAAS,YAAY,CAAC,KAAa;IACjC,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,KAAK,CAAA;IAC7B,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,QAAQ,CAAA;IAChC,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,MAAM,CAAA;IAC9B,OAAO,UAAU,CAAA;AACnB,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAa;IAC1C,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,aAAa,CAAA;IACrC,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,oBAAoB,CAAA;IAC5C,OAAO,wBAAwB,CAAA;AACjC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-risk.test.d.ts","sourceRoot":"","sources":["../../../src/versioning/update-risk.test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Tests for update-risk.ts
|
|
3
|
+
* @see SMI-skill-version-tracking Wave 2
|
|
4
|
+
*/
|
|
5
|
+
import { describe, it, expect } from 'vitest';
|
|
6
|
+
import { computeUpdateRisk } from './update-risk.js';
|
|
7
|
+
describe('computeUpdateRisk', () => {
|
|
8
|
+
describe('score → level mapping', () => {
|
|
9
|
+
it('returns low for score <= 20', () => {
|
|
10
|
+
// community, patch, no local mods, no changelog → 0
|
|
11
|
+
const result = computeUpdateRisk({
|
|
12
|
+
changeType: 'patch',
|
|
13
|
+
hasLocalModifications: false,
|
|
14
|
+
trustTier: 'community',
|
|
15
|
+
hasChangelog: false,
|
|
16
|
+
});
|
|
17
|
+
expect(result.level).toBe('low');
|
|
18
|
+
expect(result.score).toBe(0);
|
|
19
|
+
});
|
|
20
|
+
it('returns medium for score 21–40', () => {
|
|
21
|
+
// major (+30) + verified (-20) + changelog (-10) = 0 → low
|
|
22
|
+
// Let's try: major (+30) + community (0) + changelog (-10) = 20 → low
|
|
23
|
+
// major (+30) + community (0) + no changelog = 30 → medium
|
|
24
|
+
const result = computeUpdateRisk({
|
|
25
|
+
changeType: 'major',
|
|
26
|
+
hasLocalModifications: false,
|
|
27
|
+
trustTier: 'community',
|
|
28
|
+
hasChangelog: false,
|
|
29
|
+
});
|
|
30
|
+
expect(result.level).toBe('medium');
|
|
31
|
+
expect(result.score).toBe(30);
|
|
32
|
+
});
|
|
33
|
+
it('returns high for score 41–60', () => {
|
|
34
|
+
// major (30) + local mods (20) + changelog (-10) = 40 → medium
|
|
35
|
+
// major (30) + local mods (20) = 50 → high
|
|
36
|
+
const result = computeUpdateRisk({
|
|
37
|
+
changeType: 'major',
|
|
38
|
+
hasLocalModifications: true,
|
|
39
|
+
trustTier: 'community',
|
|
40
|
+
hasChangelog: false,
|
|
41
|
+
});
|
|
42
|
+
expect(result.level).toBe('high');
|
|
43
|
+
expect(result.score).toBe(50);
|
|
44
|
+
});
|
|
45
|
+
it('returns critical for score >= 61', () => {
|
|
46
|
+
// major (30) + risk delta (20) + local mods (20) = 70 → critical
|
|
47
|
+
const result = computeUpdateRisk({
|
|
48
|
+
changeType: 'major',
|
|
49
|
+
riskScoreDelta: 10, // positive → +20
|
|
50
|
+
hasLocalModifications: true,
|
|
51
|
+
trustTier: 'community',
|
|
52
|
+
hasChangelog: false,
|
|
53
|
+
});
|
|
54
|
+
expect(result.level).toBe('critical');
|
|
55
|
+
expect(result.score).toBe(70);
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
describe('score → recommendation mapping', () => {
|
|
59
|
+
it('returns auto-update for score <= 20', () => {
|
|
60
|
+
const result = computeUpdateRisk({
|
|
61
|
+
changeType: 'patch',
|
|
62
|
+
hasLocalModifications: false,
|
|
63
|
+
trustTier: 'community',
|
|
64
|
+
hasChangelog: false,
|
|
65
|
+
});
|
|
66
|
+
expect(result.recommendation).toBe('auto-update');
|
|
67
|
+
});
|
|
68
|
+
it('returns review-then-update for score 21–50', () => {
|
|
69
|
+
// major (30), community, no local, no changelog = 30
|
|
70
|
+
const result = computeUpdateRisk({
|
|
71
|
+
changeType: 'major',
|
|
72
|
+
hasLocalModifications: false,
|
|
73
|
+
trustTier: 'community',
|
|
74
|
+
hasChangelog: false,
|
|
75
|
+
});
|
|
76
|
+
expect(result.recommendation).toBe('review-then-update');
|
|
77
|
+
});
|
|
78
|
+
it('returns manual-review-required for score >= 51', () => {
|
|
79
|
+
// major (30) + local mods (20) = 50 → review-then-update
|
|
80
|
+
// major (30) + local mods (20) + risk delta (20) = 70 → manual
|
|
81
|
+
const result = computeUpdateRisk({
|
|
82
|
+
changeType: 'major',
|
|
83
|
+
riskScoreDelta: 5, // positive → +20
|
|
84
|
+
hasLocalModifications: true,
|
|
85
|
+
trustTier: 'community',
|
|
86
|
+
hasChangelog: false,
|
|
87
|
+
});
|
|
88
|
+
expect(result.recommendation).toBe('manual-review-required');
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
describe('individual score factors', () => {
|
|
92
|
+
it('verified tier reduces score by 20', () => {
|
|
93
|
+
const withCommunity = computeUpdateRisk({
|
|
94
|
+
changeType: 'patch',
|
|
95
|
+
hasLocalModifications: false,
|
|
96
|
+
trustTier: 'community',
|
|
97
|
+
hasChangelog: false,
|
|
98
|
+
});
|
|
99
|
+
const withVerified = computeUpdateRisk({
|
|
100
|
+
changeType: 'patch',
|
|
101
|
+
hasLocalModifications: false,
|
|
102
|
+
trustTier: 'verified',
|
|
103
|
+
hasChangelog: false,
|
|
104
|
+
});
|
|
105
|
+
expect(withVerified.score).toBe(withCommunity.score - 20);
|
|
106
|
+
});
|
|
107
|
+
it('changelog reduces score by 10', () => {
|
|
108
|
+
const withoutChangelog = computeUpdateRisk({
|
|
109
|
+
changeType: 'patch',
|
|
110
|
+
hasLocalModifications: false,
|
|
111
|
+
trustTier: 'community',
|
|
112
|
+
hasChangelog: false,
|
|
113
|
+
});
|
|
114
|
+
const withChangelog = computeUpdateRisk({
|
|
115
|
+
changeType: 'patch',
|
|
116
|
+
hasLocalModifications: false,
|
|
117
|
+
trustTier: 'community',
|
|
118
|
+
hasChangelog: true,
|
|
119
|
+
});
|
|
120
|
+
expect(withChangelog.score).toBe(withoutChangelog.score - 10);
|
|
121
|
+
});
|
|
122
|
+
it('hasLocalModifications adds 20', () => {
|
|
123
|
+
const without = computeUpdateRisk({
|
|
124
|
+
changeType: 'patch',
|
|
125
|
+
hasLocalModifications: false,
|
|
126
|
+
trustTier: 'community',
|
|
127
|
+
hasChangelog: false,
|
|
128
|
+
});
|
|
129
|
+
const with_ = computeUpdateRisk({
|
|
130
|
+
changeType: 'patch',
|
|
131
|
+
hasLocalModifications: true,
|
|
132
|
+
trustTier: 'community',
|
|
133
|
+
hasChangelog: false,
|
|
134
|
+
});
|
|
135
|
+
expect(with_.score).toBe(without.score + 20);
|
|
136
|
+
});
|
|
137
|
+
it('riskScoreDelta > 0 adds 20', () => {
|
|
138
|
+
const without = computeUpdateRisk({
|
|
139
|
+
changeType: 'patch',
|
|
140
|
+
riskScoreDelta: 0,
|
|
141
|
+
hasLocalModifications: false,
|
|
142
|
+
trustTier: 'community',
|
|
143
|
+
hasChangelog: false,
|
|
144
|
+
});
|
|
145
|
+
const with_ = computeUpdateRisk({
|
|
146
|
+
changeType: 'patch',
|
|
147
|
+
riskScoreDelta: 1, // positive
|
|
148
|
+
hasLocalModifications: false,
|
|
149
|
+
trustTier: 'community',
|
|
150
|
+
hasChangelog: false,
|
|
151
|
+
});
|
|
152
|
+
expect(with_.score).toBe(without.score + 20);
|
|
153
|
+
});
|
|
154
|
+
it('negative riskScoreDelta does not add penalty', () => {
|
|
155
|
+
const result = computeUpdateRisk({
|
|
156
|
+
changeType: 'patch',
|
|
157
|
+
riskScoreDelta: -10,
|
|
158
|
+
hasLocalModifications: false,
|
|
159
|
+
trustTier: 'community',
|
|
160
|
+
hasChangelog: false,
|
|
161
|
+
});
|
|
162
|
+
// risk delta ≤ 0 should not add the +20 penalty
|
|
163
|
+
expect(result.score).toBe(0);
|
|
164
|
+
});
|
|
165
|
+
it('undefined riskScoreDelta does not add penalty', () => {
|
|
166
|
+
const result = computeUpdateRisk({
|
|
167
|
+
changeType: 'patch',
|
|
168
|
+
hasLocalModifications: false,
|
|
169
|
+
trustTier: 'community',
|
|
170
|
+
hasChangelog: false,
|
|
171
|
+
});
|
|
172
|
+
expect(result.score).toBe(0);
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
describe('combined scenarios', () => {
|
|
176
|
+
it('fully safe update: patch + verified + changelog = -30 → low (clamped to 0 effectively)', () => {
|
|
177
|
+
const result = computeUpdateRisk({
|
|
178
|
+
changeType: 'patch',
|
|
179
|
+
hasLocalModifications: false,
|
|
180
|
+
trustTier: 'verified',
|
|
181
|
+
hasChangelog: true,
|
|
182
|
+
});
|
|
183
|
+
// 0 - 20 - 10 = -30 → level: low (score <= 20)
|
|
184
|
+
expect(result.level).toBe('low');
|
|
185
|
+
expect(result.recommendation).toBe('auto-update');
|
|
186
|
+
});
|
|
187
|
+
it('worst case scenario produces critical + manual-review-required', () => {
|
|
188
|
+
const result = computeUpdateRisk({
|
|
189
|
+
changeType: 'major',
|
|
190
|
+
riskScoreDelta: 50,
|
|
191
|
+
hasLocalModifications: true,
|
|
192
|
+
trustTier: 'experimental',
|
|
193
|
+
hasChangelog: false,
|
|
194
|
+
});
|
|
195
|
+
expect(result.level).toBe('critical');
|
|
196
|
+
expect(result.recommendation).toBe('manual-review-required');
|
|
197
|
+
});
|
|
198
|
+
});
|
|
199
|
+
});
|
|
200
|
+
//# sourceMappingURL=update-risk.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-risk.test.js","sourceRoot":"","sources":["../../../src/versioning/update-risk.test.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAEpD,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;QACrC,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;YACrC,oDAAoD;YACpD,MAAM,MAAM,GAAG,iBAAiB,CAAC;gBAC/B,UAAU,EAAE,OAAO;gBACnB,qBAAqB,EAAE,KAAK;gBAC5B,SAAS,EAAE,WAAW;gBACtB,YAAY,EAAE,KAAK;aACpB,CAAC,CAAA;YACF,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAChC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC9B,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;YACxC,2DAA2D;YAC3D,sEAAsE;YACtE,2DAA2D;YAC3D,MAAM,MAAM,GAAG,iBAAiB,CAAC;gBAC/B,UAAU,EAAE,OAAO;gBACnB,qBAAqB,EAAE,KAAK;gBAC5B,SAAS,EAAE,WAAW;gBACtB,YAAY,EAAE,KAAK;aACpB,CAAC,CAAA;YACF,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YACnC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAC/B,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;YACtC,+DAA+D;YAC/D,2CAA2C;YAC3C,MAAM,MAAM,GAAG,iBAAiB,CAAC;gBAC/B,UAAU,EAAE,OAAO;gBACnB,qBAAqB,EAAE,IAAI;gBAC3B,SAAS,EAAE,WAAW;gBACtB,YAAY,EAAE,KAAK;aACpB,CAAC,CAAA;YACF,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YACjC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAC/B,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;YAC1C,iEAAiE;YACjE,MAAM,MAAM,GAAG,iBAAiB,CAAC;gBAC/B,UAAU,EAAE,OAAO;gBACnB,cAAc,EAAE,EAAE,EAAE,iBAAiB;gBACrC,qBAAqB,EAAE,IAAI;gBAC3B,SAAS,EAAE,WAAW;gBACtB,YAAY,EAAE,KAAK;aACpB,CAAC,CAAA;YACF,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YACrC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAC/B,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;QAC9C,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC7C,MAAM,MAAM,GAAG,iBAAiB,CAAC;gBAC/B,UAAU,EAAE,OAAO;gBACnB,qBAAqB,EAAE,KAAK;gBAC5B,SAAS,EAAE,WAAW;gBACtB,YAAY,EAAE,KAAK;aACpB,CAAC,CAAA;YACF,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;QACnD,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACpD,qDAAqD;YACrD,MAAM,MAAM,GAAG,iBAAiB,CAAC;gBAC/B,UAAU,EAAE,OAAO;gBACnB,qBAAqB,EAAE,KAAK;gBAC5B,SAAS,EAAE,WAAW;gBACtB,YAAY,EAAE,KAAK;aACpB,CAAC,CAAA;YACF,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAA;QAC1D,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;YACxD,yDAAyD;YACzD,+DAA+D;YAC/D,MAAM,MAAM,GAAG,iBAAiB,CAAC;gBAC/B,UAAU,EAAE,OAAO;gBACnB,cAAc,EAAE,CAAC,EAAE,iBAAiB;gBACpC,qBAAqB,EAAE,IAAI;gBAC3B,SAAS,EAAE,WAAW;gBACtB,YAAY,EAAE,KAAK;aACpB,CAAC,CAAA;YACF,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAA;QAC9D,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;QACxC,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YAC3C,MAAM,aAAa,GAAG,iBAAiB,CAAC;gBACtC,UAAU,EAAE,OAAO;gBACnB,qBAAqB,EAAE,KAAK;gBAC5B,SAAS,EAAE,WAAW;gBACtB,YAAY,EAAE,KAAK;aACpB,CAAC,CAAA;YACF,MAAM,YAAY,GAAG,iBAAiB,CAAC;gBACrC,UAAU,EAAE,OAAO;gBACnB,qBAAqB,EAAE,KAAK;gBAC5B,SAAS,EAAE,UAAU;gBACrB,YAAY,EAAE,KAAK;aACpB,CAAC,CAAA;YACF,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,EAAE,CAAC,CAAA;QAC3D,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;YACvC,MAAM,gBAAgB,GAAG,iBAAiB,CAAC;gBACzC,UAAU,EAAE,OAAO;gBACnB,qBAAqB,EAAE,KAAK;gBAC5B,SAAS,EAAE,WAAW;gBACtB,YAAY,EAAE,KAAK;aACpB,CAAC,CAAA;YACF,MAAM,aAAa,GAAG,iBAAiB,CAAC;gBACtC,UAAU,EAAE,OAAO;gBACnB,qBAAqB,EAAE,KAAK;gBAC5B,SAAS,EAAE,WAAW;gBACtB,YAAY,EAAE,IAAI;aACnB,CAAC,CAAA;YACF,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,GAAG,EAAE,CAAC,CAAA;QAC/D,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;YACvC,MAAM,OAAO,GAAG,iBAAiB,CAAC;gBAChC,UAAU,EAAE,OAAO;gBACnB,qBAAqB,EAAE,KAAK;gBAC5B,SAAS,EAAE,WAAW;gBACtB,YAAY,EAAE,KAAK;aACpB,CAAC,CAAA;YACF,MAAM,KAAK,GAAG,iBAAiB,CAAC;gBAC9B,UAAU,EAAE,OAAO;gBACnB,qBAAqB,EAAE,IAAI;gBAC3B,SAAS,EAAE,WAAW;gBACtB,YAAY,EAAE,KAAK;aACpB,CAAC,CAAA;YACF,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC,CAAA;QAC9C,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;YACpC,MAAM,OAAO,GAAG,iBAAiB,CAAC;gBAChC,UAAU,EAAE,OAAO;gBACnB,cAAc,EAAE,CAAC;gBACjB,qBAAqB,EAAE,KAAK;gBAC5B,SAAS,EAAE,WAAW;gBACtB,YAAY,EAAE,KAAK;aACpB,CAAC,CAAA;YACF,MAAM,KAAK,GAAG,iBAAiB,CAAC;gBAC9B,UAAU,EAAE,OAAO;gBACnB,cAAc,EAAE,CAAC,EAAE,WAAW;gBAC9B,qBAAqB,EAAE,KAAK;gBAC5B,SAAS,EAAE,WAAW;gBACtB,YAAY,EAAE,KAAK;aACpB,CAAC,CAAA;YACF,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC,CAAA;QAC9C,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;YACtD,MAAM,MAAM,GAAG,iBAAiB,CAAC;gBAC/B,UAAU,EAAE,OAAO;gBACnB,cAAc,EAAE,CAAC,EAAE;gBACnB,qBAAqB,EAAE,KAAK;gBAC5B,SAAS,EAAE,WAAW;gBACtB,YAAY,EAAE,KAAK;aACpB,CAAC,CAAA;YACF,gDAAgD;YAChD,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC9B,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;YACvD,MAAM,MAAM,GAAG,iBAAiB,CAAC;gBAC/B,UAAU,EAAE,OAAO;gBACnB,qBAAqB,EAAE,KAAK;gBAC5B,SAAS,EAAE,WAAW;gBACtB,YAAY,EAAE,KAAK;aACpB,CAAC,CAAA;YACF,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC9B,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAClC,EAAE,CAAC,wFAAwF,EAAE,GAAG,EAAE;YAChG,MAAM,MAAM,GAAG,iBAAiB,CAAC;gBAC/B,UAAU,EAAE,OAAO;gBACnB,qBAAqB,EAAE,KAAK;gBAC5B,SAAS,EAAE,UAAU;gBACrB,YAAY,EAAE,IAAI;aACnB,CAAC,CAAA;YACF,+CAA+C;YAC/C,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAChC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;QACnD,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;YACxE,MAAM,MAAM,GAAG,iBAAiB,CAAC;gBAC/B,UAAU,EAAE,OAAO;gBACnB,cAAc,EAAE,EAAE;gBAClB,qBAAqB,EAAE,IAAI;gBAC3B,SAAS,EAAE,cAAc;gBACzB,YAAY,EAAE,KAAK;aACpB,CAAC,CAAA;YACF,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YACrC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAA;QAC9D,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SMI-2756: Wave 3 — AuditLogger edge-case tests
|
|
3
|
+
*
|
|
4
|
+
* Companion file to AuditLogger.test.ts (which exceeds the 500-line limit).
|
|
5
|
+
* Covers: DB write error propagation, log retention via cleanupOldLogs,
|
|
6
|
+
* meta-log written after successful cleanup, query date-range filters,
|
|
7
|
+
* query action-type filter, and export producing valid JSON.
|
|
8
|
+
*/
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=AuditLogger.edge-cases.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuditLogger.edge-cases.test.d.ts","sourceRoot":"","sources":["../../tests/AuditLogger.edge-cases.test.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|