@thomasminh1995/depverdict 0.6.0-alpha.1

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 (252) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +518 -0
  3. package/bin/depverdict.js +7 -0
  4. package/bin/upgradelens.js +7 -0
  5. package/docs/GR-01-Semantic-Grounding-Failure-Analysis.md +309 -0
  6. package/docs/GR-02-Versioned-Action-Evaluation-Criteria.md +187 -0
  7. package/docs/GR-03-Extractive-Contract-Safety-Experiment.md +242 -0
  8. package/docs/GR-04-Versioned-Production-Extractive-Contract.md +154 -0
  9. package/docs/IA-01-Repository-Usage-Discovery.md +122 -0
  10. package/docs/IA-02-Repository-Impact-Analysis.md +118 -0
  11. package/docs/IA-03-Repository-Impact-Evidence.md +160 -0
  12. package/docs/IA-04-CLI-Orchestration.md +235 -0
  13. package/docs/IA-05-Real-Provider-Validation.md +235 -0
  14. package/docs/IA-05-VinGrade-Validation.md +339 -0
  15. package/docs/MVP-01.md +48 -0
  16. package/docs/MVP-02-Architecture.md +536 -0
  17. package/docs/MVP-02-CLI-HTTP-Runtime.md +50 -0
  18. package/docs/MVP-02-HTTP-Lifecycle.md +37 -0
  19. package/docs/MVP-02-Knowledge-Manifest-Generation.md +75 -0
  20. package/docs/MVP-02-Knowledge-Manifest.md +279 -0
  21. package/docs/MVP-02-Knowledge-Research-Orchestration.md +62 -0
  22. package/docs/MVP-02-Knowledge-Store.md +87 -0
  23. package/docs/MVP-02-PyPI-Registry-Adapter.md +97 -0
  24. package/docs/MVP-02-Research-Planning.md +196 -0
  25. package/docs/MVP-02-Source-Provenance.md +81 -0
  26. package/docs/MVP-02-npm-Registry-Adapter.md +99 -0
  27. package/docs/RR-01-End-to-End-and-Real-Provider-Validation.md +393 -0
  28. package/docs/RR-01-RERUN-Extractive-Contract-Validation.md +566 -0
  29. package/docs/RR-02-Full-Product-Workflow-and-Developer-CLI-UX-Review.md +35 -0
  30. package/docs/RR02-FIX-01-Persistent-Qualification-Resolution.md +32 -0
  31. package/docs/RR02-FIX-02-Stage-aware-CLI-Progress-and-Heartbeat.md +28 -0
  32. package/docs/RR02-FIX-03-npm-Capture-Evidence-Exclusion.md +33 -0
  33. package/docs/RR02-FIX-03A-Complete-Package-Exclusion-and-Evidence-Commit.md +223 -0
  34. package/docs/RR02-FIX-04-Event-loop-safe-Heartbeat.md +393 -0
  35. package/docs/RR02-FIX-05-Materialize-Persisted-Qualification.md +207 -0
  36. package/docs/RR02-RERUN-CLI-Qualification-Progress-UX-and-Package-Validation.md +342 -0
  37. package/docs/VinGrade-MVP-02-Validation.md +480 -0
  38. package/docs/VinGrade-RC02-Live-Validation.md +273 -0
  39. package/docs/ai-capability-discovery.md +573 -0
  40. package/docs/ai-engineering-production-readiness.md +390 -0
  41. package/docs/ai-engineering-review.md +251 -0
  42. package/docs/ai-runtime-governance-discovery.md +754 -0
  43. package/docs/architecture-overview.md +78 -0
  44. package/docs/cli-progress.md +111 -0
  45. package/docs/decisions/diff-01-brand-distribution-identity.md +450 -0
  46. package/docs/decisions/diff-02-identity-compatibility-contract.md +274 -0
  47. package/docs/decisions/diff-03-repository-docs-community-migration.md +165 -0
  48. package/docs/decisions/diff-04-release-evidence-gap-acceptance.md +110 -0
  49. package/docs/discovery/mvp-05-ai-migration-planning-discovery.md +350 -0
  50. package/docs/gateway-runtime-discovery.md +614 -0
  51. package/docs/live-ai-validation.md +299 -0
  52. package/docs/migration-planning-qualification-resolution.md +99 -0
  53. package/docs/migrations/upgradelens-to-depverdict.md +97 -0
  54. package/docs/mp-r03-deterministic-upgrade-decision-architecture.md +135 -0
  55. package/docs/mp-r04-evidence-bounded-migration-handoff-architecture.md +116 -0
  56. package/docs/mp-r05-product-completion-and-decision-first-cli-architecture.md +162 -0
  57. package/docs/mvp-05-deterministic-context-runtime.md +127 -0
  58. package/docs/mvp-05-migration-checklist-contract.md +166 -0
  59. package/docs/mvp-05-migration-checklist-orchestration.md +105 -0
  60. package/docs/mvp-05-migration-evaluation-and-qualification.md +135 -0
  61. package/docs/mvp-05-provider-neutral-generator.md +79 -0
  62. package/docs/ollama-local-smoke-validation.md +156 -0
  63. package/docs/openai-compatible-runtime-discovery.md +789 -0
  64. package/docs/openrouter-one-dependency-validation.md +205 -0
  65. package/docs/oss-02-package-guard-hardening-architecture.md +131 -0
  66. package/docs/oss-04-public-ci-package-metadata-architecture.md +142 -0
  67. package/docs/package-content-policy.md +98 -0
  68. package/docs/releases/v0.5.0-technical-preview.md +114 -0
  69. package/docs/releases/v0.6.0-alpha.1-depverdict-preview.md +101 -0
  70. package/docs/reviews/diff-02-identity-contract-compatibility.md +413 -0
  71. package/docs/reviews/diff-03-repository-docs-community-migration.md +364 -0
  72. package/docs/reviews/diff-04-depverdict-distribution-identity-readiness-rereview.md +453 -0
  73. package/docs/reviews/diff-04-fix-post-rename-identity-release-remediation.md +310 -0
  74. package/docs/reviews/diff-05-final-preview-distribution-qualification.md +561 -0
  75. package/docs/reviews/mvp-05-final-product-value-workflow-rereview.md +471 -0
  76. package/docs/reviews/mvp-05-product-workflow-review.md +605 -0
  77. package/docs/reviews/oss-01-duplicate-artifact-investigation-cleanup.md +411 -0
  78. package/docs/reviews/oss-02-package-guard-hardening.md +303 -0
  79. package/docs/reviews/oss-03-community-scaffolding.md +378 -0
  80. package/docs/reviews/oss-04-public-ci-package-metadata.md +439 -0
  81. package/docs/reviews/oss-05-technical-preview-qualification.md +482 -0
  82. package/docs/reviews/upgradelens-vs-upgradedepdetective-source-comparison.md +355 -0
  83. package/docs/reviews/v0.5.0-pre-release-smoke.md +263 -0
  84. package/docs/reviews/v0.5.0-version-bump-release-verification.md +306 -0
  85. package/docs/runtime-contract-discovery.md +521 -0
  86. package/docs/structured-output-compatibility-report.md +100 -0
  87. package/docs/ts-fix-01-exact-duplicate-occurrence-target-selection-architecture.md +111 -0
  88. package/docs/version-analysis-architecture.md +827 -0
  89. package/eval/README.md +86 -0
  90. package/eval/datasets/generic/declared-constraint.json +59 -0
  91. package/eval/datasets/generic/evidence-conflict.json +73 -0
  92. package/eval/datasets/generic/major-breaking-release.json +66 -0
  93. package/eval/datasets/generic/missing-evidence.json +46 -0
  94. package/eval/datasets/generic/patch-release-low.json +59 -0
  95. package/eval/datasets/node/axios-patch-low.json +59 -0
  96. package/eval/datasets/node/react-major-breaking.json +66 -0
  97. package/eval/datasets/node/react-minor-compatibility.json +66 -0
  98. package/eval/datasets/python/fastapi-deprecation.json +66 -0
  99. package/eval/datasets/python/pydantic-major-breaking.json +66 -0
  100. package/eval/migration-planning/golden-dataset-v2.json +306 -0
  101. package/eval/migration-planning/golden-dataset.json +214 -0
  102. package/eval/schemas/expected-result.schema.json +88 -0
  103. package/eval/schemas/golden-case.schema.json +181 -0
  104. package/package.json +57 -0
  105. package/schemas/ai-scorecard.schema.json +132 -0
  106. package/schemas/benchmark-report.schema.json +189 -0
  107. package/schemas/benchmark.schema.json +55 -0
  108. package/schemas/capability-profile.schema.json +44 -0
  109. package/schemas/conformance-report.schema.json +150 -0
  110. package/schemas/deployment-profile.schema.json +64 -0
  111. package/schemas/evaluation-report.schema.json +158 -0
  112. package/schemas/knowledge-evidence-bundle.schema.json +150 -0
  113. package/schemas/knowledge-manifest.schema.json +548 -0
  114. package/schemas/metrics.schema.json +178 -0
  115. package/schemas/migration-checklist-extractive-candidate.schema.json +42 -0
  116. package/schemas/migration-checklist.schema.json +706 -0
  117. package/schemas/migration-evaluation-dataset-v2.schema.json +208 -0
  118. package/schemas/migration-evaluation-dataset.schema.json +204 -0
  119. package/schemas/migration-planning-qualification-record.schema.json +234 -0
  120. package/schemas/project-manifest.schema.json +308 -0
  121. package/schemas/qualification-record.schema.json +56 -0
  122. package/schemas/repository-impact-evidence.schema.json +232 -0
  123. package/schemas/repository-impact.schema.json +202 -0
  124. package/schemas/upgrade-decision.schema.json +273 -0
  125. package/schemas/usage-index.schema.json +179 -0
  126. package/schemas/version-analysis.schema.json +449 -0
  127. package/src/ai-runtime-debug.js +325 -0
  128. package/src/ai-runtime-error.js +42 -0
  129. package/src/ai-runtime.js +174 -0
  130. package/src/ai-scorecard.js +204 -0
  131. package/src/ai-version-analysis.js +484 -0
  132. package/src/artifact-root-compatibility.js +91 -0
  133. package/src/benchmark-report.js +111 -0
  134. package/src/benchmark-runner.js +191 -0
  135. package/src/canonical-json.js +69 -0
  136. package/src/cli.js +1299 -0
  137. package/src/conformance-report.js +158 -0
  138. package/src/conformance-runner.js +253 -0
  139. package/src/constants.js +73 -0
  140. package/src/cooperative-scheduler.js +79 -0
  141. package/src/dependencies.js +44 -0
  142. package/src/dependency-ai-context.js +625 -0
  143. package/src/detectors.js +253 -0
  144. package/src/discovery.js +234 -0
  145. package/src/ecosystem-version-adapter.js +294 -0
  146. package/src/environment-compatibility.js +77 -0
  147. package/src/evaluation-comparator.js +158 -0
  148. package/src/evaluation-report.js +76 -0
  149. package/src/evaluation-runner.js +248 -0
  150. package/src/evidence-source-adapter.js +472 -0
  151. package/src/files.js +89 -0
  152. package/src/governance-diagnostics.js +64 -0
  153. package/src/governance-loader.js +63 -0
  154. package/src/governance-metadata.js +346 -0
  155. package/src/governance-validator.js +360 -0
  156. package/src/http/bounded-fetch.js +278 -0
  157. package/src/http/cli-http-runtime.js +44 -0
  158. package/src/impact/input-loader.js +157 -0
  159. package/src/impact/matcher.js +40 -0
  160. package/src/impact/repository-impact.js +199 -0
  161. package/src/impact/runtime.js +24 -0
  162. package/src/impact/status.js +62 -0
  163. package/src/impact/writer.js +30 -0
  164. package/src/impact-evidence/input-loader.js +202 -0
  165. package/src/impact-evidence/repository-impact-evidence.js +234 -0
  166. package/src/impact-evidence/runtime.js +16 -0
  167. package/src/impact-evidence/writer.js +30 -0
  168. package/src/index.js +563 -0
  169. package/src/installed-version-baseline.js +196 -0
  170. package/src/knowledge-cache.js +324 -0
  171. package/src/knowledge-evidence-bundle.js +101 -0
  172. package/src/knowledge-evidence-producer.js +233 -0
  173. package/src/knowledge-manifest-builder.js +188 -0
  174. package/src/knowledge-manifest-writer.js +32 -0
  175. package/src/knowledge-manifest.js +255 -0
  176. package/src/knowledge-research.js +615 -0
  177. package/src/metrics-engine.js +205 -0
  178. package/src/migration-checklist/ai-candidate.js +320 -0
  179. package/src/migration-checklist/assembler.js +37 -0
  180. package/src/migration-checklist/context-runtime.js +828 -0
  181. package/src/migration-checklist/evaluation/action-criteria.js +244 -0
  182. package/src/migration-checklist/evaluation/comparator-v2.js +332 -0
  183. package/src/migration-checklist/evaluation/comparator.js +279 -0
  184. package/src/migration-checklist/evaluation/dataset-v2.js +227 -0
  185. package/src/migration-checklist/evaluation/dataset.js +336 -0
  186. package/src/migration-checklist/evaluation/extractive-fixtures-v2.js +148 -0
  187. package/src/migration-checklist/evaluation/metrics-v2.js +226 -0
  188. package/src/migration-checklist/evaluation/metrics.js +158 -0
  189. package/src/migration-checklist/evaluation/qualification-v2.js +321 -0
  190. package/src/migration-checklist/evaluation/qualification.js +239 -0
  191. package/src/migration-checklist/evaluation/runner-v2.js +294 -0
  192. package/src/migration-checklist/evaluation/runner.js +194 -0
  193. package/src/migration-checklist/evaluation/scorecard-v2.js +106 -0
  194. package/src/migration-checklist/evaluation/scorecard.js +86 -0
  195. package/src/migration-checklist/extractive-candidate.js +166 -0
  196. package/src/migration-checklist/extractive-prompt.js +62 -0
  197. package/src/migration-checklist/generator.js +702 -0
  198. package/src/migration-checklist/grounding-policy.js +117 -0
  199. package/src/migration-checklist/input-loader.js +613 -0
  200. package/src/migration-checklist/migration-checklist.js +635 -0
  201. package/src/migration-checklist/presentation.js +292 -0
  202. package/src/migration-checklist/progress.js +96 -0
  203. package/src/migration-checklist/prompt.js +83 -0
  204. package/src/migration-checklist/qualification-guard.js +462 -0
  205. package/src/migration-checklist/qualification-resolution.js +122 -0
  206. package/src/migration-checklist/qualification-store.js +225 -0
  207. package/src/migration-checklist/runtime.js +205 -0
  208. package/src/migration-checklist/verification.js +134 -0
  209. package/src/migration-checklist/writer.js +35 -0
  210. package/src/openai-compatible-provider.js +451 -0
  211. package/src/orchestration/failure-log.js +32 -0
  212. package/src/orchestration/pipeline.js +200 -0
  213. package/src/orchestration/progress-events.js +337 -0
  214. package/src/orchestration/progress-reporter.js +131 -0
  215. package/src/orchestration/text-writer.js +22 -0
  216. package/src/portable.js +13 -0
  217. package/src/product-completion.js +249 -0
  218. package/src/project-manifest-input.js +90 -0
  219. package/src/project-manifest.js +141 -0
  220. package/src/python-requirements.js +137 -0
  221. package/src/registry/npm-packument.js +256 -0
  222. package/src/registry/npm-registry-adapter.js +262 -0
  223. package/src/registry/pypi-project.js +300 -0
  224. package/src/registry/pypi-registry-adapter.js +235 -0
  225. package/src/registry/sanitize-registry-body.js +51 -0
  226. package/src/renderers/console.js +160 -0
  227. package/src/renderers/impact-presentation.js +278 -0
  228. package/src/renderers/markdown.js +172 -0
  229. package/src/research-plan.js +455 -0
  230. package/src/runtime-conformance.js +275 -0
  231. package/src/source-provenance.js +393 -0
  232. package/src/source-url.js +62 -0
  233. package/src/structured-output-schema.js +66 -0
  234. package/src/target-selector.js +306 -0
  235. package/src/upgrade-decision/input-loader.js +107 -0
  236. package/src/upgrade-decision/presentation.js +43 -0
  237. package/src/upgrade-decision/runtime.js +21 -0
  238. package/src/upgrade-decision/upgrade-decision.js +626 -0
  239. package/src/upgrade-decision/writer.js +30 -0
  240. package/src/usage/analyzer-registry.js +63 -0
  241. package/src/usage/coverage.js +116 -0
  242. package/src/usage/input-loader.js +139 -0
  243. package/src/usage/js/analyzer.js +240 -0
  244. package/src/usage/js/parser.js +21 -0
  245. package/src/usage/runtime.js +187 -0
  246. package/src/usage/scope.js +44 -0
  247. package/src/usage/source-files.js +50 -0
  248. package/src/usage/usage-index.js +217 -0
  249. package/src/usage/writer.js +31 -0
  250. package/src/version-analysis-loader.js +203 -0
  251. package/src/version-analysis-manifest.js +314 -0
  252. package/src/version-analysis-writer.js +30 -0
package/eval/README.md ADDED
@@ -0,0 +1,86 @@
1
+ # DepVerdict Golden Evaluation Dataset
2
+
3
+ This directory contains provider-independent golden cases for AI Version Analysis quality evaluation.
4
+
5
+ Historical fixture, prompt, schema, and qualification identifiers may retain the
6
+ UpgradeLens protocol name under the `0.6.x` compatibility contract. They are not
7
+ current product branding and must not be renamed without a versioned evaluation and
8
+ qualification migration.
9
+
10
+ AE-01 only defines dataset contracts and sample cases. It does not add an evaluation runner, metrics, telemetry, prompt optimization, or model comparison.
11
+
12
+ ## Structure
13
+
14
+ ```text
15
+ eval/
16
+ schemas/
17
+ golden-case.schema.json
18
+ expected-result.schema.json
19
+ datasets/
20
+ node/
21
+ python/
22
+ generic/
23
+ ```
24
+
25
+ Each file under `eval/datasets/**` is one JSON golden case. The first path segment groups cases by ecosystem or cross-ecosystem behavior. Future ecosystems such as Maven, NuGet, Cargo, Go, or Ruby should add sibling folders without changing the core case schema.
26
+
27
+ ## Golden Case Contract
28
+
29
+ A case describes:
30
+
31
+ - repository fixture identity;
32
+ - ecosystem and dependency identity;
33
+ - current and target version facts;
34
+ - selected evidence that the AI is allowed to use;
35
+ - expected result assertions.
36
+
37
+ Cases are portable and provider-neutral. They must not store prompts, raw model outputs, chain-of-thought, provider names, model names, latency, token usage, or telemetry.
38
+
39
+ ## Expected Result Contract
40
+
41
+ Expected results store only machine-checkable outcomes:
42
+
43
+ - expected `riskLevel`;
44
+ - expected human review boolean and reason codes;
45
+ - expected evidence coverage and validation state;
46
+ - expected evidence references;
47
+ - expected finding kinds, applicable versions, evidence refs, and optional required keywords;
48
+ - forbidden claim categories such as `source-code impact`.
49
+
50
+ The expected result is not a transcript of what a model should say. Summaries and prose are intentionally not golden-string matched.
51
+
52
+ ## Naming
53
+
54
+ Use lowercase kebab-case:
55
+
56
+ ```text
57
+ eval/datasets/<group>/<dependency>-<scenario>.json
58
+ ```
59
+
60
+ Examples:
61
+
62
+ ```text
63
+ eval/datasets/node/react-major-breaking.json
64
+ eval/datasets/python/pydantic-major-breaking.json
65
+ eval/datasets/generic/missing-evidence.json
66
+ ```
67
+
68
+ The case `id` must match the dataset grouping style, such as `node/react-major-breaking`.
69
+
70
+ ## Contributor Guidelines
71
+
72
+ When adding a case:
73
+
74
+ 1. Keep evidence bounded and directly relevant to the current → target analysis.
75
+ 2. Use stable fake digests that match the `sha256:<64 hex>` shape.
76
+ 3. Do not include provider-specific fields or prompts.
77
+ 4. Do not encode chain-of-thought or hidden reasoning.
78
+ 5. Prefer one behavioral focus per case.
79
+ 6. Use `generic/` for cross-ecosystem behavior such as missing evidence, declared constraints, conflicts, and validation edge cases.
80
+ 7. Add new ecosystem folders only when the case needs ecosystem-specific version behavior.
81
+
82
+ ## Validation
83
+
84
+ Dataset validation is schema-only in AE-01. The test suite loads every `eval/datasets/**/*.json` file and validates it against `eval/schemas/golden-case.schema.json`, which references `expected-result.schema.json`.
85
+
86
+ AE-02 can build on this by adding an evaluation runner, metrics, fake-model replay, and model/prompt comparison. AE-01 deliberately stops before those steps.
@@ -0,0 +1,59 @@
1
+ {
2
+ "schemaVersion": "1.0.0",
3
+ "id": "generic/declared-constraint",
4
+ "title": "Declared constraint without resolved current version",
5
+ "category": "declared-constraint",
6
+ "repository": {
7
+ "name": "declared-constraint-fixture",
8
+ "fixturePath": "fixtures/generic/declared-constraint",
9
+ "ecosystem": "generic",
10
+ "packageManager": null,
11
+ "languages": ["Generic"]
12
+ },
13
+ "dependency": {
14
+ "packageId": "generic:example",
15
+ "declaredName": "example",
16
+ "normalizedName": "example",
17
+ "ecosystem": "generic",
18
+ "registry": "generic",
19
+ "dependencyType": "dependency",
20
+ "manifest": "manifest.json"
21
+ },
22
+ "versions": {
23
+ "analysisMode": "declaredConstraint",
24
+ "declaredVersion": "^1.0.0",
25
+ "currentVersion": null,
26
+ "targetVersion": "2.0.0",
27
+ "targetPolicy": "explicit",
28
+ "delta": { "direction": "unknown", "classification": "unknown" }
29
+ },
30
+ "selectedEvidence": [
31
+ {
32
+ "id": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa5",
33
+ "kind": "releaseNotes",
34
+ "sourceId": "generic:example:release-notes",
35
+ "sourceUrl": "https://example.org/releases/2.0.0",
36
+ "authority": "officialProject",
37
+ "trust": "official",
38
+ "contentDigest": "sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb5",
39
+ "locator": "heading:2.0.0",
40
+ "releaseVersions": ["2.0.0"],
41
+ "content": "Version 2.0.0 documents target release behavior. The installed current version is not known from the declared constraint."
42
+ }
43
+ ],
44
+ "expectedResult": {
45
+ "riskLevel": "unknown",
46
+ "requiresHumanReview": true,
47
+ "humanReviewReasons": ["UNKNOWN_RISK", "VERSION_UNCERTAIN"],
48
+ "evidenceCoverage": "sufficient",
49
+ "validation": { "status": "valid", "warningCodes": [] },
50
+ "expectedEvidenceRefs": {
51
+ "summary": ["sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa5"],
52
+ "risk": [],
53
+ "findings": []
54
+ },
55
+ "expectedFindings": [],
56
+ "forbiddenClaims": ["installed version", "exact delta", "low risk"]
57
+ },
58
+ "notes": "Constraint mode can use target-scoped evidence but must not pretend to know the installed baseline."
59
+ }
@@ -0,0 +1,73 @@
1
+ {
2
+ "schemaVersion": "1.0.0",
3
+ "id": "generic/evidence-conflict",
4
+ "title": "Conflicting evidence forces review",
5
+ "category": "conflict",
6
+ "repository": {
7
+ "name": "evidence-conflict-fixture",
8
+ "fixturePath": "fixtures/generic/evidence-conflict",
9
+ "ecosystem": "generic",
10
+ "packageManager": null,
11
+ "languages": ["Generic"]
12
+ },
13
+ "dependency": {
14
+ "packageId": "generic:example",
15
+ "declaredName": "example",
16
+ "normalizedName": "example",
17
+ "ecosystem": "generic",
18
+ "registry": "generic",
19
+ "dependencyType": "dependency",
20
+ "manifest": "manifest.json"
21
+ },
22
+ "versions": {
23
+ "analysisMode": "exactBaseline",
24
+ "declaredVersion": "1.0.0",
25
+ "currentVersion": "1.0.0",
26
+ "targetVersion": "2.0.0",
27
+ "targetPolicy": "explicit",
28
+ "delta": { "direction": "upgrade", "classification": "major" }
29
+ },
30
+ "selectedEvidence": [
31
+ {
32
+ "id": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa6",
33
+ "kind": "breakingChanges",
34
+ "sourceId": "generic:example:official-notes",
35
+ "sourceUrl": "https://example.org/releases/2.0.0",
36
+ "authority": "officialProject",
37
+ "trust": "official",
38
+ "contentDigest": "sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb6",
39
+ "locator": "heading:Breaking changes",
40
+ "releaseVersions": ["2.0.0"],
41
+ "content": "Version 2.0.0 documents a breaking configuration change.",
42
+ "conflictsWith": ["sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa7"]
43
+ },
44
+ {
45
+ "id": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa7",
46
+ "kind": "releaseNotes",
47
+ "sourceId": "generic:example:registry",
48
+ "sourceUrl": "https://registry.example.org/example/2.0.0",
49
+ "authority": "registryAuthoritative",
50
+ "trust": "publisher",
51
+ "contentDigest": "sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb7",
52
+ "locator": "release:2.0.0",
53
+ "releaseVersions": ["2.0.0"],
54
+ "content": "Version 2.0.0 is listed as a routine release with no migration note.",
55
+ "conflictsWith": ["sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa6"]
56
+ }
57
+ ],
58
+ "expectedResult": {
59
+ "riskLevel": "unknown",
60
+ "requiresHumanReview": true,
61
+ "humanReviewReasons": ["UNKNOWN_RISK", "EVIDENCE_PARTIAL", "SOURCE_CONFLICT"],
62
+ "evidenceCoverage": "partial",
63
+ "validation": { "status": "validWithWarnings", "warningCodes": ["SOURCE_CONFLICT"] },
64
+ "expectedEvidenceRefs": {
65
+ "summary": ["sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa6", "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa7"],
66
+ "risk": [],
67
+ "findings": []
68
+ },
69
+ "expectedFindings": [],
70
+ "forbiddenClaims": ["low risk", "conflict resolved", "source-code impact"]
71
+ },
72
+ "notes": "Conflicting evidence should stay visible instead of silently choosing a winner."
73
+ }
@@ -0,0 +1,66 @@
1
+ {
2
+ "schemaVersion": "1.0.0",
3
+ "id": "generic/major-breaking-release",
4
+ "title": "Generic major release with mandatory breaking change",
5
+ "category": "high-risk",
6
+ "repository": {
7
+ "name": "major-breaking-fixture",
8
+ "fixturePath": "fixtures/generic/major-breaking-release",
9
+ "ecosystem": "java",
10
+ "packageManager": "maven",
11
+ "languages": ["Java"]
12
+ },
13
+ "dependency": {
14
+ "packageId": "maven:org.example:example-core",
15
+ "declaredName": "org.example:example-core",
16
+ "normalizedName": "org.example:example-core",
17
+ "ecosystem": "java",
18
+ "registry": "maven",
19
+ "dependencyType": "dependency",
20
+ "manifest": "pom.xml"
21
+ },
22
+ "versions": {
23
+ "analysisMode": "exactBaseline",
24
+ "declaredVersion": "1.9.0",
25
+ "currentVersion": "1.9.0",
26
+ "targetVersion": "2.0.0",
27
+ "targetPolicy": "explicit",
28
+ "delta": { "direction": "upgrade", "classification": "major" }
29
+ },
30
+ "selectedEvidence": [
31
+ {
32
+ "id": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8",
33
+ "kind": "migrationGuide",
34
+ "sourceId": "maven:org.example:example-core:migration",
35
+ "sourceUrl": "https://example.org/example-core/2.0/migration",
36
+ "authority": "officialProject",
37
+ "trust": "official",
38
+ "contentDigest": "sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb8",
39
+ "locator": "heading:2.0 Migration",
40
+ "releaseVersions": ["2.0.0"],
41
+ "content": "Version 2.0.0 removes deprecated configuration keys. Projects upgrading from 1.x must review the migration notes before adopting 2.0.0."
42
+ }
43
+ ],
44
+ "expectedResult": {
45
+ "riskLevel": "high",
46
+ "requiresHumanReview": true,
47
+ "humanReviewReasons": ["HIGH_RISK"],
48
+ "evidenceCoverage": "sufficient",
49
+ "validation": { "status": "valid", "warningCodes": [] },
50
+ "expectedEvidenceRefs": {
51
+ "summary": ["sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8"],
52
+ "risk": ["sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8"],
53
+ "findings": ["sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8"]
54
+ },
55
+ "expectedFindings": [
56
+ {
57
+ "kind": "breakingChange",
58
+ "appliesToVersions": ["2.0.0"],
59
+ "evidenceRefs": ["sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8"],
60
+ "requiredKeywords": ["removes", "migration"]
61
+ }
62
+ ],
63
+ "forbiddenClaims": ["source-code impact", "automatic migration"]
64
+ },
65
+ "notes": "Cross-ecosystem high-risk case to prove the dataset is not npm-specific."
66
+ }
@@ -0,0 +1,46 @@
1
+ {
2
+ "schemaVersion": "1.0.0",
3
+ "id": "generic/missing-evidence",
4
+ "title": "Missing evidence yields unknown risk",
5
+ "category": "missing-evidence",
6
+ "repository": {
7
+ "name": "missing-evidence-fixture",
8
+ "fixturePath": "fixtures/generic/missing-evidence",
9
+ "ecosystem": "generic",
10
+ "packageManager": null,
11
+ "languages": ["Generic"]
12
+ },
13
+ "dependency": {
14
+ "packageId": "generic:example",
15
+ "declaredName": "example",
16
+ "normalizedName": "example",
17
+ "ecosystem": "generic",
18
+ "registry": "generic",
19
+ "dependencyType": "dependency",
20
+ "manifest": "manifest.json"
21
+ },
22
+ "versions": {
23
+ "analysisMode": "exactBaseline",
24
+ "declaredVersion": "1.0.0",
25
+ "currentVersion": "1.0.0",
26
+ "targetVersion": "2.0.0",
27
+ "targetPolicy": "explicit",
28
+ "delta": { "direction": "upgrade", "classification": "major" }
29
+ },
30
+ "selectedEvidence": [],
31
+ "expectedResult": {
32
+ "riskLevel": "unknown",
33
+ "requiresHumanReview": true,
34
+ "humanReviewReasons": ["UNKNOWN_RISK", "EVIDENCE_NONE", "ANALYSIS_FAILED"],
35
+ "evidenceCoverage": "none",
36
+ "validation": { "status": "validWithWarnings", "warningCodes": ["EVIDENCE_MISSING"] },
37
+ "expectedEvidenceRefs": {
38
+ "summary": [],
39
+ "risk": [],
40
+ "findings": []
41
+ },
42
+ "expectedFindings": [],
43
+ "forbiddenClaims": ["low risk", "breaking change", "source-code impact"]
44
+ },
45
+ "notes": "No model call should be required when selected evidence is empty."
46
+ }
@@ -0,0 +1,59 @@
1
+ {
2
+ "schemaVersion": "1.0.0",
3
+ "id": "generic/patch-release-low",
4
+ "title": "Generic patch release with explicit no-breaking evidence",
5
+ "category": "low-risk",
6
+ "repository": {
7
+ "name": "patch-low-fixture",
8
+ "fixturePath": "fixtures/generic/patch-release-low",
9
+ "ecosystem": "ruby",
10
+ "packageManager": "bundler",
11
+ "languages": ["Ruby"]
12
+ },
13
+ "dependency": {
14
+ "packageId": "rubygems:example",
15
+ "declaredName": "example",
16
+ "normalizedName": "example",
17
+ "ecosystem": "ruby",
18
+ "registry": "rubygems",
19
+ "dependencyType": "dependency",
20
+ "manifest": "Gemfile"
21
+ },
22
+ "versions": {
23
+ "analysisMode": "exactBaseline",
24
+ "declaredVersion": "3.4.1",
25
+ "currentVersion": "3.4.1",
26
+ "targetVersion": "3.4.2",
27
+ "targetPolicy": "explicit",
28
+ "delta": { "direction": "upgrade", "classification": "patch" }
29
+ },
30
+ "selectedEvidence": [
31
+ {
32
+ "id": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9",
33
+ "kind": "releaseNotes",
34
+ "sourceId": "rubygems:example:release-notes",
35
+ "sourceUrl": "https://example.org/ruby/example/releases/3.4.2",
36
+ "authority": "officialProject",
37
+ "trust": "official",
38
+ "contentDigest": "sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb9",
39
+ "locator": "release:3.4.2",
40
+ "releaseVersions": ["3.4.2"],
41
+ "content": "Version 3.4.2 fixes a documentation typo and a small internal bug. No breaking changes, deprecations, or compatibility actions are documented."
42
+ }
43
+ ],
44
+ "expectedResult": {
45
+ "riskLevel": "low",
46
+ "requiresHumanReview": false,
47
+ "humanReviewReasons": [],
48
+ "evidenceCoverage": "sufficient",
49
+ "validation": { "status": "valid", "warningCodes": [] },
50
+ "expectedEvidenceRefs": {
51
+ "summary": ["sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9"],
52
+ "risk": ["sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9"],
53
+ "findings": []
54
+ },
55
+ "expectedFindings": [],
56
+ "forbiddenClaims": ["breaking change", "migration plan", "source-code impact"]
57
+ },
58
+ "notes": "Cross-ecosystem low-risk patch case."
59
+ }
@@ -0,0 +1,59 @@
1
+ {
2
+ "schemaVersion": "1.0.0",
3
+ "id": "node/axios-patch-low",
4
+ "title": "Axios patch release with bug fixes only",
5
+ "category": "low-risk",
6
+ "repository": {
7
+ "name": "axios-patch-fixture",
8
+ "fixturePath": "fixtures/node/axios-patch-low",
9
+ "ecosystem": "node",
10
+ "packageManager": "npm",
11
+ "languages": ["JavaScript"]
12
+ },
13
+ "dependency": {
14
+ "packageId": "npm:axios",
15
+ "declaredName": "axios",
16
+ "normalizedName": "axios",
17
+ "ecosystem": "node",
18
+ "registry": "npm",
19
+ "dependencyType": "dependency",
20
+ "manifest": "package.json"
21
+ },
22
+ "versions": {
23
+ "analysisMode": "exactBaseline",
24
+ "declaredVersion": "1.6.7",
25
+ "currentVersion": "1.6.7",
26
+ "targetVersion": "1.6.8",
27
+ "targetPolicy": "explicit",
28
+ "delta": { "direction": "upgrade", "classification": "patch" }
29
+ },
30
+ "selectedEvidence": [
31
+ {
32
+ "id": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2",
33
+ "kind": "releaseNotes",
34
+ "sourceId": "npm:axios:release-notes",
35
+ "sourceUrl": "https://github.com/axios/axios/releases/tag/v1.6.8",
36
+ "authority": "officialProject",
37
+ "trust": "official",
38
+ "contentDigest": "sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb2",
39
+ "locator": "release:v1.6.8",
40
+ "releaseVersions": ["1.6.8"],
41
+ "content": "Axios 1.6.8 contains bug fixes and maintenance updates. No breaking changes or migration actions are documented for this patch release."
42
+ }
43
+ ],
44
+ "expectedResult": {
45
+ "riskLevel": "low",
46
+ "requiresHumanReview": false,
47
+ "humanReviewReasons": [],
48
+ "evidenceCoverage": "sufficient",
49
+ "validation": { "status": "valid", "warningCodes": [] },
50
+ "expectedEvidenceRefs": {
51
+ "summary": ["sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2"],
52
+ "risk": ["sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2"],
53
+ "findings": []
54
+ },
55
+ "expectedFindings": [],
56
+ "forbiddenClaims": ["breaking change", "migration plan", "source-code impact"]
57
+ },
58
+ "notes": "Low risk requires explicit evidence that the patch has no documented breaking or migration content."
59
+ }
@@ -0,0 +1,66 @@
1
+ {
2
+ "schemaVersion": "1.0.0",
3
+ "id": "node/react-major-breaking",
4
+ "title": "React major release with documented breaking change",
5
+ "category": "high-risk",
6
+ "repository": {
7
+ "name": "react-major-fixture",
8
+ "fixturePath": "fixtures/node/react-major-breaking",
9
+ "ecosystem": "node",
10
+ "packageManager": "npm",
11
+ "languages": ["JavaScript"]
12
+ },
13
+ "dependency": {
14
+ "packageId": "npm:react",
15
+ "declaredName": "react",
16
+ "normalizedName": "react",
17
+ "ecosystem": "node",
18
+ "registry": "npm",
19
+ "dependencyType": "dependency",
20
+ "manifest": "package.json"
21
+ },
22
+ "versions": {
23
+ "analysisMode": "exactBaseline",
24
+ "declaredVersion": "18.2.0",
25
+ "currentVersion": "18.2.0",
26
+ "targetVersion": "19.0.0",
27
+ "targetPolicy": "explicit",
28
+ "delta": { "direction": "upgrade", "classification": "major" }
29
+ },
30
+ "selectedEvidence": [
31
+ {
32
+ "id": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
33
+ "kind": "breakingChanges",
34
+ "sourceId": "npm:react:official-release-notes",
35
+ "sourceUrl": "https://react.dev/blog/2024/04/25/react-19",
36
+ "authority": "officialProject",
37
+ "trust": "official",
38
+ "contentDigest": "sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
39
+ "locator": "heading:Breaking changes",
40
+ "releaseVersions": ["19.0.0"],
41
+ "content": "React 19 includes documented breaking changes for deprecated APIs and requires applications to review compatibility before upgrading."
42
+ }
43
+ ],
44
+ "expectedResult": {
45
+ "riskLevel": "high",
46
+ "requiresHumanReview": true,
47
+ "humanReviewReasons": ["HIGH_RISK"],
48
+ "evidenceCoverage": "sufficient",
49
+ "validation": { "status": "valid", "warningCodes": [] },
50
+ "expectedEvidenceRefs": {
51
+ "summary": ["sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
52
+ "risk": ["sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
53
+ "findings": ["sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]
54
+ },
55
+ "expectedFindings": [
56
+ {
57
+ "kind": "breakingChange",
58
+ "appliesToVersions": ["19.0.0"],
59
+ "evidenceRefs": ["sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
60
+ "requiredKeywords": ["breaking", "deprecated"]
61
+ }
62
+ ],
63
+ "forbiddenClaims": ["source-code impact", "migration plan"]
64
+ },
65
+ "notes": "Major release evidence explicitly documents breaking changes."
66
+ }
@@ -0,0 +1,66 @@
1
+ {
2
+ "schemaVersion": "1.0.0",
3
+ "id": "node/react-minor-compatibility",
4
+ "title": "React minor release with compatibility note",
5
+ "category": "medium-risk",
6
+ "repository": {
7
+ "name": "react-minor-fixture",
8
+ "fixturePath": "fixtures/node/react-minor-compatibility",
9
+ "ecosystem": "node",
10
+ "packageManager": "npm",
11
+ "languages": ["JavaScript"]
12
+ },
13
+ "dependency": {
14
+ "packageId": "npm:react",
15
+ "declaredName": "react",
16
+ "normalizedName": "react",
17
+ "ecosystem": "node",
18
+ "registry": "npm",
19
+ "dependencyType": "dependency",
20
+ "manifest": "package.json"
21
+ },
22
+ "versions": {
23
+ "analysisMode": "exactBaseline",
24
+ "declaredVersion": "18.2.0",
25
+ "currentVersion": "18.2.0",
26
+ "targetVersion": "18.3.0",
27
+ "targetPolicy": "explicit",
28
+ "delta": { "direction": "upgrade", "classification": "minor" }
29
+ },
30
+ "selectedEvidence": [
31
+ {
32
+ "id": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1",
33
+ "kind": "compatibility",
34
+ "sourceId": "npm:react:official-release-notes",
35
+ "sourceUrl": "https://react.dev/blog/2024/04/25/react-19-upgrade-guide",
36
+ "authority": "officialProject",
37
+ "trust": "official",
38
+ "contentDigest": "sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb1",
39
+ "locator": "heading:18.3 warnings",
40
+ "releaseVersions": ["18.3.0"],
41
+ "content": "React 18.3 adds warnings that help prepare for React 19. The release is intended to surface compatibility issues before the next major upgrade."
42
+ }
43
+ ],
44
+ "expectedResult": {
45
+ "riskLevel": "medium",
46
+ "requiresHumanReview": false,
47
+ "humanReviewReasons": [],
48
+ "evidenceCoverage": "sufficient",
49
+ "validation": { "status": "valid", "warningCodes": [] },
50
+ "expectedEvidenceRefs": {
51
+ "summary": ["sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1"],
52
+ "risk": ["sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1"],
53
+ "findings": ["sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1"]
54
+ },
55
+ "expectedFindings": [
56
+ {
57
+ "kind": "compatibility",
58
+ "appliesToVersions": ["18.3.0"],
59
+ "evidenceRefs": ["sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1"],
60
+ "requiredKeywords": ["warnings", "compatibility"]
61
+ }
62
+ ],
63
+ "forbiddenClaims": ["source-code impact", "mandatory migration"]
64
+ },
65
+ "notes": "Minor release has compatibility warnings but no documented hard break."
66
+ }
@@ -0,0 +1,66 @@
1
+ {
2
+ "schemaVersion": "1.0.0",
3
+ "id": "python/fastapi-deprecation",
4
+ "title": "FastAPI release with documented deprecation",
5
+ "category": "medium-risk",
6
+ "repository": {
7
+ "name": "fastapi-deprecation-fixture",
8
+ "fixturePath": "fixtures/python/fastapi-deprecation",
9
+ "ecosystem": "python",
10
+ "packageManager": "pip",
11
+ "languages": ["Python"]
12
+ },
13
+ "dependency": {
14
+ "packageId": "pypi:fastapi",
15
+ "declaredName": "fastapi",
16
+ "normalizedName": "fastapi",
17
+ "ecosystem": "python",
18
+ "registry": "pypi",
19
+ "dependencyType": "runtime",
20
+ "manifest": "requirements.txt"
21
+ },
22
+ "versions": {
23
+ "analysisMode": "exactBaseline",
24
+ "declaredVersion": "0.109.0",
25
+ "currentVersion": "0.109.0",
26
+ "targetVersion": "0.110.0",
27
+ "targetPolicy": "explicit",
28
+ "delta": { "direction": "upgrade", "classification": "minor" }
29
+ },
30
+ "selectedEvidence": [
31
+ {
32
+ "id": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3",
33
+ "kind": "deprecations",
34
+ "sourceId": "pypi:fastapi:release-notes",
35
+ "sourceUrl": "https://fastapi.tiangolo.com/release-notes/",
36
+ "authority": "officialProject",
37
+ "trust": "official",
38
+ "contentDigest": "sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb3",
39
+ "locator": "heading:0.110.0",
40
+ "releaseVersions": ["0.110.0"],
41
+ "content": "FastAPI 0.110.0 documents a deprecation for an older parameter behavior. Existing projects should review usage before relying on the old behavior."
42
+ }
43
+ ],
44
+ "expectedResult": {
45
+ "riskLevel": "medium",
46
+ "requiresHumanReview": false,
47
+ "humanReviewReasons": [],
48
+ "evidenceCoverage": "sufficient",
49
+ "validation": { "status": "valid", "warningCodes": [] },
50
+ "expectedEvidenceRefs": {
51
+ "summary": ["sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3"],
52
+ "risk": ["sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3"],
53
+ "findings": ["sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3"]
54
+ },
55
+ "expectedFindings": [
56
+ {
57
+ "kind": "deprecation",
58
+ "appliesToVersions": ["0.110.0"],
59
+ "evidenceRefs": ["sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3"],
60
+ "requiredKeywords": ["deprecation"]
61
+ }
62
+ ],
63
+ "forbiddenClaims": ["source-code impact", "major breaking change"]
64
+ },
65
+ "notes": "Deprecation evidence should not be escalated to high risk without a documented hard break."
66
+ }