@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.
- package/LICENSE +21 -0
- package/README.md +518 -0
- package/bin/depverdict.js +7 -0
- package/bin/upgradelens.js +7 -0
- package/docs/GR-01-Semantic-Grounding-Failure-Analysis.md +309 -0
- package/docs/GR-02-Versioned-Action-Evaluation-Criteria.md +187 -0
- package/docs/GR-03-Extractive-Contract-Safety-Experiment.md +242 -0
- package/docs/GR-04-Versioned-Production-Extractive-Contract.md +154 -0
- package/docs/IA-01-Repository-Usage-Discovery.md +122 -0
- package/docs/IA-02-Repository-Impact-Analysis.md +118 -0
- package/docs/IA-03-Repository-Impact-Evidence.md +160 -0
- package/docs/IA-04-CLI-Orchestration.md +235 -0
- package/docs/IA-05-Real-Provider-Validation.md +235 -0
- package/docs/IA-05-VinGrade-Validation.md +339 -0
- package/docs/MVP-01.md +48 -0
- package/docs/MVP-02-Architecture.md +536 -0
- package/docs/MVP-02-CLI-HTTP-Runtime.md +50 -0
- package/docs/MVP-02-HTTP-Lifecycle.md +37 -0
- package/docs/MVP-02-Knowledge-Manifest-Generation.md +75 -0
- package/docs/MVP-02-Knowledge-Manifest.md +279 -0
- package/docs/MVP-02-Knowledge-Research-Orchestration.md +62 -0
- package/docs/MVP-02-Knowledge-Store.md +87 -0
- package/docs/MVP-02-PyPI-Registry-Adapter.md +97 -0
- package/docs/MVP-02-Research-Planning.md +196 -0
- package/docs/MVP-02-Source-Provenance.md +81 -0
- package/docs/MVP-02-npm-Registry-Adapter.md +99 -0
- package/docs/RR-01-End-to-End-and-Real-Provider-Validation.md +393 -0
- package/docs/RR-01-RERUN-Extractive-Contract-Validation.md +566 -0
- package/docs/RR-02-Full-Product-Workflow-and-Developer-CLI-UX-Review.md +35 -0
- package/docs/RR02-FIX-01-Persistent-Qualification-Resolution.md +32 -0
- package/docs/RR02-FIX-02-Stage-aware-CLI-Progress-and-Heartbeat.md +28 -0
- package/docs/RR02-FIX-03-npm-Capture-Evidence-Exclusion.md +33 -0
- package/docs/RR02-FIX-03A-Complete-Package-Exclusion-and-Evidence-Commit.md +223 -0
- package/docs/RR02-FIX-04-Event-loop-safe-Heartbeat.md +393 -0
- package/docs/RR02-FIX-05-Materialize-Persisted-Qualification.md +207 -0
- package/docs/RR02-RERUN-CLI-Qualification-Progress-UX-and-Package-Validation.md +342 -0
- package/docs/VinGrade-MVP-02-Validation.md +480 -0
- package/docs/VinGrade-RC02-Live-Validation.md +273 -0
- package/docs/ai-capability-discovery.md +573 -0
- package/docs/ai-engineering-production-readiness.md +390 -0
- package/docs/ai-engineering-review.md +251 -0
- package/docs/ai-runtime-governance-discovery.md +754 -0
- package/docs/architecture-overview.md +78 -0
- package/docs/cli-progress.md +111 -0
- package/docs/decisions/diff-01-brand-distribution-identity.md +450 -0
- package/docs/decisions/diff-02-identity-compatibility-contract.md +274 -0
- package/docs/decisions/diff-03-repository-docs-community-migration.md +165 -0
- package/docs/decisions/diff-04-release-evidence-gap-acceptance.md +110 -0
- package/docs/discovery/mvp-05-ai-migration-planning-discovery.md +350 -0
- package/docs/gateway-runtime-discovery.md +614 -0
- package/docs/live-ai-validation.md +299 -0
- package/docs/migration-planning-qualification-resolution.md +99 -0
- package/docs/migrations/upgradelens-to-depverdict.md +97 -0
- package/docs/mp-r03-deterministic-upgrade-decision-architecture.md +135 -0
- package/docs/mp-r04-evidence-bounded-migration-handoff-architecture.md +116 -0
- package/docs/mp-r05-product-completion-and-decision-first-cli-architecture.md +162 -0
- package/docs/mvp-05-deterministic-context-runtime.md +127 -0
- package/docs/mvp-05-migration-checklist-contract.md +166 -0
- package/docs/mvp-05-migration-checklist-orchestration.md +105 -0
- package/docs/mvp-05-migration-evaluation-and-qualification.md +135 -0
- package/docs/mvp-05-provider-neutral-generator.md +79 -0
- package/docs/ollama-local-smoke-validation.md +156 -0
- package/docs/openai-compatible-runtime-discovery.md +789 -0
- package/docs/openrouter-one-dependency-validation.md +205 -0
- package/docs/oss-02-package-guard-hardening-architecture.md +131 -0
- package/docs/oss-04-public-ci-package-metadata-architecture.md +142 -0
- package/docs/package-content-policy.md +98 -0
- package/docs/releases/v0.5.0-technical-preview.md +114 -0
- package/docs/releases/v0.6.0-alpha.1-depverdict-preview.md +101 -0
- package/docs/reviews/diff-02-identity-contract-compatibility.md +413 -0
- package/docs/reviews/diff-03-repository-docs-community-migration.md +364 -0
- package/docs/reviews/diff-04-depverdict-distribution-identity-readiness-rereview.md +453 -0
- package/docs/reviews/diff-04-fix-post-rename-identity-release-remediation.md +310 -0
- package/docs/reviews/diff-05-final-preview-distribution-qualification.md +561 -0
- package/docs/reviews/mvp-05-final-product-value-workflow-rereview.md +471 -0
- package/docs/reviews/mvp-05-product-workflow-review.md +605 -0
- package/docs/reviews/oss-01-duplicate-artifact-investigation-cleanup.md +411 -0
- package/docs/reviews/oss-02-package-guard-hardening.md +303 -0
- package/docs/reviews/oss-03-community-scaffolding.md +378 -0
- package/docs/reviews/oss-04-public-ci-package-metadata.md +439 -0
- package/docs/reviews/oss-05-technical-preview-qualification.md +482 -0
- package/docs/reviews/upgradelens-vs-upgradedepdetective-source-comparison.md +355 -0
- package/docs/reviews/v0.5.0-pre-release-smoke.md +263 -0
- package/docs/reviews/v0.5.0-version-bump-release-verification.md +306 -0
- package/docs/runtime-contract-discovery.md +521 -0
- package/docs/structured-output-compatibility-report.md +100 -0
- package/docs/ts-fix-01-exact-duplicate-occurrence-target-selection-architecture.md +111 -0
- package/docs/version-analysis-architecture.md +827 -0
- package/eval/README.md +86 -0
- package/eval/datasets/generic/declared-constraint.json +59 -0
- package/eval/datasets/generic/evidence-conflict.json +73 -0
- package/eval/datasets/generic/major-breaking-release.json +66 -0
- package/eval/datasets/generic/missing-evidence.json +46 -0
- package/eval/datasets/generic/patch-release-low.json +59 -0
- package/eval/datasets/node/axios-patch-low.json +59 -0
- package/eval/datasets/node/react-major-breaking.json +66 -0
- package/eval/datasets/node/react-minor-compatibility.json +66 -0
- package/eval/datasets/python/fastapi-deprecation.json +66 -0
- package/eval/datasets/python/pydantic-major-breaking.json +66 -0
- package/eval/migration-planning/golden-dataset-v2.json +306 -0
- package/eval/migration-planning/golden-dataset.json +214 -0
- package/eval/schemas/expected-result.schema.json +88 -0
- package/eval/schemas/golden-case.schema.json +181 -0
- package/package.json +57 -0
- package/schemas/ai-scorecard.schema.json +132 -0
- package/schemas/benchmark-report.schema.json +189 -0
- package/schemas/benchmark.schema.json +55 -0
- package/schemas/capability-profile.schema.json +44 -0
- package/schemas/conformance-report.schema.json +150 -0
- package/schemas/deployment-profile.schema.json +64 -0
- package/schemas/evaluation-report.schema.json +158 -0
- package/schemas/knowledge-evidence-bundle.schema.json +150 -0
- package/schemas/knowledge-manifest.schema.json +548 -0
- package/schemas/metrics.schema.json +178 -0
- package/schemas/migration-checklist-extractive-candidate.schema.json +42 -0
- package/schemas/migration-checklist.schema.json +706 -0
- package/schemas/migration-evaluation-dataset-v2.schema.json +208 -0
- package/schemas/migration-evaluation-dataset.schema.json +204 -0
- package/schemas/migration-planning-qualification-record.schema.json +234 -0
- package/schemas/project-manifest.schema.json +308 -0
- package/schemas/qualification-record.schema.json +56 -0
- package/schemas/repository-impact-evidence.schema.json +232 -0
- package/schemas/repository-impact.schema.json +202 -0
- package/schemas/upgrade-decision.schema.json +273 -0
- package/schemas/usage-index.schema.json +179 -0
- package/schemas/version-analysis.schema.json +449 -0
- package/src/ai-runtime-debug.js +325 -0
- package/src/ai-runtime-error.js +42 -0
- package/src/ai-runtime.js +174 -0
- package/src/ai-scorecard.js +204 -0
- package/src/ai-version-analysis.js +484 -0
- package/src/artifact-root-compatibility.js +91 -0
- package/src/benchmark-report.js +111 -0
- package/src/benchmark-runner.js +191 -0
- package/src/canonical-json.js +69 -0
- package/src/cli.js +1299 -0
- package/src/conformance-report.js +158 -0
- package/src/conformance-runner.js +253 -0
- package/src/constants.js +73 -0
- package/src/cooperative-scheduler.js +79 -0
- package/src/dependencies.js +44 -0
- package/src/dependency-ai-context.js +625 -0
- package/src/detectors.js +253 -0
- package/src/discovery.js +234 -0
- package/src/ecosystem-version-adapter.js +294 -0
- package/src/environment-compatibility.js +77 -0
- package/src/evaluation-comparator.js +158 -0
- package/src/evaluation-report.js +76 -0
- package/src/evaluation-runner.js +248 -0
- package/src/evidence-source-adapter.js +472 -0
- package/src/files.js +89 -0
- package/src/governance-diagnostics.js +64 -0
- package/src/governance-loader.js +63 -0
- package/src/governance-metadata.js +346 -0
- package/src/governance-validator.js +360 -0
- package/src/http/bounded-fetch.js +278 -0
- package/src/http/cli-http-runtime.js +44 -0
- package/src/impact/input-loader.js +157 -0
- package/src/impact/matcher.js +40 -0
- package/src/impact/repository-impact.js +199 -0
- package/src/impact/runtime.js +24 -0
- package/src/impact/status.js +62 -0
- package/src/impact/writer.js +30 -0
- package/src/impact-evidence/input-loader.js +202 -0
- package/src/impact-evidence/repository-impact-evidence.js +234 -0
- package/src/impact-evidence/runtime.js +16 -0
- package/src/impact-evidence/writer.js +30 -0
- package/src/index.js +563 -0
- package/src/installed-version-baseline.js +196 -0
- package/src/knowledge-cache.js +324 -0
- package/src/knowledge-evidence-bundle.js +101 -0
- package/src/knowledge-evidence-producer.js +233 -0
- package/src/knowledge-manifest-builder.js +188 -0
- package/src/knowledge-manifest-writer.js +32 -0
- package/src/knowledge-manifest.js +255 -0
- package/src/knowledge-research.js +615 -0
- package/src/metrics-engine.js +205 -0
- package/src/migration-checklist/ai-candidate.js +320 -0
- package/src/migration-checklist/assembler.js +37 -0
- package/src/migration-checklist/context-runtime.js +828 -0
- package/src/migration-checklist/evaluation/action-criteria.js +244 -0
- package/src/migration-checklist/evaluation/comparator-v2.js +332 -0
- package/src/migration-checklist/evaluation/comparator.js +279 -0
- package/src/migration-checklist/evaluation/dataset-v2.js +227 -0
- package/src/migration-checklist/evaluation/dataset.js +336 -0
- package/src/migration-checklist/evaluation/extractive-fixtures-v2.js +148 -0
- package/src/migration-checklist/evaluation/metrics-v2.js +226 -0
- package/src/migration-checklist/evaluation/metrics.js +158 -0
- package/src/migration-checklist/evaluation/qualification-v2.js +321 -0
- package/src/migration-checklist/evaluation/qualification.js +239 -0
- package/src/migration-checklist/evaluation/runner-v2.js +294 -0
- package/src/migration-checklist/evaluation/runner.js +194 -0
- package/src/migration-checklist/evaluation/scorecard-v2.js +106 -0
- package/src/migration-checklist/evaluation/scorecard.js +86 -0
- package/src/migration-checklist/extractive-candidate.js +166 -0
- package/src/migration-checklist/extractive-prompt.js +62 -0
- package/src/migration-checklist/generator.js +702 -0
- package/src/migration-checklist/grounding-policy.js +117 -0
- package/src/migration-checklist/input-loader.js +613 -0
- package/src/migration-checklist/migration-checklist.js +635 -0
- package/src/migration-checklist/presentation.js +292 -0
- package/src/migration-checklist/progress.js +96 -0
- package/src/migration-checklist/prompt.js +83 -0
- package/src/migration-checklist/qualification-guard.js +462 -0
- package/src/migration-checklist/qualification-resolution.js +122 -0
- package/src/migration-checklist/qualification-store.js +225 -0
- package/src/migration-checklist/runtime.js +205 -0
- package/src/migration-checklist/verification.js +134 -0
- package/src/migration-checklist/writer.js +35 -0
- package/src/openai-compatible-provider.js +451 -0
- package/src/orchestration/failure-log.js +32 -0
- package/src/orchestration/pipeline.js +200 -0
- package/src/orchestration/progress-events.js +337 -0
- package/src/orchestration/progress-reporter.js +131 -0
- package/src/orchestration/text-writer.js +22 -0
- package/src/portable.js +13 -0
- package/src/product-completion.js +249 -0
- package/src/project-manifest-input.js +90 -0
- package/src/project-manifest.js +141 -0
- package/src/python-requirements.js +137 -0
- package/src/registry/npm-packument.js +256 -0
- package/src/registry/npm-registry-adapter.js +262 -0
- package/src/registry/pypi-project.js +300 -0
- package/src/registry/pypi-registry-adapter.js +235 -0
- package/src/registry/sanitize-registry-body.js +51 -0
- package/src/renderers/console.js +160 -0
- package/src/renderers/impact-presentation.js +278 -0
- package/src/renderers/markdown.js +172 -0
- package/src/research-plan.js +455 -0
- package/src/runtime-conformance.js +275 -0
- package/src/source-provenance.js +393 -0
- package/src/source-url.js +62 -0
- package/src/structured-output-schema.js +66 -0
- package/src/target-selector.js +306 -0
- package/src/upgrade-decision/input-loader.js +107 -0
- package/src/upgrade-decision/presentation.js +43 -0
- package/src/upgrade-decision/runtime.js +21 -0
- package/src/upgrade-decision/upgrade-decision.js +626 -0
- package/src/upgrade-decision/writer.js +30 -0
- package/src/usage/analyzer-registry.js +63 -0
- package/src/usage/coverage.js +116 -0
- package/src/usage/input-loader.js +139 -0
- package/src/usage/js/analyzer.js +240 -0
- package/src/usage/js/parser.js +21 -0
- package/src/usage/runtime.js +187 -0
- package/src/usage/scope.js +44 -0
- package/src/usage/source-files.js +50 -0
- package/src/usage/usage-index.js +217 -0
- package/src/usage/writer.js +31 -0
- package/src/version-analysis-loader.js +203 -0
- package/src/version-analysis-manifest.js +314 -0
- 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.
|