@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,471 @@
|
|
|
1
|
+
# UpgradeLens MVP-05 — Final Product Value & Workflow Re-review
|
|
2
|
+
|
|
3
|
+
## 1. Executive Verdict
|
|
4
|
+
|
|
5
|
+
**`PARTIAL_MATCH`**
|
|
6
|
+
|
|
7
|
+
The remediation changes the supported workflow materially: UpgradeLens now
|
|
8
|
+
resolves installed baselines, distinguishes analyzer coverage from non-use,
|
|
9
|
+
persists a deterministic upgrade decision, projects product completion before
|
|
10
|
+
diagnostics, and can produce an evidence-bounded Coding Agent handoff for an
|
|
11
|
+
explicitly selected target.
|
|
12
|
+
|
|
13
|
+
| Decision | Result |
|
|
14
|
+
| --- | --- |
|
|
15
|
+
| Product workflow readiness | **Ready with known limitations** |
|
|
16
|
+
| CLI readiness | **Ready with one High selector limitation** |
|
|
17
|
+
| Coding Agent handoff readiness | **`PASS` / ready for review-gated planning** |
|
|
18
|
+
| Migration Checklist v2 | **Real-provider qualified, still experimental** |
|
|
19
|
+
| v0.5.0 release readiness | **`GO_WITH_KNOWN_LIMITATIONS`** for CLI/product core |
|
|
20
|
+
|
|
21
|
+
The workflow is not a registry-latest auto-upgrader, an autonomous Coding
|
|
22
|
+
Agent, or proof that a migration is safe. A discovered newer version becomes
|
|
23
|
+
`INVESTIGATE` unless another deterministic driver exists. An explicit
|
|
24
|
+
human-selected target can become `PLAN_UPGRADE`; every implementation action
|
|
25
|
+
still requires source inspection and approval.
|
|
26
|
+
|
|
27
|
+
The remaining release-relevant defect is fail-closed rather than unsafe:
|
|
28
|
+
duplicate occurrences that differ only by declared version can produce
|
|
29
|
+
identical retry selectors. This blocks selecting that exact occurrence but
|
|
30
|
+
does not silently fan out or select the first match.
|
|
31
|
+
|
|
32
|
+
## 2. Environment and Scope
|
|
33
|
+
|
|
34
|
+
| Item | Value |
|
|
35
|
+
| --- | --- |
|
|
36
|
+
| Branch | `feat/mvp-05-evidence-migration-checklist` |
|
|
37
|
+
| Commit before review | `e1ff3b38f42bfb34bb052e03a11645b17b8b892f` |
|
|
38
|
+
| Package | `upgradelens@0.4.0` |
|
|
39
|
+
| Node.js / npm | `v26.0.0` / `11.12.1` |
|
|
40
|
+
| Platform | macOS arm64 |
|
|
41
|
+
| UpgradeLens target | Current dirty working tree, reviewed without overwriting existing changes |
|
|
42
|
+
| Representative repository | VinGrade clean archive at `25811ef997fcf45810105e89e4500688f28f7ba5` |
|
|
43
|
+
| Generic repositories | Isolated single-Node, scoped-package, ambiguity, and polyglot shapes |
|
|
44
|
+
| Provider / model / adapter | `openai-compatible` / `openai/gpt-5.5` / `openai-compatible` |
|
|
45
|
+
| Qualification | `QUALIFIED`, ID `sha256:4fa4954d6f254d94859bce17aec6209394d380e4635155a6f3ce23a7e9b70765` |
|
|
46
|
+
| Capture directory | `.upgradelens/review/mvp-05-final-rereview/` (git-ignored) |
|
|
47
|
+
| Capture manifest digest | `sha256:a507c9576bb8ee107d49e163899e05fe9c8aef863402fc3f4b8a363b66d06dad` |
|
|
48
|
+
|
|
49
|
+
The working tree already contained the completed MP-R01–MP-R05 remediation
|
|
50
|
+
and earlier review material. This review created only this report and ignored
|
|
51
|
+
captures. It did not change production source, schema, tests, fixtures,
|
|
52
|
+
target repositories, version, git history, or credentials.
|
|
53
|
+
|
|
54
|
+
All target executions used clean isolated snapshots and the clean-installed
|
|
55
|
+
tarball. Captures contain safe commands, exit status, stdout/stderr, duration,
|
|
56
|
+
completion/count metadata, and artifact inventory where applicable. Provider
|
|
57
|
+
request bodies and secrets were not retained.
|
|
58
|
+
|
|
59
|
+
One canonical-suite test was skipped because the sandbox could not expose the
|
|
60
|
+
local loopback listener needed by the online CLI keep-alive lifecycle test.
|
|
61
|
+
It is reported as skipped, not passed. No required workflow scenario was
|
|
62
|
+
blocked: cancellation was reproduced with exit 130, and a bounded real-provider
|
|
63
|
+
positive run completed.
|
|
64
|
+
|
|
65
|
+
## 3. Baseline Comparison
|
|
66
|
+
|
|
67
|
+
| Area | Before remediation | Current result |
|
|
68
|
+
| --- | --- | --- |
|
|
69
|
+
| Executive verdict | `PARTIAL_MATCH` | `PARTIAL_MATCH`, now because of bounded residual gaps rather than missing core outcomes |
|
|
70
|
+
| Feature alignment | 5 MATCH / 6 PARTIAL / 4 NOT | **11 MATCH / 3 PARTIAL / 0 NOT / 1 OUT OF SCOPE** |
|
|
71
|
+
| Installed baseline | Lockfile not resolved | npm lockfile v1/v2/v3 exact version and workspace ownership are resolved; unavailable ecosystems fail closed |
|
|
72
|
+
| Python usage | Unsupported coverage could become unused/not impacted | `ANALYZER_UNAVAILABLE` produces coverage unavailable and never verified non-use |
|
|
73
|
+
| Upgrade decision | No clear keep/plan/investigate outcome | Policy 1.1.0 persists `KEEP_CURRENT`, `PLAN_UPGRADE`, `INVESTIGATE`, insufficient, and not-analyzed outcomes |
|
|
74
|
+
| Migration handoff | No implementation-usable handoff | Explicit positive target produced grounded action, affected source, validation commands, limitations, and approval boundary |
|
|
75
|
+
| Provider/output failure | Package-local failure could look fully successful | Retained failure projects `PARTIAL`, lists the failed occurrence and recovery, exits 2 |
|
|
76
|
+
| CLI hierarchy | Counts/artifacts before decision | Product completion and decisions lead; diagnostics/artifacts follow |
|
|
77
|
+
| Coding Agent | `NOT READY` | **`PASS`** without external re-research |
|
|
78
|
+
| Release | `NO_GO` | **`GO_WITH_KNOWN_LIMITATIONS`** for core; experimental handoff remains opt-in |
|
|
79
|
+
|
|
80
|
+
The current score is not based on schema-field presence alone. Each MATCH
|
|
81
|
+
below is supported by current source plus packaged runtime output or focused
|
|
82
|
+
runtime tests.
|
|
83
|
+
|
|
84
|
+
## 4. Workflow Results
|
|
85
|
+
|
|
86
|
+
| Scenario | Completion | Decisions | Handoff | Exit | Verdict |
|
|
87
|
+
| --- | --- | --- | --- | ---: | --- |
|
|
88
|
+
| A. Default registry | `COMPLETED_WITH_REVIEW` | 1 `INVESTIGATE`; 0 plan | No fabricated action | 0 | MATCH |
|
|
89
|
+
| B. Explicit target, controlled public run | `COMPLETED_WITH_REVIEW` | 1 `PLAN_UPGRADE` / `USER_SELECTED_TARGET` | 1 actionable with review | 0 | MATCH |
|
|
90
|
+
| B. Explicit target, real provider | `COMPLETED_WITH_REVIEW` | 1 `PLAN_UPGRADE` | 2 grounded items, 1 location, verification available | 0 | MATCH |
|
|
91
|
+
| C. Scoped npm selector | Selector parsed `npm:@scope/package` without splitting on `@`; package absent | None | None | 1 | MATCH for scoped parsing/fail-closed behavior |
|
|
92
|
+
| D. Different-project ambiguity | Unqualified selector rejected; qualified project/manifest selectors pass focused tests | None | None | 1 when ambiguous | PARTIAL because same-manifest duplicates cannot be uniquely retried |
|
|
93
|
+
| E. Polyglot coverage | Unsupported Python coverage remains unavailable | No false unused/not-impacted decision | No fabricated action | 0 in empty-cache run | MATCH |
|
|
94
|
+
| F. Installed baseline | Exact lockfile baseline; same installed/target becomes keep | `KEEP_CURRENT` where equal | `NO_VERSION_CHANGE_REQUIRED` | Contract verified | MATCH |
|
|
95
|
+
| G. Provider/output partial | `PARTIAL` | 1 keep retained, 1 not analyzed | Failed occurrence and recovery retained | 2 | MATCH |
|
|
96
|
+
| H. Insufficient data | `INSUFFICIENT_DATA` | 1 insufficient, no recommendation | No action | 0 default / 2 strict | MATCH |
|
|
97
|
+
| I. Offline valid cache | `COMPLETED_WITH_REVIEW` | 1 investigate | No invented external claim | 0 | MATCH |
|
|
98
|
+
| I. Offline empty cache | `INSUFFICIENT_DATA` | No fabricated decision/action | No action | 0 default / 2 strict | MATCH |
|
|
99
|
+
| J. Cancellation | `CANCELLED` | Successful completion not published | None | 130 | MATCH |
|
|
100
|
+
| VinGrade current empty-cache public run | `INSUFFICIENT_DATA` | 47 `NOT_ANALYZED` | 47 `NOT_ANALYZED`, 0 action | 0 | MATCH |
|
|
101
|
+
| VinGrade persisted partial replay | `PARTIAL` | 9 keep, 8 investigate, 19 insufficient, 11 not analyzed | 0 action | 2 | MATCH for retained-failure projection |
|
|
102
|
+
|
|
103
|
+
The controlled generic captures invoke the public `runCli` path from the
|
|
104
|
+
clean-installed package while supplying bounded validated upstream stage
|
|
105
|
+
results; they are not represented as real-provider runs. Capture 015 is the
|
|
106
|
+
separate real-provider public positive run. VinGrade capture 018 replays the
|
|
107
|
+
representative persisted decision chain through the current public completion
|
|
108
|
+
boundary; it is not a fresh 47-occurrence provider run.
|
|
109
|
+
|
|
110
|
+
The VinGrade empty-cache run reconciled 2 projects and 47 occurrences. Exact
|
|
111
|
+
lockfile baselines included PDF.js `6.1.200`, React `19.2.7`, React DOM
|
|
112
|
+
`19.2.7`, and `remark-gfm` `4.0.1`. LangSmith/Python remained
|
|
113
|
+
`NOT_ANALYZED` with `ANALYZER_UNAVAILABLE`, not unused or verified
|
|
114
|
+
`NOT_IMPACTED`. Cached offline research resolved 45 fresh package sources,
|
|
115
|
+
left 1 unavailable, recorded 1 warning, and made 0 external calls.
|
|
116
|
+
|
|
117
|
+
The completion/exit matrix was exercised:
|
|
118
|
+
|
|
119
|
+
| Product outcome | Default | Strict |
|
|
120
|
+
| --- | ---: | ---: |
|
|
121
|
+
| `COMPLETED` | 0 | 0 |
|
|
122
|
+
| `COMPLETED_WITH_REVIEW` | 0 | 2 |
|
|
123
|
+
| `PARTIAL` | 2 | 2 |
|
|
124
|
+
| `INSUFFICIENT_DATA` | 0 | 2 |
|
|
125
|
+
| `FAILED` | 1 | 1 |
|
|
126
|
+
| `CANCELLED` | 130 | 130 |
|
|
127
|
+
|
|
128
|
+
Zero actions, all-keep outcomes, and trustworthy `INVESTIGATE` outcomes do not
|
|
129
|
+
fail by themselves. A provider/output/runtime failure has precedence over
|
|
130
|
+
successful counts. Strict mode only changes the process exit; it does not
|
|
131
|
+
rewrite persisted decisions.
|
|
132
|
+
|
|
133
|
+
## 5. Three Product Questions
|
|
134
|
+
|
|
135
|
+
### Should a dependency move to the evaluated target?
|
|
136
|
+
|
|
137
|
+
The answer is now explicit and conditional. A registry-discovered newer
|
|
138
|
+
version alone yields `INVESTIGATE`, not a recommendation. Equal installed and
|
|
139
|
+
target versions yield `KEEP_CURRENT`. In the positive workflow, the human
|
|
140
|
+
selected React `2.0.0` from installed `1.0.0`, so the deterministic decision
|
|
141
|
+
was `PLAN_UPGRADE` with driver `USER_SELECTED_TARGET`.
|
|
142
|
+
|
|
143
|
+
### Why, and what is the repository-specific risk?
|
|
144
|
+
|
|
145
|
+
The selected target was considered because it was explicitly chosen and
|
|
146
|
+
target-scoped official evidence described a breaking `oldApi` to `newApi`
|
|
147
|
+
change. The repository evidence located the `oldApi` import/call in
|
|
148
|
+
`src/main.js`. The handoff retained `HIGH_RISK`, source coverage, official
|
|
149
|
+
provenance, and the limitation that extractive provenance does not prove
|
|
150
|
+
semantic applicability or runtime safety.
|
|
151
|
+
|
|
152
|
+
### What handoff is available?
|
|
153
|
+
|
|
154
|
+
After human approval, inspect `src/main.js`, replace `oldApi` with `newApi`
|
|
155
|
+
before changing React to `2.0.0`, then run the project-derived
|
|
156
|
+
`npm run build` and `npm run test`. These commands are available but not
|
|
157
|
+
executed by UpgradeLens. The checklist explicitly lacks a recovery plan; a
|
|
158
|
+
Coding Agent must define rollback and improve behavioral test coverage before
|
|
159
|
+
implementation approval.
|
|
160
|
+
|
|
161
|
+
## 6. Feature Alignment Matrix
|
|
162
|
+
|
|
163
|
+
| Feature | Verdict | Evidence | User impact | Release relevance |
|
|
164
|
+
| --- | --- | --- | --- | --- |
|
|
165
|
+
| Dependency Inventory | **MATCH** | Current discovery plus VinGrade capture: 2 projects/47 exact occurrences; lockfile versions remain separate from declarations | Teams know what is declared and installed per occurrence | Core ready |
|
|
166
|
+
| Upgrade Detection | **MATCH** | Default registry capture identifies a newer target but projects `INVESTIGATE` | Attention is visible without implying approval | Core ready |
|
|
167
|
+
| Upgrade Recommendation | **MATCH** | Policy 1.1.0 and captures produce keep/plan/investigate/insufficient/not-analyzed deterministically | Lead receives a direct decision | Core ready |
|
|
168
|
+
| Reason and Evidence | **MATCH** | Decision driver, reason, official evidence provenance, freshness, and limitations survive to artifacts/output | Reviewers can audit why a decision exists | Core ready |
|
|
169
|
+
| Repository Risk Assessment | **MATCH** | Positive Node affected area is retained; unsupported Python coverage is unavailable rather than non-use | Supported findings are useful; unsupported coverage is honest | Core ready |
|
|
170
|
+
| Dependency Classification | **PARTIAL_MATCH** | Direct dependency type/ecosystem/project are preserved, but framework/core/small/transitive planning classes are absent | Enough occurrence context for current planning, not richer portfolio grouping | Non-blocking |
|
|
171
|
+
| Prioritization | **OUT_OF_SCOPE_FOR_V0_5_0** | No rank, urgency score, or ordered multi-dependency queue | Teams order accepted work themselves | Future interface/product layer |
|
|
172
|
+
| Migration Handoff | **MATCH** | Real positive checklist contains installed→target, selected official action, affected source, project commands, limitations, and review gate | Coding Agent can start bounded planning | Experimental but usable |
|
|
173
|
+
| Human Review | **MATCH** | Explicit approval language and `ACTIONABLE_WITH_REVIEW`; no automatic source/dependency edit | Human remains the authorization boundary | Core invariant ready |
|
|
174
|
+
| Coding Agent Handoff | **MATCH** | Independent agent answered all requested questions from source + checklist only | No external docs/version/impact re-research was needed | Ready for planning |
|
|
175
|
+
| Model Transparency | **PARTIAL_MATCH** | CLI/resolver and qualification record expose exact provider/model/adapter/qualification ID, but the checklist JSON itself does not embed that runtime identity | Audit is possible with the qualification record, not from the standalone checklist | Keep experimental |
|
|
176
|
+
| Evidence Freshness | **MATCH** | Cached/fresh/unavailable source state is explicit; exact qualification binds prompt/candidate/runtime | Offline and provider claims are bounded in time and identity | Core ready |
|
|
177
|
+
| Offline Readiness | **MATCH** | Valid-cache and empty-cache captures made zero external calls and invented no latest/security/support claims | Private/offline use fails safely | Core ready |
|
|
178
|
+
| Continuous Tracking Readiness | **MATCH** | Stable occurrence/decision IDs, artifact digests, lineage, and deterministic replay tests | Runs can be compared and tampering rejected | Core ready |
|
|
179
|
+
| CLI-first Delivery | **PARTIAL_MATCH** | One packaged `analyze` command is decision-first and CI-friendly; duplicate same-manifest selector retries remain unusable | Main path is usable; one exact-selection shape is blocked | High known limitation |
|
|
180
|
+
|
|
181
|
+
**After: 11 MATCH / 3 PARTIAL_MATCH / 0 NOT_MATCH /
|
|
182
|
+
1 OUT_OF_SCOPE_FOR_V0_5_0.**
|
|
183
|
+
|
|
184
|
+
## 7. CLI UX Review
|
|
185
|
+
|
|
186
|
+
The packaged CLI now leads with `UpgradeLens product outcome`, then decisions,
|
|
187
|
+
handoff/next step, and only then diagnostics and artifact paths. Raw internal
|
|
188
|
+
reason codes are hidden from default presentation. This is a material
|
|
189
|
+
decision-first improvement over the previous counts-first output.
|
|
190
|
+
|
|
191
|
+
Default registry UX correctly says that availability is not a recommendation
|
|
192
|
+
and points to `--target`. Explicit target UX persists target origin and exposes
|
|
193
|
+
the recommendation driver. Invalid target and ambiguous selector errors fail
|
|
194
|
+
before provider work. Partial completion lists failed occurrences and a
|
|
195
|
+
specific recovery step. Strict mode is suitable for CI without changing
|
|
196
|
+
artifact semantics.
|
|
197
|
+
|
|
198
|
+
The exact captures are under
|
|
199
|
+
`.upgradelens/review/mvp-05-final-rereview/`:
|
|
200
|
+
|
|
201
|
+
- 001–002: packaged help/version.
|
|
202
|
+
- 003–004: default and explicit-target public workflows.
|
|
203
|
+
- 005–007: scoped, ambiguous, and invalid target selectors.
|
|
204
|
+
- 008–013: partial, insufficient, offline cached/empty, strict, cancellation.
|
|
205
|
+
- 014: clean-installed packaged CLI.
|
|
206
|
+
- 015: real-provider explicit positive.
|
|
207
|
+
- 016–018: VinGrade empty-cache, cached research, and partial replay.
|
|
208
|
+
|
|
209
|
+
The primary UX limitation is the High selector issue described in section 11.
|
|
210
|
+
The CLI fails closed, but its displayed candidates can be identical and
|
|
211
|
+
therefore cannot guide the user to a resolvable exact selector.
|
|
212
|
+
|
|
213
|
+
## 8. Coding Agent Handoff
|
|
214
|
+
|
|
215
|
+
An independent Coding Agent received only:
|
|
216
|
+
|
|
217
|
+
- an isolated source snapshot containing `package.json` and `src/main.js`;
|
|
218
|
+
- the Migration Checklist v2 from the real-provider explicit-target workflow.
|
|
219
|
+
|
|
220
|
+
It received no network/web/MCP access, raw upstream UpgradeLens artifacts,
|
|
221
|
+
prior reports, or source modification authority.
|
|
222
|
+
|
|
223
|
+
**Verdict: `PASS`.** The Agent recovered React `1.0.0 → 2.0.0`, explained the
|
|
224
|
+
explicit-selection driver and official breaking evidence, identified
|
|
225
|
+
`oldApi → newApi`, located the import and call in `src/main.js`, and identified
|
|
226
|
+
the package declaration. It correctly treated `npm run build` and
|
|
227
|
+
`npm run test` as available but not run.
|
|
228
|
+
|
|
229
|
+
No external re-research was required. Source inspection was still required
|
|
230
|
+
before patch planning, which is the intended division of responsibility. The
|
|
231
|
+
Agent did not invent or perform source edits. It placed API-semantic checks,
|
|
232
|
+
lockfile generation, installation, validation execution, behavioral tests,
|
|
233
|
+
and rollback definition outside the supplied handoff.
|
|
234
|
+
|
|
235
|
+
The approval/recovery boundary remained clear: human approval is required;
|
|
236
|
+
the checklist does not authorize code changes, does not verify semantic
|
|
237
|
+
applicability, and provides no recovery plan. The isolated snapshot also did
|
|
238
|
+
not contain the referenced lockfile, so installed-baseline provenance could
|
|
239
|
+
be read from the checklist but not independently revalidated by the Agent.
|
|
240
|
+
|
|
241
|
+
## 9. Offline and Model/Provider Review
|
|
242
|
+
|
|
243
|
+
With a valid offline cache, the workflow reused cached evidence, reported
|
|
244
|
+
freshness, made no external call, and produced a review outcome rather than
|
|
245
|
+
inventing a latest/security/support claim. With an empty cache, it abstained,
|
|
246
|
+
reported `INSUFFICIENT_DATA`, and gave an online refresh/explicit validated
|
|
247
|
+
target next step. VinGrade behaved the same way at representative scale.
|
|
248
|
+
|
|
249
|
+
The persisted real-provider qualification matched:
|
|
250
|
+
|
|
251
|
+
- provider/model/adapter:
|
|
252
|
+
`openai-compatible / openai/gpt-5.5 / openai-compatible`;
|
|
253
|
+
- qualification ID:
|
|
254
|
+
`sha256:4fa4954d6f254d94859bce17aec6209394d380e4635155a6f3ce23a7e9b70765`;
|
|
255
|
+
- prompt version `2`;
|
|
256
|
+
- candidate schema digest:
|
|
257
|
+
`sha256:6ac9e1477e206ab082ac38cdb263254c996ee4684e04c80af6b9a08ceae0375d`;
|
|
258
|
+
- verdict `QUALIFIED`.
|
|
259
|
+
|
|
260
|
+
The positive path was rerun against that exact real runtime. It made 2
|
|
261
|
+
requests, observed 0 hidden retries, had 0 retained failures, and completed in
|
|
262
|
+
6.987 seconds. The result was `PLAN_UPGRADE` and
|
|
263
|
+
`ACTIONABLE_WITH_REVIEW`. No fake runtime is used to claim real qualification.
|
|
264
|
+
|
|
265
|
+
Qualification matching is exact across task/dataset/criteria/policy/prompt,
|
|
266
|
+
candidate schema, and runtime identity. A compatible model is not silently
|
|
267
|
+
treated as qualified. The deterministic v2 envelope is part of the bound
|
|
268
|
+
candidate/prompt scope rather than an untracked equivalence.
|
|
269
|
+
|
|
270
|
+
**Default-enablement decision: keep Migration Checklist v2 experimental.**
|
|
271
|
+
Real qualification removes the positive-path qualification blocker, but
|
|
272
|
+
semantic applicability remains unverified, recovery evidence is absent, and
|
|
273
|
+
runtime identity is not self-contained in the checklist artifact. These are
|
|
274
|
+
not blockers for the deterministic CLI/product core release.
|
|
275
|
+
|
|
276
|
+
## 10. Completion Threshold Assessment
|
|
277
|
+
|
|
278
|
+
Product completion schema `1.0.0` implements a documented closed-state
|
|
279
|
+
projection. Precedence is:
|
|
280
|
+
|
|
281
|
+
1. any retained version/provider/output/runtime or action-generation failure
|
|
282
|
+
→ `PARTIAL`;
|
|
283
|
+
2. an explicitly selected insufficient target, or strictly more than half of
|
|
284
|
+
all occurrences unanswered → `INSUFFICIENT_DATA`;
|
|
285
|
+
3. a valid review-bearing result → `COMPLETED_WITH_REVIEW`;
|
|
286
|
+
4. otherwise → `COMPLETED`.
|
|
287
|
+
|
|
288
|
+
The architecture document states the rule, and runtime tests cover the closed
|
|
289
|
+
statuses, default/strict exits, explicit-target insufficiency, and failure
|
|
290
|
+
precedence. The code uses an exact `unansweredCount * 2 > occurrenceCount`
|
|
291
|
+
comparison, so 50% is not a majority.
|
|
292
|
+
|
|
293
|
+
The policy still has a product discontinuity: 49% unanswered produces a
|
|
294
|
+
review/completed projection while 51% produces `INSUFFICIENT_DATA`, even when
|
|
295
|
+
the unanswered absolute count differs by only one. No direct 49%/50%/51%
|
|
296
|
+
boundary test was found. The semantics also scale mathematically but do not
|
|
297
|
+
express whether one critical unanswered dependency outweighs many answered
|
|
298
|
+
minor dependencies.
|
|
299
|
+
|
|
300
|
+
Selected explicit-target insufficiency correctly has precedence, so unrelated
|
|
301
|
+
unselected occurrences cannot hide it. Provider failure always overrides the
|
|
302
|
+
threshold. The current rule is deterministic and safe, but its user-facing
|
|
303
|
+
rationale and boundary coverage are Medium product/technical debt. It is not
|
|
304
|
+
a core release blocker because it changes the completion label and strict
|
|
305
|
+
exit, not the persisted dependency decisions.
|
|
306
|
+
|
|
307
|
+
## 11. Defects and Gaps
|
|
308
|
+
|
|
309
|
+
### Blocker
|
|
310
|
+
|
|
311
|
+
None found for the CLI/product core release.
|
|
312
|
+
|
|
313
|
+
### High — Exact selector cannot disambiguate same-manifest duplicates
|
|
314
|
+
|
|
315
|
+
- **Reproduction:** Run an unqualified target selector where the same canonical
|
|
316
|
+
package appears twice in one project, manifest, and dependency type but with
|
|
317
|
+
different declared versions; VinGrade's duplicate
|
|
318
|
+
`pypi:langchain-openai` occurrence reproduces it.
|
|
319
|
+
- **Expected:** Stable candidate guidance contains a selector field that makes
|
|
320
|
+
each occurrence uniquely selectable.
|
|
321
|
+
- **Actual:** Occurrence identity includes declared version, but target-selector
|
|
322
|
+
grammar does not. The error prints two identical retry selectors, and either
|
|
323
|
+
retry remains ambiguous.
|
|
324
|
+
- **Product impact:** The public explicit-target path is unavailable for that
|
|
325
|
+
occurrence shape. It fails closed—there is no wrong first-match selection or
|
|
326
|
+
fan-out—but a user cannot proceed without changing the manifest or product.
|
|
327
|
+
- **Evidence:** Capture
|
|
328
|
+
`006-ambiguous-monorepo-selector/`, `src/target-selector.js`, and the
|
|
329
|
+
occurrence-identity tests.
|
|
330
|
+
|
|
331
|
+
### Medium — Completion majority boundary lacks direct boundary coverage
|
|
332
|
+
|
|
333
|
+
- **Reproduction:** Project completion with 49%, 50%, then 51% unanswered
|
|
334
|
+
non-failed occurrences.
|
|
335
|
+
- **Expected:** A versioned, user-explainable boundary with direct tests for
|
|
336
|
+
behavior immediately around it.
|
|
337
|
+
- **Actual:** The rule is documented and deterministic, but focused tests cover
|
|
338
|
+
representative statuses rather than the 49/50/51 boundary.
|
|
339
|
+
- **Product impact:** A one-occurrence change can alter completion/strict-exit
|
|
340
|
+
semantics without changing any individual decision.
|
|
341
|
+
- **Evidence:** `src/product-completion.js`, MP-R05 architecture, and
|
|
342
|
+
`test/product-completion-cli.test.js`.
|
|
343
|
+
|
|
344
|
+
### Medium — Checklist runtime identity is not self-contained
|
|
345
|
+
|
|
346
|
+
- **Reproduction:** Give a reviewer only the generated
|
|
347
|
+
`migration-checklist.json`.
|
|
348
|
+
- **Expected:** If model transparency is claimed for the standalone handoff,
|
|
349
|
+
it should identify or directly link its exact qualified runtime.
|
|
350
|
+
- **Actual:** The CLI resolver and separate persisted qualification record show
|
|
351
|
+
provider/model/adapter and qualification ID, but Checklist v2 contains
|
|
352
|
+
generator and input lineage, not runtime/qualification identity.
|
|
353
|
+
- **Product impact:** A standalone shared checklist cannot independently prove
|
|
354
|
+
which qualified runtime selected its action.
|
|
355
|
+
- **Evidence:** Real-provider checklist and capture 015 metadata.
|
|
356
|
+
|
|
357
|
+
### Low — Verification availability can be over-read
|
|
358
|
+
|
|
359
|
+
- **Reproduction:** Read `verificationStatus: AVAILABLE` without the command
|
|
360
|
+
execution state.
|
|
361
|
+
- **Expected:** Users understand that project-derived commands exist but have
|
|
362
|
+
not been executed.
|
|
363
|
+
- **Actual:** The detailed handoff preserves the state, and the Coding Agent
|
|
364
|
+
interpreted it correctly; compact consumers could still over-read
|
|
365
|
+
“available” as “passed.”
|
|
366
|
+
- **Product impact:** Presentation risk only; no test success is fabricated.
|
|
367
|
+
- **Evidence:** Real-provider checklist and Coding Agent reassessment.
|
|
368
|
+
|
|
369
|
+
### Future scope
|
|
370
|
+
|
|
371
|
+
Dependency portfolio classification, prioritization/ranking, dashboard/MCP/IDE
|
|
372
|
+
interfaces, autonomous patching, and automatic rollback are not implemented.
|
|
373
|
+
They are not required for the v0.5.0 CLI-first positioning.
|
|
374
|
+
|
|
375
|
+
## 12. Over-engineering Assessment
|
|
376
|
+
|
|
377
|
+
Complexity that directly protects the product outcome should remain:
|
|
378
|
+
|
|
379
|
+
- exact occurrence identity and fail-closed selection;
|
|
380
|
+
- artifact lineage/digests and tamper rejection;
|
|
381
|
+
- ecosystem-scoped coverage and installed-baseline provenance;
|
|
382
|
+
- deterministic decision/completion precedence;
|
|
383
|
+
- provider qualification bound to runtime/prompt/candidate identity;
|
|
384
|
+
- extractive action selection, limitations, and human-review gates.
|
|
385
|
+
|
|
386
|
+
Complexity that should stay behind the default CLI:
|
|
387
|
+
|
|
388
|
+
- raw reason codes, schema/digest detail, qualification matching diagnostics,
|
|
389
|
+
stage-level counters, and provider envelope internals;
|
|
390
|
+
- governance/evaluation/benchmark machinery used to qualify an experimental
|
|
391
|
+
model path.
|
|
392
|
+
|
|
393
|
+
The default user normally needs the Markdown report, persisted Upgrade
|
|
394
|
+
Decision, and—only for an eligible selected target—the Migration Checklist.
|
|
395
|
+
Most raw chain artifacts are audit/debug inputs, not documents a planning
|
|
396
|
+
meeting should open.
|
|
397
|
+
|
|
398
|
+
The product still exposes many separately runnable stages, but the supported
|
|
399
|
+
`analyze` command hides that orchestration adequately. The largest
|
|
400
|
+
not-yet-demonstrated product layers are classification and prioritization;
|
|
401
|
+
they should remain future scope rather than trigger a rewrite. Dashboard,
|
|
402
|
+
MCP, and IDE surfaces are also future interfaces, not MVP requirements.
|
|
403
|
+
|
|
404
|
+
## 13. Tests and Validation
|
|
405
|
+
|
|
406
|
+
| Validation | Result |
|
|
407
|
+
| --- | --- |
|
|
408
|
+
| Canonical `npm test` | **603 passed, 0 failed, 1 skipped; 604 total** |
|
|
409
|
+
| Canonical skip | Online CLI keep-alive lifecycle; local loopback listeners unavailable in sandbox |
|
|
410
|
+
| Focused MP-R01–MP-R05 | **82 passed, 0 failed, 0 skipped** |
|
|
411
|
+
| Invariant/tamper/determinism group | **188 passed, 0 failed, 0 skipped** |
|
|
412
|
+
| Package content guard | **Passed:** 225 files after adding this report, 0 capture evidence, 20 required assets |
|
|
413
|
+
| `git diff --check` | **Passed** |
|
|
414
|
+
| Actual `npm pack` | **Passed:** `upgradelens-0.4.0.tgz` |
|
|
415
|
+
| Clean install from tarball | **Passed** |
|
|
416
|
+
| Packaged `--version` / `--help` | **Passed** |
|
|
417
|
+
| Clean-installed public exports | **437** |
|
|
418
|
+
| Forbidden packaged names | **None:** no `.env`, `.upgradelens`, review capture, or qualification input |
|
|
419
|
+
| CLI captures | **18 entries**, sequential and manifest-validated |
|
|
420
|
+
| Cancellation | **Passed**, controlled exit 130 |
|
|
421
|
+
| Real-provider positive | **Passed:** 2 requests, 0 hidden retry, 0 failure, qualified runtime |
|
|
422
|
+
|
|
423
|
+
Focused coverage included supported lockfile/workspace resolution, unsupported
|
|
424
|
+
coverage fail-closed behavior, impact evidence, target selection, policy
|
|
425
|
+
1.1.0, product completion/exit semantics, migration context/contract/eval v2,
|
|
426
|
+
extractive generation, orchestration, qualification, package governance,
|
|
427
|
+
tamper rejection, and deterministic replay.
|
|
428
|
+
|
|
429
|
+
Three generic repository shapes were covered: a single Node explicit-positive
|
|
430
|
+
workflow, supported/unsupported polyglot coverage, and monorepo/different-project
|
|
431
|
+
ambiguity with qualified selection. The additional VinGrade duplicate capture
|
|
432
|
+
exposed the same-manifest selector gap rather than masking it.
|
|
433
|
+
|
|
434
|
+
The canonical skip is not counted as a pass. There were no blocked required
|
|
435
|
+
workflow scenarios. VinGrade's partial chain was replayed from persisted
|
|
436
|
+
representative artifacts rather than funded and rerun through all 47 current
|
|
437
|
+
provider contexts; the current real-provider acceptance was instead bounded
|
|
438
|
+
to the explicit-positive qualified path.
|
|
439
|
+
|
|
440
|
+
## 14. Release Recommendation
|
|
441
|
+
|
|
442
|
+
**`GO_WITH_KNOWN_LIMITATIONS`**
|
|
443
|
+
|
|
444
|
+
For the CLI/product core, the previous release blockers are resolved:
|
|
445
|
+
installed versions are trustworthy where supported, coverage limitations do
|
|
446
|
+
not become non-use, recommendation semantics are deterministic, partial
|
|
447
|
+
provider failure cannot masquerade as full success, and the CLI communicates
|
|
448
|
+
the product decision first. The High selector gap is narrow, reproducible, and
|
|
449
|
+
fail-closed; it should be documented and fixed promptly, but it does not
|
|
450
|
+
create a wrong recommendation or unauthorized migration.
|
|
451
|
+
|
|
452
|
+
For Migration Checklist v2 default enablement: **do not enable by default**.
|
|
453
|
+
Keep it opt-in and experimental. The exact real-provider path is now qualified
|
|
454
|
+
and its Coding Agent handoff passes, but semantic applicability, recovery
|
|
455
|
+
planning, and standalone runtime identity remain bounded limitations.
|
|
456
|
+
|
|
457
|
+
This recommendation does not authorize a version bump, merge, tag, push,
|
|
458
|
+
release, target-repository modification, or dependency migration.
|
|
459
|
+
|
|
460
|
+
## 15. Next Tasks
|
|
461
|
+
|
|
462
|
+
1. Extend target-selector grammar and stable candidate guidance with a field
|
|
463
|
+
that uniquely resolves same-project/same-manifest/same-type duplicates;
|
|
464
|
+
add the VinGrade-shaped regression.
|
|
465
|
+
2. Add direct 49%/50%/51% completion-threshold tests and document the
|
|
466
|
+
user-facing rationale without changing the policy in this review.
|
|
467
|
+
3. Make the experimental checklist self-identify or directly link its exact
|
|
468
|
+
qualification/runtime identity.
|
|
469
|
+
4. Clarify compact verification UX as “commands available, not executed.”
|
|
470
|
+
5. Keep default enablement gated until recovery semantics and semantic
|
|
471
|
+
applicability expectations have an explicit product decision.
|