@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
@@ -0,0 +1,299 @@
1
+ # Live AI Validation — Model + Real Evidence
2
+
3
+ Date: 2026-07-15
4
+
5
+ ## Executive Summary
6
+
7
+ Live AI Validation is **not complete**.
8
+
9
+ UpgradeLens successfully ran the real-evidence portion of the production pipeline:
10
+
11
+ ```text
12
+ discover
13
+
14
+ research
15
+
16
+ knowledge-manifest.json
17
+ knowledge-evidence-bundle.json
18
+ ```
19
+
20
+ The validation then stopped at `analyze-version` because no real AI runtime was configured in the environment. The run did **not** use a fake runtime, golden runtime, registry fixtures, or manually edited evidence.
21
+
22
+ This means the MVP-02-09 blocker is resolved for real registry evidence, but the live model gate is still blocked by runtime configuration.
23
+
24
+ ## Repository
25
+
26
+ Preferred repository: `VinGrade`
27
+
28
+ Result: `VinGrade` was not available in the local filesystem during validation.
29
+
30
+ Fallback repository: `UpgradeLens`
31
+
32
+ Validation root:
33
+
34
+ ```text
35
+ <TEMPORARY_LIVE_VALIDATION_REPOSITORY>
36
+ ```
37
+
38
+ The fallback repository was a temporary copy containing the real `UpgradeLens` package manifest. This avoided modifying the working repository while still exercising the production CLI against real npm registry metadata.
39
+
40
+ Repository dependencies discovered:
41
+
42
+ | Dependency | Declared Version | Ecosystem |
43
+ | ---------- | ---------------- | --------- |
44
+ | `ajv` | `^8.18.0` | npm |
45
+ | `ajv-formats` | `^3.0.1` | npm |
46
+ | `undici` | `^6.27.0` | npm |
47
+
48
+ The repository has only three discovered dependencies, so the requested random review of at least five dependencies could not be completed with this repository.
49
+
50
+ ## Model
51
+
52
+ Model: **not available**
53
+
54
+ Runtime environment:
55
+
56
+ ```text
57
+ UPGRADELENS_AI_ENDPOINT unset
58
+ UPGRADLENS_AI_ENDPOINT unset
59
+ UPGRADELENS_AI_PROVIDER unset
60
+ UPGRADELENS_AI_MODEL unset
61
+ UPGRADELENS_AI_AUTHORIZATION unset
62
+ OPENAI_API_KEY unset
63
+ OPENAI_BASE_URL unset
64
+ OPENAI_MODEL unset
65
+ ANTHROPIC_API_KEY unset
66
+ GOOGLE_API_KEY unset
67
+ ```
68
+
69
+ The CLI requires a configured `UPGRADELENS_AI_ENDPOINT` or an injected `AiRuntime`. Injection was intentionally not used because this validation forbids fake or golden runtimes.
70
+
71
+ ## Prompt Version
72
+
73
+ Prompt version: `1`
74
+
75
+ Source: `VERSION_ANALYSIS_PROMPT_VERSION` in `src/ai-version-analysis.js`.
76
+
77
+ ## Pipeline Result
78
+
79
+ | Step | Result | Notes |
80
+ | ---- | ------ | ----- |
81
+ | `discover` | PASS | Project Manifest was generated in the temporary repository. |
82
+ | `research` | PASS | Real npm registry evidence was fetched after running with network permission. |
83
+ | `analyze-version` | FAIL | Blocked because no real AI runtime was configured. |
84
+ | `eval` | NOT RUN | Would fall back to golden fake without a configured runtime; skipped to respect validation rules. |
85
+ | `scorecard` | NOT RUN | Depends on evaluation output; skipped. |
86
+ | `benchmark` | NOT RUN | Depends on model/runtime validation; skipped. |
87
+
88
+ Command evidence:
89
+
90
+ ```text
91
+ node bin/upgradelens.js discover <TEMPORARY_LIVE_VALIDATION_REPOSITORY>
92
+ ```
93
+
94
+ Result:
95
+
96
+ ```text
97
+ Discovered 1 project(s).
98
+ Manifest: <TEMPORARY_LIVE_VALIDATION_REPOSITORY>/.upgradelens/project-manifest.json
99
+ ```
100
+
101
+ ```text
102
+ node bin/upgradelens.js research <TEMPORARY_LIVE_VALIDATION_REPOSITORY>
103
+ ```
104
+
105
+ Result:
106
+
107
+ ```text
108
+ ✓ Loaded Project Manifest
109
+ ✓ Planned research (3 packages)
110
+ ✓ Research complete
111
+ ✓ Knowledge Manifest validated
112
+ ✓ Wrote:
113
+ <TEMPORARY_LIVE_VALIDATION_REPOSITORY>/.upgradelens/knowledge-manifest.json
114
+ ✓ Knowledge Evidence Bundle validated
115
+ ✓ Wrote:
116
+ <TEMPORARY_LIVE_VALIDATION_REPOSITORY>/.upgradelens/knowledge-evidence-bundle.json
117
+ ```
118
+
119
+ ```text
120
+ node bin/upgradelens.js analyze-version <TEMPORARY_LIVE_VALIDATION_REPOSITORY>
121
+ ```
122
+
123
+ Result:
124
+
125
+ ```text
126
+ upgradelens: AI runtime is not configured. Set UPGRADELENS_AI_ENDPOINT or provide an AiRuntime.
127
+ ```
128
+
129
+ ## Artifact Summary
130
+
131
+ ### Project Manifest
132
+
133
+ Generated:
134
+
135
+ ```text
136
+ <TEMPORARY_LIVE_VALIDATION_REPOSITORY>/.upgradelens/project-manifest.json
137
+ ```
138
+
139
+ ### Knowledge Manifest
140
+
141
+ Generated:
142
+
143
+ ```text
144
+ <TEMPORARY_LIVE_VALIDATION_REPOSITORY>/.upgradelens/knowledge-manifest.json
145
+ ```
146
+
147
+ Package resolution:
148
+
149
+ | Package | Status | Registry Latest |
150
+ | ------- | ------ | --------------- |
151
+ | `npm:ajv` | resolved | `8.20.0` |
152
+ | `npm:ajv-formats` | resolved | `3.0.1` |
153
+ | `npm:undici` | resolved | `8.7.0` |
154
+
155
+ Warnings: `0`
156
+
157
+ ### Knowledge Evidence Bundle
158
+
159
+ Generated:
160
+
161
+ ```text
162
+ <TEMPORARY_LIVE_VALIDATION_REPOSITORY>/.upgradelens/knowledge-evidence-bundle.json
163
+ ```
164
+
165
+ Summary:
166
+
167
+ ```json
168
+ {
169
+ "schemaVersion": "1.0.0",
170
+ "evidenceCount": 3,
171
+ "warningCount": 0
172
+ }
173
+ ```
174
+
175
+ Evidence references:
176
+
177
+ | Package | Evidence ID | Kind | Release Versions |
178
+ | ------- | ----------- | ---- | ---------------- |
179
+ | `npm:ajv` | `sha256:4857f89db56ac95775a1fcb4fdac2aff719481300f1e0d79ece558190c117273` | `registryFact` | `8.20.0` |
180
+ | `npm:undici` | `sha256:4b0e9da799e844dff7e608252d103e6c49260b35bda6f0a88753d7d55f7ffac3` | `registryFact` | `8.7.0` |
181
+ | `npm:ajv-formats` | `sha256:b8e04856e6cafc92fe70e2b15d36fcdfb952494e003fbd63f0c3b168f7269bef` | `registryFact` | `3.0.1` |
182
+
183
+ ## AI Output Review
184
+
185
+ AI output was not produced because `analyze-version` could not construct a real runtime.
186
+
187
+ Validation answers:
188
+
189
+ | Question | Answer |
190
+ | -------- | ------ |
191
+ | Artifact được sinh đầy đủ? | NO — Project, Knowledge Manifest, and Evidence Bundle were generated; Version Analysis was not. |
192
+ | AI có trả structured output hợp lệ? | NO — no model call occurred. |
193
+ | Trust Layer có pass? | NO — trust validation could not run without AI output. |
194
+ | Evidence references hợp lệ? | PARTIAL — bundle references are valid before AI; AI evidence references could not be assessed. |
195
+ | Invented evidence reference? | Not assessable — no AI output. |
196
+
197
+ ## Trust Review
198
+
199
+ Trust layer execution was blocked by missing AI runtime.
200
+
201
+ Pre-AI checks that did pass:
202
+
203
+ - real registry evidence bundle was generated;
204
+ - bundle schema validated;
205
+ - evidence IDs were deterministic digests;
206
+ - evidence referenced known package IDs and source IDs;
207
+ - no bundle-level evidence conflicts were present;
208
+ - no manually edited or injected evidence was used.
209
+
210
+ Trust checks not reached:
211
+
212
+ - invented evidence reference detection;
213
+ - invented URL detection;
214
+ - deterministic field mutation protection;
215
+ - risk downgrade;
216
+ - human-review policy on model output.
217
+
218
+ ## Human Review
219
+
220
+ Human review policy could not be evaluated against AI output.
221
+
222
+ Manual dependency review from available repository dependencies:
223
+
224
+ | Dependency | Observed Version Situation | Manual Review |
225
+ | ---------- | -------------------------- | ------------- |
226
+ | `ajv` | Declared `^8.18.0`, registry latest `8.20.0` | Likely low-to-medium operational risk, but declared constraint means installed version is unresolved and should require review under current policy. |
227
+ | `ajv-formats` | Declared `^3.0.1`, registry latest `3.0.1` | Likely no upgrade delta if installed version is already compatible, but exact installed version is unresolved. |
228
+ | `undici` | Declared `^6.27.0`, registry latest `8.7.0` | Major-version target from 6 to 8 appears higher risk and should require human review. |
229
+
230
+ The requested sample size of five dependencies was not possible because the fallback repository exposes only three dependencies.
231
+
232
+ ## Evaluation Result
233
+
234
+ `upgradelens eval` was intentionally not run.
235
+
236
+ Reason: with no configured real runtime, the current CLI would use the golden fake runtime by default. That would violate this validation's rule:
237
+
238
+ ```text
239
+ Không dùng Fake Runtime
240
+ Không dùng Golden Runtime
241
+ ```
242
+
243
+ ## Benchmark Result
244
+
245
+ `upgradelens benchmark` was intentionally not run.
246
+
247
+ Reason: benchmark must validate a real model/runtime for this task. No model runtime was configured.
248
+
249
+ ## Known Issues
250
+
251
+ ### Critical
252
+
253
+ - Live AI validation cannot complete until a real `UPGRADELENS_AI_ENDPOINT` is configured.
254
+
255
+ ### High
256
+
257
+ - No local `VinGrade` repository was available, so the preferred real repository could not be used.
258
+ - The fallback `UpgradeLens` dependency set has only three dependencies, which is insufficient for the requested five-dependency manual review sample.
259
+
260
+ ### Medium
261
+
262
+ - The real Evidence Bundle currently contains registry facts only. This proves portability and lineage, but it is still thin evidence for high-quality risk analysis.
263
+ - If `eval` is run without a configured endpoint, it falls back to golden fake runtime. That is useful for CI but unsafe for live-model validation unless explicitly called out.
264
+
265
+ ### Low
266
+
267
+ - The first sandboxed `research` run produced `REGISTRY_UNAVAILABLE`; the registry run succeeded only after network permission was granted.
268
+
269
+ ## Recommended Backlog
270
+
271
+ 1. Provide a real AI runtime configuration for validation:
272
+
273
+ ```text
274
+ UPGRADELENS_AI_ENDPOINT
275
+ UPGRADELENS_AI_PROVIDER
276
+ UPGRADELENS_AI_MODEL
277
+ UPGRADELENS_AI_AUTHORIZATION, if required
278
+ ```
279
+
280
+ 2. Re-run this validation on `VinGrade` or another repository with at least five dependencies.
281
+
282
+ 3. Add a documented live-validation benchmark config that uses `runtime.type = "environment"` so benchmark can run against the configured provider without relying on golden fake.
283
+
284
+ 4. Expand Evidence Bundle production beyond registry facts when release notes, changelog, or migration-guide source candidates are available.
285
+
286
+ 5. Add a CLI safety option for live validation to fail if evaluation would fall back to golden fake runtime.
287
+
288
+ ## MVP-04 Readiness Decision
289
+
290
+ Decision: **NO GO for Live AI Validation completion**.
291
+
292
+ Reason:
293
+
294
+ - Real evidence generation works.
295
+ - Portable Evidence Bundle exists and validates.
296
+ - The live model step did not run because no real runtime is configured.
297
+ - Therefore there is no evidence yet that structured model output, trust validation, human-review policy, evaluation, scorecard, and benchmark work end-to-end with a real model.
298
+
299
+ This is not a source-code blocker discovered in UpgradeLens. It is an environment/configuration blocker for live validation.
@@ -0,0 +1,99 @@
1
+ # Migration Planning qualification resolution
2
+
3
+ The experimental Migration Checklist uses one immutable qualification decision
4
+ for the complete stage. Qualification resolution is deterministic and does not
5
+ contact a provider or re-run evaluation.
6
+
7
+ ## When resolution runs
8
+
9
+ The normal `depverdict analyze <repository>` pipeline does not include the
10
+ Migration Checklist and does not resolve a qualification record. Resolution
11
+ runs only when the user explicitly enables:
12
+
13
+ ```text
14
+ depverdict analyze <repository> --experimental-migration-checklist
15
+ ```
16
+
17
+ The default persisted record is repository-local:
18
+
19
+ ```text
20
+ .depverdict/migration-planning-qualification.json
21
+ ```
22
+
23
+ An alternative portable path relative to the repository may be selected with:
24
+
25
+ ```text
26
+ --migration-qualification <path>
27
+ ```
28
+
29
+ Absolute paths and paths that escape the repository contract are rejected.
30
+
31
+ ## Source precedence
32
+
33
+ Exactly one source is selected in this order:
34
+
35
+ 1. a qualification injected through the application API;
36
+ 2. the explicit `--migration-qualification` path;
37
+ 3. the default project-local path;
38
+ 4. a missing-record decision.
39
+
40
+ The selected record is validated as a complete unit. A missing or invalid
41
+ explicit source never falls back to the default path. A corrupted default
42
+ record never falls back to a missing-record decision.
43
+
44
+ ## Decision states
45
+
46
+ | State | Execution | Meaning |
47
+ | --- | --- | --- |
48
+ | `QUALIFIED` | allowed | The record matches the exact task and runtime identity and all required gates passed. |
49
+ | `QUALIFIED_WITH_LIMITATIONS` | allowed | The record matches and execution retains its recorded limitations. |
50
+ | `MISSING` | experimental exception only | No default record exists. The opt-in experimental CLI path may continue with mandatory human review. |
51
+ | `NOT_QUALIFIED` | blocked | A matching runtime failed a critical qualification gate or threshold. |
52
+ | `INSUFFICIENT_EVIDENCE` | blocked | A matching record does not contain enough evidence for execution. |
53
+ | `IDENTITY_MISMATCH` | blocked | Task, provider, model, adapter, dataset, prompt, schema, policy, or runtime identity differs. Fake-runtime evidence also falls into this fail-closed class for a real runtime. |
54
+ | `CORRUPTED` | blocked | JSON, schema, invariant, digest, or sensitive-value validation failed. |
55
+
56
+ Only a genuinely missing default record may use the existing experimental
57
+ exception. Missing explicit records, corrupted records, identity mismatches,
58
+ fake qualifications, insufficient evidence, and matching `NOT_QUALIFIED`
59
+ records block before provider use.
60
+
61
+ ## Integrity and identity
62
+
63
+ The persisted artifact follows
64
+ `schemas/migration-planning-qualification-record.schema.json`. Loading verifies
65
+ the schema, the qualification identity digest, the record digest, deterministic
66
+ ordering, verdict invariants, and the absence of secret-like values.
67
+
68
+ Runtime matching binds the decision to the exact Migration Planning v2 task,
69
+ provider, model, adapter, evaluation dataset, prompt, candidate schema,
70
+ grounding policy, and other versioned qualification inputs. Changing one of
71
+ those inputs requires a matching record; it is not silently accepted.
72
+
73
+ Use the public writer to persist a completed qualification:
74
+
75
+ ```js
76
+ import { writeMigrationPlanningQualificationRecord } from '@thomasminh1995/depverdict';
77
+
78
+ await writeMigrationPlanningQualificationRecord(
79
+ repositoryRoot,
80
+ evaluationReport.report.qualification
81
+ );
82
+ ```
83
+
84
+ The writer validates first and publishes atomically. Qualification status,
85
+ reason, source kind, source path, runtime identity, limitations, and next
86
+ action come from the same frozen decision used by the guard, progress events,
87
+ console presentation, failure log, and migration artifact assembly.
88
+
89
+ During the `0.6.x` preview compatibility window, a complete default record under
90
+ `.upgradelens/` may be selected only through the whole-root fallback contract.
91
+ DepVerdict never merges qualification or workflow inputs across artifact roots.
92
+ An explicit legacy path remains caller-owned and is honored as written.
93
+
94
+ ## Limitations
95
+
96
+ Migration Checklist remains experimental, opt-in, and mandatory-human-review.
97
+ A persisted qualification permits the exact qualified runtime to execute; it
98
+ does not make generated migration instructions automatically safe, enable the
99
+ feature by default, or replace review of cited evidence.
@@ -0,0 +1,97 @@
1
+ # UpgradeLens to DepVerdict migration
2
+
3
+ DepVerdict is the canonical product identity beginning with
4
+ `0.6.0-alpha.1`. This guide covers the bounded `0.6.x` preview transition. It
5
+ does not change historical artifact schemas or move local data automatically.
6
+
7
+ ## Identity map
8
+
9
+ | Old | New | Compatibility |
10
+ | --- | --- | --- |
11
+ | `upgradelens` npm identity | `@thomasminh1995/depverdict` | The old npm package was never successfully published; install the scoped package after its preview distribution gate passes. |
12
+ | `upgradelens` CLI | `depverdict` | The alias remains for one `0.6.x` preview window and emits a bounded stderr warning. |
13
+ | `.upgradelens/` | `.depverdict/` | A complete legacy input chain may be read as fallback; new implicit writes are canonical. |
14
+ | `UPGRADELENS_*` | `DEPVERDICT_*` | Canonical variables win; legacy fallback warns without printing values. |
15
+ | GitHub UpgradeLens URL | GitHub DepVerdict URL | The rename is complete. Use the DepVerdict URL directly; the former URL is a redirect compatibility aid, not an operational dependency. |
16
+
17
+ ## Commands and installation
18
+
19
+ New commands should use:
20
+
21
+ ```sh
22
+ depverdict analyze .
23
+ depverdict analyze . --offline
24
+ depverdict analyze . --fail-on-incomplete
25
+ ```
26
+
27
+ The planned npm preview install command is:
28
+
29
+ ```sh
30
+ npm install -g @thomasminh1995/depverdict@preview
31
+ ```
32
+
33
+ The preview has not yet passed final distribution qualification, so this command
34
+ is not presented as currently guaranteed to succeed. Until publication, run the
35
+ canonical source executable:
36
+
37
+ ```sh
38
+ node ./bin/depverdict.js --help
39
+ ```
40
+
41
+ Do not install an `upgradelens` npm package as a migration step.
42
+
43
+ ## Artifact migration
44
+
45
+ New implicit writes go to `.depverdict/`. DepVerdict does not automatically move,
46
+ copy, delete, or merge `.upgradelens/` data.
47
+
48
+ Automatic compatibility reads select one complete root:
49
+
50
+ 1. a complete canonical chain wins;
51
+ 2. a complete legacy chain may be used only when no canonical chain member exists;
52
+ 3. partial, split, or conflicting roots fail closed;
53
+ 4. explicitly supplied paths remain authoritative, including explicit legacy
54
+ paths.
55
+
56
+ Do not combine files from the two roots to manufacture a complete chain. Historical
57
+ schemas and existing artifacts remain valid under their original protocol
58
+ identities; the brand migration does not rewrite `generator.name`, schema names,
59
+ task IDs, reason codes, or lineage.
60
+
61
+ ## Environment migration
62
+
63
+ Rename each supported variable key without printing or copying its value into logs:
64
+
65
+ | Legacy | Canonical |
66
+ | --- | --- |
67
+ | `UPGRADELENS_AI_PROVIDER` | `DEPVERDICT_AI_PROVIDER` |
68
+ | `UPGRADELENS_AI_ENDPOINT` | `DEPVERDICT_AI_ENDPOINT` |
69
+ | `UPGRADELENS_AI_MODEL` | `DEPVERDICT_AI_MODEL` |
70
+ | `UPGRADELENS_AI_AUTHORIZATION` | `DEPVERDICT_AI_AUTHORIZATION` |
71
+ | `UPGRADELENS_AI_TIMEOUT_MS` | `DEPVERDICT_AI_TIMEOUT_MS` |
72
+ | `UPGRADELENS_AI_TIMEOUT_SECONDS` | `DEPVERDICT_AI_TIMEOUT_SECONDS` |
73
+ | `UPGRADELENS_AI_MAX_RESPONSE_BYTES` | `DEPVERDICT_AI_MAX_RESPONSE_BYTES` |
74
+ | `UPGRADELENS_AI_DEBUG` | `DEPVERDICT_AI_DEBUG` |
75
+
76
+ Edit secret stores manually. Never print an authorization value to verify the
77
+ rename. When both mapped keys exist, the canonical key wins and DepVerdict emits a
78
+ key-only diagnostic.
79
+
80
+ ## Repository transition
81
+
82
+ The repository rename is complete. Use the canonical routes directly:
83
+
84
+ - repository: `https://github.com/thomasMinh1995/DepVerdict`;
85
+ - issues: `https://github.com/thomasMinh1995/DepVerdict/issues`;
86
+ - private security reports:
87
+ `https://github.com/thomasMinh1995/DepVerdict/security/advisories/new`.
88
+
89
+ The former `https://github.com/thomasMinh1995/UpgradeLens` route redirects for
90
+ continuity, but current operations and metadata do not depend on that redirect.
91
+
92
+ ## Compatibility removal
93
+
94
+ The compatibility window is preview-bounded, not an indefinite support guarantee
95
+ or a stable calendar deadline. Removing the CLI alias, artifact fallback, or
96
+ environment fallback requires a separate decision, release note, consumer-usage
97
+ review, canonical-only regression validation, and explicit release authorization.
@@ -0,0 +1,135 @@
1
+ # MP-R03 Deterministic Upgrade Decision Architecture
2
+
3
+ ## Decision boundary
4
+
5
+ The Upgrade Decision stage runs after Repository Impact Evidence and before
6
+ Migration Checklist context preparation. It is deterministic and performs no
7
+ provider or model calls.
8
+
9
+ The stage consumes the same seven validated upstream artifacts that form the
10
+ existing checklist boundary:
11
+
12
+ 1. Project Manifest
13
+ 2. Knowledge Manifest
14
+ 3. Knowledge Evidence Bundle
15
+ 4. Version Analysis
16
+ 5. Usage Index
17
+ 6. Repository Impact
18
+ 7. Repository Impact Evidence
19
+
20
+ This is the smallest existing boundary that has exact dependency occurrence
21
+ identity, installed and target versions, target-scoped evidence, analysis
22
+ state, repository impact, and ecosystem-aware usage coverage. The validated
23
+ input loader remains responsible for schema, lineage, occurrence identity, and
24
+ evidence-reference integrity.
25
+
26
+ Validated Knowledge Manifest package occurrences are the decision cardinality
27
+ source because they retain the Project Manifest occurrence plus canonical
28
+ package identity. Version Analysis results are joined by the full occurrence
29
+ key. A validated occurrence with no matching result is retained as
30
+ `NOT_ANALYZED`; it is never silently dropped.
31
+
32
+ ## Canonical inputs and ownership
33
+
34
+ Project Manifest owns the dependency occurrence and installed-version
35
+ baseline. Version Analysis owns the evaluated target, analysis status,
36
+ target-scoped evidence references, and structured findings. Repository Impact
37
+ Evidence owns repository impact and coverage state. Ecosystem version adapters
38
+ own version normalization and ordering.
39
+
40
+ The decision policy owns only deterministic precedence. AI output, prose risk
41
+ labels, package popularity, package names, repository names, file names, and a
42
+ registry-latest candidate do not own the decision.
43
+
44
+ ## Recommendation-driver policy
45
+
46
+ Target discovery, migration/risk evidence, and a recommendation driver are
47
+ separate facts:
48
+
49
+ - Registry metadata and `targetPolicy: registryLatest` establish only a
50
+ registry-discovered candidate.
51
+ - Release notes, changelogs, breaking changes, deprecations, compatibility
52
+ notes, and migration guides describe the target or the cost/risk of a
53
+ possible migration. They do not recommend changing versions.
54
+ - `targetPolicy: explicit` is the only current structured production driver.
55
+ It records that the caller selected and adapter-normalized a target version,
56
+ so the policy maps it to `USER_SELECTED_TARGET`.
57
+
58
+ The current upstream schemas have no structured security advisory,
59
+ end-of-support, deprecation-deadline, runtime-requirement, dependency-policy,
60
+ or organization-policy driver. Free-form evidence and AI-authored prose must
61
+ not synthesize one.
62
+
63
+ Therefore, a newer registry-discovered target without another structured
64
+ driver produces `INVESTIGATE` with
65
+ `UPGRADE_AVAILABLE_NO_RECOMMENDATION_DRIVER`, even when target-scoped
66
+ migration/risk evidence is sufficient. `PLAN_UPGRADE` requires an explicit
67
+ target plus valid target-scoped evidence and all existing comparison,
68
+ conflict, impact, and coverage checks.
69
+
70
+ A referenced evidence claim that is invalid, stale, unavailable, or otherwise
71
+ insufficient remains `INSUFFICIENT_EVIDENCE`; unverified prose never becomes a
72
+ recommendation driver. A registry candidate with no migration evidence at all
73
+ remains the bounded no-driver `INVESTIGATE` case.
74
+
75
+ ## Policy precedence
76
+
77
+ For each validated Version Analysis occurrence:
78
+
79
+ 1. A non-analyzed Version Analysis status produces `NOT_ANALYZED`.
80
+ 2. A missing installed baseline produces `INSUFFICIENT_EVIDENCE`; an explicitly
81
+ non-registry declaration produces `INVESTIGATE`.
82
+ 3. A missing target produces `INSUFFICIENT_EVIDENCE`.
83
+ 4. An unavailable ecosystem adapter or incomparable version produces
84
+ `INVESTIGATE`.
85
+ 5. Equal installed and target versions produce `KEEP_CURRENT`.
86
+ 6. Installed newer than the evaluated target produces `KEEP_CURRENT` with a
87
+ limitation.
88
+ 7. Conflicted evidence produces `INVESTIGATE`; referenced invalid, stale,
89
+ unavailable, or non-target-scoped evidence produces
90
+ `INSUFFICIENT_EVIDENCE`.
91
+ 8. A newer registry-discovered target without a structured recommendation
92
+ driver produces `INVESTIGATE`, including when no migration evidence was
93
+ referenced.
94
+ 9. A structured driver with missing evidence produces
95
+ `INSUFFICIENT_EVIDENCE`.
96
+ 10. Partial or unavailable repository coverage for a repository-sensitive
97
+ finding produces `INVESTIGATE`.
98
+ 11. A future validated structured urgency signal may produce `UPGRADE_NOW`.
99
+ MP-R03 defines no production urgency input, so prose risk labels cannot
100
+ produce this decision.
101
+ 12. A newer caller-selected target with sufficient target-scoped evidence and
102
+ no blocker produces `PLAN_UPGRADE`.
103
+ 13. Remaining ambiguous states produce `INVESTIGATE`.
104
+
105
+ Equal-version precedence intentionally comes before coverage uncertainty:
106
+ coverage limitations remain visible but cannot turn a no-version-change fact
107
+ into an upgrade recommendation.
108
+
109
+ ## Version comparison
110
+
111
+ The policy calls the registered adapter for the occurrence ecosystem. Node uses
112
+ SemVer and Python uses the current PEP 440 subset. An unsupported ecosystem,
113
+ invalid version, URL/Git/local declaration, or adapter `unknown` result is never
114
+ compared lexically and produces an investigation outcome.
115
+
116
+ ## Persistence and consumers
117
+
118
+ The stage writes `.upgradelens/upgrade-decision.json` atomically. Its lineage
119
+ contains portable paths and digests for all seven immutable inputs. Decisions
120
+ are sorted by stable occurrence identity and include versions, comparison,
121
+ evidence references, impact/coverage, reason codes, human-review state,
122
+ limitations, and policy provenance.
123
+
124
+ CLI and Markdown presentation display the persisted decision. Migration
125
+ Checklist receives the persisted artifact and may only prepare AI action
126
+ contexts for `PLAN_UPGRADE` or `UPGRADE_NOW`. `INVESTIGATE` is manual-review
127
+ only; `KEEP_CURRENT`, `INSUFFICIENT_EVIDENCE`, and `NOT_ANALYZED` cannot create
128
+ migration actions.
129
+
130
+ ## Genericity
131
+
132
+ No rule depends on VinGrade, a package name, a framework name, a repository
133
+ path, or a source filename. VinGrade is an acceptance repository only. The
134
+ policy operates on schema-validated occurrence facts and registered ecosystem
135
+ capabilities.