@thomasminh1995/depverdict 0.6.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (252) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +518 -0
  3. package/bin/depverdict.js +7 -0
  4. package/bin/upgradelens.js +7 -0
  5. package/docs/GR-01-Semantic-Grounding-Failure-Analysis.md +309 -0
  6. package/docs/GR-02-Versioned-Action-Evaluation-Criteria.md +187 -0
  7. package/docs/GR-03-Extractive-Contract-Safety-Experiment.md +242 -0
  8. package/docs/GR-04-Versioned-Production-Extractive-Contract.md +154 -0
  9. package/docs/IA-01-Repository-Usage-Discovery.md +122 -0
  10. package/docs/IA-02-Repository-Impact-Analysis.md +118 -0
  11. package/docs/IA-03-Repository-Impact-Evidence.md +160 -0
  12. package/docs/IA-04-CLI-Orchestration.md +235 -0
  13. package/docs/IA-05-Real-Provider-Validation.md +235 -0
  14. package/docs/IA-05-VinGrade-Validation.md +339 -0
  15. package/docs/MVP-01.md +48 -0
  16. package/docs/MVP-02-Architecture.md +536 -0
  17. package/docs/MVP-02-CLI-HTTP-Runtime.md +50 -0
  18. package/docs/MVP-02-HTTP-Lifecycle.md +37 -0
  19. package/docs/MVP-02-Knowledge-Manifest-Generation.md +75 -0
  20. package/docs/MVP-02-Knowledge-Manifest.md +279 -0
  21. package/docs/MVP-02-Knowledge-Research-Orchestration.md +62 -0
  22. package/docs/MVP-02-Knowledge-Store.md +87 -0
  23. package/docs/MVP-02-PyPI-Registry-Adapter.md +97 -0
  24. package/docs/MVP-02-Research-Planning.md +196 -0
  25. package/docs/MVP-02-Source-Provenance.md +81 -0
  26. package/docs/MVP-02-npm-Registry-Adapter.md +99 -0
  27. package/docs/RR-01-End-to-End-and-Real-Provider-Validation.md +393 -0
  28. package/docs/RR-01-RERUN-Extractive-Contract-Validation.md +566 -0
  29. package/docs/RR-02-Full-Product-Workflow-and-Developer-CLI-UX-Review.md +35 -0
  30. package/docs/RR02-FIX-01-Persistent-Qualification-Resolution.md +32 -0
  31. package/docs/RR02-FIX-02-Stage-aware-CLI-Progress-and-Heartbeat.md +28 -0
  32. package/docs/RR02-FIX-03-npm-Capture-Evidence-Exclusion.md +33 -0
  33. package/docs/RR02-FIX-03A-Complete-Package-Exclusion-and-Evidence-Commit.md +223 -0
  34. package/docs/RR02-FIX-04-Event-loop-safe-Heartbeat.md +393 -0
  35. package/docs/RR02-FIX-05-Materialize-Persisted-Qualification.md +207 -0
  36. package/docs/RR02-RERUN-CLI-Qualification-Progress-UX-and-Package-Validation.md +342 -0
  37. package/docs/VinGrade-MVP-02-Validation.md +480 -0
  38. package/docs/VinGrade-RC02-Live-Validation.md +273 -0
  39. package/docs/ai-capability-discovery.md +573 -0
  40. package/docs/ai-engineering-production-readiness.md +390 -0
  41. package/docs/ai-engineering-review.md +251 -0
  42. package/docs/ai-runtime-governance-discovery.md +754 -0
  43. package/docs/architecture-overview.md +78 -0
  44. package/docs/cli-progress.md +111 -0
  45. package/docs/decisions/diff-01-brand-distribution-identity.md +450 -0
  46. package/docs/decisions/diff-02-identity-compatibility-contract.md +274 -0
  47. package/docs/decisions/diff-03-repository-docs-community-migration.md +165 -0
  48. package/docs/decisions/diff-04-release-evidence-gap-acceptance.md +110 -0
  49. package/docs/discovery/mvp-05-ai-migration-planning-discovery.md +350 -0
  50. package/docs/gateway-runtime-discovery.md +614 -0
  51. package/docs/live-ai-validation.md +299 -0
  52. package/docs/migration-planning-qualification-resolution.md +99 -0
  53. package/docs/migrations/upgradelens-to-depverdict.md +97 -0
  54. package/docs/mp-r03-deterministic-upgrade-decision-architecture.md +135 -0
  55. package/docs/mp-r04-evidence-bounded-migration-handoff-architecture.md +116 -0
  56. package/docs/mp-r05-product-completion-and-decision-first-cli-architecture.md +162 -0
  57. package/docs/mvp-05-deterministic-context-runtime.md +127 -0
  58. package/docs/mvp-05-migration-checklist-contract.md +166 -0
  59. package/docs/mvp-05-migration-checklist-orchestration.md +105 -0
  60. package/docs/mvp-05-migration-evaluation-and-qualification.md +135 -0
  61. package/docs/mvp-05-provider-neutral-generator.md +79 -0
  62. package/docs/ollama-local-smoke-validation.md +156 -0
  63. package/docs/openai-compatible-runtime-discovery.md +789 -0
  64. package/docs/openrouter-one-dependency-validation.md +205 -0
  65. package/docs/oss-02-package-guard-hardening-architecture.md +131 -0
  66. package/docs/oss-04-public-ci-package-metadata-architecture.md +142 -0
  67. package/docs/package-content-policy.md +98 -0
  68. package/docs/releases/v0.5.0-technical-preview.md +114 -0
  69. package/docs/releases/v0.6.0-alpha.1-depverdict-preview.md +101 -0
  70. package/docs/reviews/diff-02-identity-contract-compatibility.md +413 -0
  71. package/docs/reviews/diff-03-repository-docs-community-migration.md +364 -0
  72. package/docs/reviews/diff-04-depverdict-distribution-identity-readiness-rereview.md +453 -0
  73. package/docs/reviews/diff-04-fix-post-rename-identity-release-remediation.md +310 -0
  74. package/docs/reviews/diff-05-final-preview-distribution-qualification.md +561 -0
  75. package/docs/reviews/mvp-05-final-product-value-workflow-rereview.md +471 -0
  76. package/docs/reviews/mvp-05-product-workflow-review.md +605 -0
  77. package/docs/reviews/oss-01-duplicate-artifact-investigation-cleanup.md +411 -0
  78. package/docs/reviews/oss-02-package-guard-hardening.md +303 -0
  79. package/docs/reviews/oss-03-community-scaffolding.md +378 -0
  80. package/docs/reviews/oss-04-public-ci-package-metadata.md +439 -0
  81. package/docs/reviews/oss-05-technical-preview-qualification.md +482 -0
  82. package/docs/reviews/upgradelens-vs-upgradedepdetective-source-comparison.md +355 -0
  83. package/docs/reviews/v0.5.0-pre-release-smoke.md +263 -0
  84. package/docs/reviews/v0.5.0-version-bump-release-verification.md +306 -0
  85. package/docs/runtime-contract-discovery.md +521 -0
  86. package/docs/structured-output-compatibility-report.md +100 -0
  87. package/docs/ts-fix-01-exact-duplicate-occurrence-target-selection-architecture.md +111 -0
  88. package/docs/version-analysis-architecture.md +827 -0
  89. package/eval/README.md +86 -0
  90. package/eval/datasets/generic/declared-constraint.json +59 -0
  91. package/eval/datasets/generic/evidence-conflict.json +73 -0
  92. package/eval/datasets/generic/major-breaking-release.json +66 -0
  93. package/eval/datasets/generic/missing-evidence.json +46 -0
  94. package/eval/datasets/generic/patch-release-low.json +59 -0
  95. package/eval/datasets/node/axios-patch-low.json +59 -0
  96. package/eval/datasets/node/react-major-breaking.json +66 -0
  97. package/eval/datasets/node/react-minor-compatibility.json +66 -0
  98. package/eval/datasets/python/fastapi-deprecation.json +66 -0
  99. package/eval/datasets/python/pydantic-major-breaking.json +66 -0
  100. package/eval/migration-planning/golden-dataset-v2.json +306 -0
  101. package/eval/migration-planning/golden-dataset.json +214 -0
  102. package/eval/schemas/expected-result.schema.json +88 -0
  103. package/eval/schemas/golden-case.schema.json +181 -0
  104. package/package.json +57 -0
  105. package/schemas/ai-scorecard.schema.json +132 -0
  106. package/schemas/benchmark-report.schema.json +189 -0
  107. package/schemas/benchmark.schema.json +55 -0
  108. package/schemas/capability-profile.schema.json +44 -0
  109. package/schemas/conformance-report.schema.json +150 -0
  110. package/schemas/deployment-profile.schema.json +64 -0
  111. package/schemas/evaluation-report.schema.json +158 -0
  112. package/schemas/knowledge-evidence-bundle.schema.json +150 -0
  113. package/schemas/knowledge-manifest.schema.json +548 -0
  114. package/schemas/metrics.schema.json +178 -0
  115. package/schemas/migration-checklist-extractive-candidate.schema.json +42 -0
  116. package/schemas/migration-checklist.schema.json +706 -0
  117. package/schemas/migration-evaluation-dataset-v2.schema.json +208 -0
  118. package/schemas/migration-evaluation-dataset.schema.json +204 -0
  119. package/schemas/migration-planning-qualification-record.schema.json +234 -0
  120. package/schemas/project-manifest.schema.json +308 -0
  121. package/schemas/qualification-record.schema.json +56 -0
  122. package/schemas/repository-impact-evidence.schema.json +232 -0
  123. package/schemas/repository-impact.schema.json +202 -0
  124. package/schemas/upgrade-decision.schema.json +273 -0
  125. package/schemas/usage-index.schema.json +179 -0
  126. package/schemas/version-analysis.schema.json +449 -0
  127. package/src/ai-runtime-debug.js +325 -0
  128. package/src/ai-runtime-error.js +42 -0
  129. package/src/ai-runtime.js +174 -0
  130. package/src/ai-scorecard.js +204 -0
  131. package/src/ai-version-analysis.js +484 -0
  132. package/src/artifact-root-compatibility.js +91 -0
  133. package/src/benchmark-report.js +111 -0
  134. package/src/benchmark-runner.js +191 -0
  135. package/src/canonical-json.js +69 -0
  136. package/src/cli.js +1299 -0
  137. package/src/conformance-report.js +158 -0
  138. package/src/conformance-runner.js +253 -0
  139. package/src/constants.js +73 -0
  140. package/src/cooperative-scheduler.js +79 -0
  141. package/src/dependencies.js +44 -0
  142. package/src/dependency-ai-context.js +625 -0
  143. package/src/detectors.js +253 -0
  144. package/src/discovery.js +234 -0
  145. package/src/ecosystem-version-adapter.js +294 -0
  146. package/src/environment-compatibility.js +77 -0
  147. package/src/evaluation-comparator.js +158 -0
  148. package/src/evaluation-report.js +76 -0
  149. package/src/evaluation-runner.js +248 -0
  150. package/src/evidence-source-adapter.js +472 -0
  151. package/src/files.js +89 -0
  152. package/src/governance-diagnostics.js +64 -0
  153. package/src/governance-loader.js +63 -0
  154. package/src/governance-metadata.js +346 -0
  155. package/src/governance-validator.js +360 -0
  156. package/src/http/bounded-fetch.js +278 -0
  157. package/src/http/cli-http-runtime.js +44 -0
  158. package/src/impact/input-loader.js +157 -0
  159. package/src/impact/matcher.js +40 -0
  160. package/src/impact/repository-impact.js +199 -0
  161. package/src/impact/runtime.js +24 -0
  162. package/src/impact/status.js +62 -0
  163. package/src/impact/writer.js +30 -0
  164. package/src/impact-evidence/input-loader.js +202 -0
  165. package/src/impact-evidence/repository-impact-evidence.js +234 -0
  166. package/src/impact-evidence/runtime.js +16 -0
  167. package/src/impact-evidence/writer.js +30 -0
  168. package/src/index.js +563 -0
  169. package/src/installed-version-baseline.js +196 -0
  170. package/src/knowledge-cache.js +324 -0
  171. package/src/knowledge-evidence-bundle.js +101 -0
  172. package/src/knowledge-evidence-producer.js +233 -0
  173. package/src/knowledge-manifest-builder.js +188 -0
  174. package/src/knowledge-manifest-writer.js +32 -0
  175. package/src/knowledge-manifest.js +255 -0
  176. package/src/knowledge-research.js +615 -0
  177. package/src/metrics-engine.js +205 -0
  178. package/src/migration-checklist/ai-candidate.js +320 -0
  179. package/src/migration-checklist/assembler.js +37 -0
  180. package/src/migration-checklist/context-runtime.js +828 -0
  181. package/src/migration-checklist/evaluation/action-criteria.js +244 -0
  182. package/src/migration-checklist/evaluation/comparator-v2.js +332 -0
  183. package/src/migration-checklist/evaluation/comparator.js +279 -0
  184. package/src/migration-checklist/evaluation/dataset-v2.js +227 -0
  185. package/src/migration-checklist/evaluation/dataset.js +336 -0
  186. package/src/migration-checklist/evaluation/extractive-fixtures-v2.js +148 -0
  187. package/src/migration-checklist/evaluation/metrics-v2.js +226 -0
  188. package/src/migration-checklist/evaluation/metrics.js +158 -0
  189. package/src/migration-checklist/evaluation/qualification-v2.js +321 -0
  190. package/src/migration-checklist/evaluation/qualification.js +239 -0
  191. package/src/migration-checklist/evaluation/runner-v2.js +294 -0
  192. package/src/migration-checklist/evaluation/runner.js +194 -0
  193. package/src/migration-checklist/evaluation/scorecard-v2.js +106 -0
  194. package/src/migration-checklist/evaluation/scorecard.js +86 -0
  195. package/src/migration-checklist/extractive-candidate.js +166 -0
  196. package/src/migration-checklist/extractive-prompt.js +62 -0
  197. package/src/migration-checklist/generator.js +702 -0
  198. package/src/migration-checklist/grounding-policy.js +117 -0
  199. package/src/migration-checklist/input-loader.js +613 -0
  200. package/src/migration-checklist/migration-checklist.js +635 -0
  201. package/src/migration-checklist/presentation.js +292 -0
  202. package/src/migration-checklist/progress.js +96 -0
  203. package/src/migration-checklist/prompt.js +83 -0
  204. package/src/migration-checklist/qualification-guard.js +462 -0
  205. package/src/migration-checklist/qualification-resolution.js +122 -0
  206. package/src/migration-checklist/qualification-store.js +225 -0
  207. package/src/migration-checklist/runtime.js +205 -0
  208. package/src/migration-checklist/verification.js +134 -0
  209. package/src/migration-checklist/writer.js +35 -0
  210. package/src/openai-compatible-provider.js +451 -0
  211. package/src/orchestration/failure-log.js +32 -0
  212. package/src/orchestration/pipeline.js +200 -0
  213. package/src/orchestration/progress-events.js +337 -0
  214. package/src/orchestration/progress-reporter.js +131 -0
  215. package/src/orchestration/text-writer.js +22 -0
  216. package/src/portable.js +13 -0
  217. package/src/product-completion.js +249 -0
  218. package/src/project-manifest-input.js +90 -0
  219. package/src/project-manifest.js +141 -0
  220. package/src/python-requirements.js +137 -0
  221. package/src/registry/npm-packument.js +256 -0
  222. package/src/registry/npm-registry-adapter.js +262 -0
  223. package/src/registry/pypi-project.js +300 -0
  224. package/src/registry/pypi-registry-adapter.js +235 -0
  225. package/src/registry/sanitize-registry-body.js +51 -0
  226. package/src/renderers/console.js +160 -0
  227. package/src/renderers/impact-presentation.js +278 -0
  228. package/src/renderers/markdown.js +172 -0
  229. package/src/research-plan.js +455 -0
  230. package/src/runtime-conformance.js +275 -0
  231. package/src/source-provenance.js +393 -0
  232. package/src/source-url.js +62 -0
  233. package/src/structured-output-schema.js +66 -0
  234. package/src/target-selector.js +306 -0
  235. package/src/upgrade-decision/input-loader.js +107 -0
  236. package/src/upgrade-decision/presentation.js +43 -0
  237. package/src/upgrade-decision/runtime.js +21 -0
  238. package/src/upgrade-decision/upgrade-decision.js +626 -0
  239. package/src/upgrade-decision/writer.js +30 -0
  240. package/src/usage/analyzer-registry.js +63 -0
  241. package/src/usage/coverage.js +116 -0
  242. package/src/usage/input-loader.js +139 -0
  243. package/src/usage/js/analyzer.js +240 -0
  244. package/src/usage/js/parser.js +21 -0
  245. package/src/usage/runtime.js +187 -0
  246. package/src/usage/scope.js +44 -0
  247. package/src/usage/source-files.js +50 -0
  248. package/src/usage/usage-index.js +217 -0
  249. package/src/usage/writer.js +31 -0
  250. package/src/version-analysis-loader.js +203 -0
  251. package/src/version-analysis-manifest.js +314 -0
  252. package/src/version-analysis-writer.js +30 -0
@@ -0,0 +1,566 @@
1
+ # RR-01-RERUN — Extractive Contract Real-Provider Qualification and Pipeline Resume
2
+
3
+ ## 1. Executive Summary
4
+
5
+ RR-01-RERUN reached a conclusive `NO-GO`.
6
+
7
+ The extractive v2 contract itself qualified successfully on the configured real runtime:
8
+
9
+ - qualification verdict: `QUALIFIED`;
10
+ - provider/model/adapter: `openai-compatible` / `openai/gpt-5.5` / `openai-compatible`;
11
+ - seven expected live-quality requests and exactly seven observed requests;
12
+ - seven successful completions, one attempt each, zero retries, and zero fallbacks;
13
+ - all critical gates and all policy `3.0.0` thresholds passed;
14
+ - four actionable live cases and three correct abstentions;
15
+ - recorded unsafe containment remained `17/17`, recorded safe acceptance `1/1`, and injected-failure fallback `3/3`.
16
+
17
+ The controlled `commander` 14.0.0 to 15.0.0 pipeline also completed. It produced four breaking findings, four exact publisher-guidance selections, one constrained abstention, zero trust rejection, zero provider failure, and no executable-looking published instruction. Every item requires human review.
18
+
19
+ The isolated VinGrade pipeline did not complete. Project Discovery through Repository Impact Evidence succeeded, including 44 successful Version Analysis provider calls. Migration Checklist then failed before creating a context or calling the provider:
20
+
21
+ ```text
22
+ Migration Checklist input error: Usage identity python:./pypi:langchain-openai maps to 2 Version Analysis occurrences.
23
+ ```
24
+
25
+ VinGrade legitimately contains two `langchain-openai` declarations in the same Python project and manifest: one unpinned and one `>=0.3.0`. Upstream artifacts preserve both occurrences. The Migration Checklist input loader rejects the valid one-to-many occurrence identity because it keys usage identity only by `projectId/packageId`. No `migration-checklist.json` or Markdown report was written. This is a release-blocking product defect, so the final verdict is `NO-GO` even though the exact real runtime is qualified for `migration-planning.v2`.
26
+
27
+ ## 2. Scope and Environment
28
+
29
+ ### UpgradeLens
30
+
31
+ | Field | Observation |
32
+ |---|---|
33
+ | Repository | UpgradeLens |
34
+ | Branch | `feat/mvp-05-evidence-migration-checklist` |
35
+ | Commit | `159905f53ea0897ea6a98a12c4e97197697d8e50` |
36
+ | Worktree | Dirty before validation; all existing changes preserved |
37
+ | Node.js | `v26.0.0` |
38
+ | npm | `11.12.1` |
39
+ | Package engine | Node.js `>=20` |
40
+ | CLI | Experimental Migration Checklist and `auto`, `interactive`, `plain` progress modes present |
41
+
42
+ The repository already contained the GR-03/GR-04 implementation changes. RR-01-RERUN did not modify, reset, stage, or discard them.
43
+
44
+ ### Real runtime
45
+
46
+ | Field | Sanitized value |
47
+ |---|---|
48
+ | Environment file | `.env`, present |
49
+ | Authorization | set; value never printed or retained |
50
+ | Provider | `openai-compatible` |
51
+ | Model | `openai/gpt-5.5` |
52
+ | Adapter | `openai-compatible` |
53
+ | Endpoint host | `openrouter.ai` |
54
+ | Timeout | `180000 ms` |
55
+ | Debug | unset/disabled |
56
+ | Retry policy observed | no retry |
57
+
58
+ The full endpoint, authorization value, request payloads, raw envelopes, and reasoning were not retained.
59
+
60
+ ### VinGrade
61
+
62
+ | Field | Observation |
63
+ |---|---|
64
+ | Source branch | `feat/knowledege-rubric-criteria` |
65
+ | Source commit | `25811ef997fcf45810105e89e4500688f28f7ba5` |
66
+ | Source worktree | Dirty before validation |
67
+ | Validation location | isolated temporary copy |
68
+ | Excluded from copy | `.git`, existing `.upgradelens`, `.env*`, virtualenvs, `node_modules`, build outputs, caches, logs, and data |
69
+ | Clean-copy footprint | 1,534 files, 46 MB before generated artifacts |
70
+
71
+ The VinGrade source checkout was not modified. Its pre-existing deleted `Makefile` and untracked files remained untouched.
72
+
73
+ ## 3. Deterministic Baseline
74
+
75
+ ### Identity and drift checks
76
+
77
+ | Identity | Observed |
78
+ |---|---|
79
+ | Task | `migration-planning.v2` |
80
+ | Prompt | `2` |
81
+ | Candidate | `migration-checklist-extractive-candidate.v2` |
82
+ | Trust | `migration-checklist-trust.extractive.v2` |
83
+ | Generator result | `2` |
84
+ | Presentation | `migration-checklist-extractive-presentation.v1` |
85
+ | v1 dataset digest | `sha256:6f32b8171fb8610d024860957cbe5bffa05b46b9a2fc3d25caf404bc5725ee3c` |
86
+ | v1 file SHA-256 | `339ba3196dcf714b26f15c62295c09d475e5db0bce4b9b2d6fe1aaef454d9860` |
87
+ | v2 dataset digest | `sha256:c15089381612671c62c3b565d93ad4f5dff1705317ee9622d9ee12a68028d407` |
88
+ | v2 file SHA-256 | `1000fa268a7ff4254cdccd161ed5d9cfdf2458adcb6af82dc8c654a96a7d44b6` |
89
+ | v2 role coverage | 7 live, 18 recorded containment, 3 injected failure |
90
+
91
+ The historical v1 identity and the GR-04 v2 identity did not drift.
92
+
93
+ ### Test and package results
94
+
95
+ | Check | Result |
96
+ |---|---|
97
+ | Focused MP-01 through MP-05, GR-02, GR-03, GR-04, qualification, and orchestration tests | 108 passed, 0 failed |
98
+ | Offline production extractive evaluation | `QUALIFIED_WITH_LIMITATIONS` fake result |
99
+ | Offline provider requests | 0 |
100
+ | Offline unsafe containment | 17/17 |
101
+ | Offline recorded safe acceptance | 1/1 |
102
+ | Offline injected failures | 3/3 |
103
+ | Offline published unsupported actions | 0 |
104
+ | Offline published ambiguous actions | 0 |
105
+ | Offline critical gates | all passed |
106
+ | Full `npm run check` | 504 passed, 0 failed, 1 sandbox skip |
107
+ | Baseline `npm pack --dry-run` before this report | 191 files, 447.8 kB |
108
+ | Final `npm pack --dry-run` including this report | 192 files, 456.1 kB |
109
+ | `git diff --check` | passed |
110
+
111
+ The one full-suite skip is the existing local-loopback-listener sandbox condition, not a product test failure.
112
+
113
+ ## 4. V2 Qualification Identity
114
+
115
+ The real qualification was generated at `2026-07-17T03:32:16.710Z`.
116
+
117
+ | Component | Exact identity |
118
+ |---|---|
119
+ | Task | `migration-planning.v2` |
120
+ | Dataset | `migration-planning-golden@2.0.0` |
121
+ | Dataset digest | `sha256:c15089381612671c62c3b565d93ad4f5dff1705317ee9622d9ee12a68028d407` |
122
+ | Evaluation criteria | `migration-action-evaluation@1.0.0` |
123
+ | Criteria digest | `sha256:3e2d7c3e32794d2acb59fb834609806e7700cc6888780ffd3d26d1f106078ccc` |
124
+ | Comparator | `2.0.0` |
125
+ | Normalization | `1.0.0` |
126
+ | Policy | `3.0.0` |
127
+ | Policy digest | `sha256:b463a30d8044aed5aa8565fc08824b9f430145527da35142e452c3dad544c747` |
128
+ | Prompt version | `2` |
129
+ | Prompt digest | `sha256:68c227c7951cd9ad6e60283fc9d54416f7c7e76ebaaa85ce17acfe30252cfdd2` |
130
+ | Candidate schema digest | `sha256:6ac9e1477e206ab082ac38cdb263254c996ee4684e04c80af6b9a08ceae0375d` |
131
+ | Runtime mode | `real` |
132
+ | Declared provider/model | `openai-compatible` / `openai/gpt-5.5` |
133
+ | Observed provider/model | `openai-compatible` / `openai/gpt-5.5` |
134
+ | Adapter | `openai-compatible` |
135
+ | Qualification ID | `sha256:4fa4954d6f254d94859bce17aec6209394d380e4635155a6f3ce23a7e9b70765` |
136
+
137
+ ## 5. Real-Provider Qualification
138
+
139
+ ### Routing and outcomes
140
+
141
+ Only the seven `LIVE_QUALITY` cases called the provider. All 18 recorded containment cases and all three injected-failure cases stayed local. There were no duplicate requests.
142
+
143
+ | Live case | Elapsed | Provider/schema | Candidate outcome | Items | Support/exactness | Published |
144
+ |---|---:|---|---|---:|---|---|
145
+ | `generic/ambiguous-evidence` | 4,086 ms | success | abstain | 0 | pass | abstained |
146
+ | `generic/explicit-action` | 2,030 ms | success | actionable | 1 | supported, exact, specific | generated |
147
+ | `generic/release-announcement` | 2,213 ms | success | abstain | 0 | pass | abstained |
148
+ | `node/multi-action` | 2,249 ms | success | actionable | 2 | both supported, exact, specific | generated |
149
+ | `node/no-action-breaking` | 1,922 ms | success | abstain | 0 | pass | abstained |
150
+ | `python/unknown-registry-action` | 1,555 ms | success | actionable | 1 | supported and exact; low version specificity | generated |
151
+ | `python/unsupported-usage-action` | 1,711 ms | success | actionable | 1 | supported, exact, specific | generated |
152
+
153
+ Each request had `attemptCount: 1`, `retryCount: 0`, and `fallbackCount: 0`. There were four generated live cases, three abstained live cases, zero rejected live cases, and zero failed live cases.
154
+
155
+ ### Quality metrics
156
+
157
+ | Metric | Result |
158
+ |---|---:|
159
+ | Action support precision | 5/5 |
160
+ | Published unsupported action rate | 0/5 |
161
+ | Published ambiguous action rate | 0/5 |
162
+ | Action specificity | 4/5 |
163
+ | Identifier specificity | 5/5 |
164
+ | Version-scope preservation | 5/5 |
165
+ | Abstention precision | 3/3 |
166
+ | Abstention recall | 3/3 |
167
+ | False abstention rate | 0/4 |
168
+ | Safe candidate acceptance | 4/4 |
169
+ | Live-provider completion | 7/7 |
170
+ | Exact excerpt pass | 5/5 |
171
+ | Evidence reference precision | 5/5 |
172
+
173
+ All 15 critical gates passed. No unsupported or ambiguous action, invalid reference, non-exact excerpt, invented identifier, prohibited capability, AI-owned location, false safety claim, recommendation leak, or identity drift was published. No threshold failed and the qualification had no limitation.
174
+
175
+ ## 6. Qualification Guard Verification
176
+
177
+ The produced record was accepted only for the exact task/runtime tuple:
178
+
179
+ - exact record and exact provider/model/adapter: `QUALIFIED`;
180
+ - fake v2 qualification against the real runtime: `EXPERIMENTAL` with `FAKE_QUALIFICATION_NOT_REAL_PROVIDER`;
181
+ - model mismatch: `EXPERIMENTAL` with `MIGRATION_QUALIFICATION_IDENTITY_MISMATCH`;
182
+ - prompt digest mutation: identity mismatch;
183
+ - candidate schema digest mutation: identity mismatch;
184
+ - trust identity mutation: identity mismatch;
185
+ - presentation identity mutation: identity mismatch;
186
+ - corrupted qualification ID: fatal `MIGRATION_QUALIFICATION_IDENTITY_CORRUPT`;
187
+ - historical free-form/v1 record: identity mismatch;
188
+ - matching `NOT_QUALIFIED`: fatal `MIGRATION_RUNTIME_NOT_QUALIFIED`;
189
+ - missing record without explicit experimental policy: blocked.
190
+
191
+ The CLI still has no persistent qualification store. Qualified pipeline assertions therefore used the supported application API to inject the exact in-memory record. This is distinct from the CLI missing-record experimental warning path.
192
+
193
+ ## 7. Controlled Positive Pipeline
194
+
195
+ ### Target selection
196
+
197
+ An initial temporary `react-router-dom` 6.30.1 target completed operationally but Version Analysis truthfully produced no breaking finding from the selected near-target evidence. It was not treated as a positive result. That setup run made one Version Analysis request and no Migration Checklist request.
198
+
199
+ The final controlled target used:
200
+
201
+ - `commander` 14.0.0 to registry latest 15.0.0;
202
+ - publisher release evidence from the official Commander repository;
203
+ - four explicit breaking findings and a `Migration Tips` section;
204
+ - one JavaScript named import of `Command`.
205
+
206
+ ### Full flow
207
+
208
+ ```text
209
+ Discover
210
+ → Knowledge Research
211
+ → Version Analysis
212
+ → Usage Discovery
213
+ → Repository Impact
214
+ → Impact Evidence
215
+ → Extractive Migration Checklist
216
+ → Markdown Report
217
+ ```
218
+
219
+ All stages completed with exit code 0 in 48.315 seconds.
220
+
221
+ | Count | Result |
222
+ |---|---:|
223
+ | Dependencies / analyzed / skipped / failed | 1 / 1 / 0 / 0 |
224
+ | Breaking findings | 4 |
225
+ | Impact Evidence records | 4 |
226
+ | Eligible contexts | 4 |
227
+ | Version Analysis requests | 1 |
228
+ | Migration v2 requests | 4 |
229
+ | Generated contexts | 3 |
230
+ | Abstained contexts | 1 |
231
+ | Rejected / failed contexts | 0 / 0 |
232
+ | Selected exact spans | 4 |
233
+ | Candidate locations | 0 |
234
+ | Items requiring human review | 5 |
235
+
236
+ All five provider calls used one attempt, zero retries, and zero fallbacks. The Migration Checklist artifact passed schema `1.0.0`, exact seven-artifact lineage, cross-reference validation, and immutable input loading.
237
+
238
+ The artifact preserves these limitations:
239
+
240
+ - experimental Migration Checklist;
241
+ - exact evidence spans do not prove repository applicability;
242
+ - no positive exact usage match is not evidence of unused/safe;
243
+ - registry latest is not a recommendation;
244
+ - upstream high-risk result requires human review;
245
+ - one `NO_EXPLICIT_ACTION` model abstention became a deterministic manual-review fallback.
246
+
247
+ The console and Markdown output did not claim that Commander was safe to upgrade.
248
+
249
+ ## 8. VinGrade Full Pipeline
250
+
251
+ ### Stage observations
252
+
253
+ | Stage | Result | Duration | Output/observation |
254
+ |---|---|---:|---|
255
+ | Project Discovery | completed | 40 ms | 47 dependency occurrences, duplicate declaration warning |
256
+ | Knowledge Research | completed | 47,983 ms | 46 packages, 45 resolved, 1 unavailable |
257
+ | Version Analysis | completed | 590,530 ms | 47 results: 44 analyzed, 3 skipped, 0 failed |
258
+ | Usage Discovery | completed | 379 ms | 17 dependencies, 152 symbols, 79 files |
259
+ | Repository Impact | completed | 46 ms | 47 dependency occurrences, 10 breaking findings, 0 exact matches |
260
+ | Impact Evidence | completed | 35 ms | 10 findings, 0 affected files |
261
+ | Migration Checklist | failed | 194 ms | `AMBIGUOUS_REFERENCE` before context generation |
262
+ | Markdown Report | not run | — | correctly stopped after prior-stage failure |
263
+
264
+ Total duration was 639,212 ms. Version Analysis made 44 provider requests; all 44 succeeded with exact provider/model identity, one attempt each, zero retries, and zero fallbacks. Migration Checklist made zero provider requests because preparation failed first.
265
+
266
+ Plain progress was stable and line-oriented, used the correct stage order, contained no cursor control, and stopped after the failed stage. The default failure output contained no stack trace and pointed to a portable log path. The failure event exposed `reason=AMBIGUOUS_REFERENCE`, although its qualification state was `UNKNOWN` because failure occurred before guard completion.
267
+
268
+ ### Failure evidence
269
+
270
+ Project Discovery reported:
271
+
272
+ ```text
273
+ DUPLICATE_DEPENDENCY_DECLARATION requirements.txt: langchain-openai is declared multiple times.
274
+ ```
275
+
276
+ The source declarations are:
277
+
278
+ ```text
279
+ langchain-openai>=0.3.0
280
+ langchain-openai
281
+ ```
282
+
283
+ Version Analysis correctly retained two results for the same `python:.` / `pypi:langchain-openai` identity:
284
+
285
+ - an unpinned, skipped `unsupportedBaseline` occurrence;
286
+ - an analyzed `declaredConstraint` occurrence for `>=0.3.0`.
287
+
288
+ The Migration Checklist input loader counts occurrences by only `projectId/packageId`, sees two results, and throws:
289
+
290
+ ```text
291
+ Usage identity python:./pypi:langchain-openai maps to 2 Version Analysis occurrences.
292
+ ```
293
+
294
+ No existing source or generated artifact was corrupted. `migration-checklist.json` and `repository-impact.md` remained absent, demonstrating correct fail-fast and no-partial-publication behavior.
295
+
296
+ ## 9. IA-05 Baseline Comparison
297
+
298
+ | Metric | IA-05 baseline | RR-01-RERUN | Delta | Explanation |
299
+ |---|---:|---:|---:|---|
300
+ | Dependencies | 47 | 47 | 0 | Same occurrence count |
301
+ | Analyzed | 44 | 44 | 0 | Same |
302
+ | Skipped | 3 | 3 | 0 | Same |
303
+ | Failed | 0 | 0 | 0 | Same |
304
+ | Human review | 46 | 47 | +1 | Current registry/evidence/model result; all current results require review |
305
+ | Breaking findings | 6 | 10 | +4 | Registry and publisher evidence changed since IA-05 |
306
+ | Impact evidence | 6 | 10 | +4 | Mirrors current breaking findings |
307
+ | Affected files | 0 | 0 | 0 | No exact symbol match |
308
+ | Eligible migration contexts | N/A | not produced | — | Input loader failed before context construction |
309
+ | Selected guidance spans | N/A | 0 | — | No Migration Checklist provider call |
310
+ | Abstentions | N/A | 0 | — | No context generated |
311
+ | Trust rejections | N/A | 0 | — | No context generated |
312
+ | Manual-review fallbacks | N/A | 0 | — | No context generated |
313
+ | Candidate locations | N/A | 0 | — | No context generated |
314
+
315
+ The current ten breaking findings span `pdfjs-dist`, `react`, `eslint-plugin-react-refresh`, `langsmith`, `pytest-asyncio`, `python-dotenv`, and `python-jose`. The count change is not by itself classified as a regression because online registry/release evidence is time-dependent. The duplicate-occurrence failure is independent of that drift.
316
+
317
+ ## 10. Migration Checklist Review
318
+
319
+ ### Controlled published spans
320
+
321
+ Every selected span was an exact substring of its cited publisher evidence, retained the deterministic prefix, had a known evidence reference, owned no location, and required human review.
322
+
323
+ | Finding | Selected guidance | Manual classification |
324
+ |---|---|---|
325
+ | ESM-only change | “Commander 15 is ESM only, but this does not mean you need to migrate to ESM to use it.” | supported and useful |
326
+ | ESM-only change | “If you have problems using Commander 15 in your environment, one option is stay on Commander 14 for now.” | supported and useful |
327
+ | Node runtime requirement | same “stay on Commander 14” span | supported but low specificity |
328
+ | Removed deprecated ESM export | same “stay on Commander 14” span | supported but low specificity |
329
+ | Negative option default | no span selected | correct abstention; manual review fallback |
330
+
331
+ No selected span was ambiguous or unsupported. The repeated fallback guidance is publisher-supported but does not directly describe the specific runtime or removed-export remediation. The existing `EXTRACTIVE_SEMANTIC_APPLICABILITY_NOT_VERIFIED` limitation and mandatory human review keep this truth visible.
332
+
333
+ ### VinGrade
334
+
335
+ No VinGrade checklist exists to review. In particular:
336
+
337
+ - Python coverage was not converted into unused/safe;
338
+ - zero affected files was not converted into safe-to-upgrade;
339
+ - registry latest remained a fact, not a recommendation;
340
+ - no package-local record was silently dropped after a provider failure;
341
+ - no command-like guidance or source location was published.
342
+
343
+ The absence is caused by the release-blocking input identity defect, not by qualification or model behavior.
344
+
345
+ ## 11. Progress and Operational Visibility
346
+
347
+ Plain-mode observations:
348
+
349
+ - stable, portable, line-oriented output;
350
+ - correct scheduler order;
351
+ - processed/total counts for controlled Migration Checklist contexts;
352
+ - no invented percentage;
353
+ - no ANSI cursor control;
354
+ - bounded reason codes only;
355
+ - no prompt, evidence body, source code, raw provider error, secret, or absolute source path;
356
+ - stage failure stopped all later stages;
357
+ - failure log was sanitized and portable.
358
+
359
+ Interactive progress behavior was covered by the passing deterministic TTY-aware tests. A second live-provider controlled run was intentionally not made solely for UX inspection. Full interactive UX remains RR-02 scope.
360
+
361
+ Two visibility limitations remain:
362
+
363
+ 1. a preparation failure reports qualification state `UNKNOWN`, even when an exact qualification was injected;
364
+ 2. the final controlled `migration-checklist.json` retains the qualification-derived limitations but does not serialize the qualification ID/runtime tuple, so portable audit linkage depends on the external validation record.
365
+
366
+ ## 12. Failure and Re-run Behavior
367
+
368
+ Passing focused tests reconfirmed:
369
+
370
+ - provider failure is package-local;
371
+ - non-exact excerpts, invalid schema, trust rejection, and model abstention fail closed;
372
+ - command-like official spans fail closed;
373
+ - zero eligible contexts do not initialize the AI runtime;
374
+ - one context failure preserves other contexts;
375
+ - missing qualification requires explicit experimental policy;
376
+ - fake, v1, and identity-mismatched records cannot replace v2 real qualification;
377
+ - matching `NOT_QUALIFIED` blocks;
378
+ - corrupt qualification identity is fatal;
379
+ - atomic writer failure preserves the existing target and cleans its temporary attempt;
380
+ - same context and recorded candidate produce stable normalized output, IDs, and ordering.
381
+
382
+ The real qualification was not repeated to claim model determinism. Only deterministic post-processing and recorded-candidate replay were tested for determinism.
383
+
384
+ The VinGrade run was not retried or altered after `AMBIGUOUS_REFERENCE`. This preserves the conclusive defect evidence and avoids duplicate provider calls.
385
+
386
+ ## 13. Security and Privacy Review
387
+
388
+ A state-only scan covered 128 temporary validation and generated product files. Results:
389
+
390
+ | Check | Matches |
391
+ |---|---:|
392
+ | Exact configured authorization value | 0 |
393
+ | Full configured endpoint | 0 |
394
+ | Authorization header field | 0 |
395
+ | Bearer-token pattern | 0 |
396
+ | Raw envelope keys | 0 |
397
+ | Prompt/reasoning payload keys | 0 |
398
+ | Private user path in portable `.upgradelens` artifacts | 0 |
399
+
400
+ The sanitized validation data stores only allowlisted identity, counts, reason codes, elapsed time, attempts, retries, and bounded failure details. It does not store raw provider envelopes, chain-of-thought, `.env` values, or unrelated VinGrade content.
401
+
402
+ No security or privacy blocker was found.
403
+
404
+ ## 14. Documentation Consistency
405
+
406
+ Two contributor-facing inconsistencies were found and intentionally not edited:
407
+
408
+ 1. `docs/mvp-05-migration-checklist-orchestration.md` still lists leading-dash flags and unsupported plain-language instructions as current gaps. GR-04 extractive v2 contains those fixtures; the remaining current limitation is that exact provenance does not prove repository applicability.
409
+ 2. `docs/mvp-05-migration-evaluation-and-qualification.md` opens and presents “current qualification” primarily in historical free-form v1 terms, including “real-provider qualification has not been run.” A later v2 addendum is correct, but the mixed chronology is easy to misread now that this exact v2 runtime has been qualified.
410
+
411
+ The terms evaluation criteria, action support, specificity, containment, comparator, and selected evidence span are otherwise defined consistently in GR-02 through GR-04.
412
+
413
+ ## 15. Defects and Limitations
414
+
415
+ ### RR01R-001 — Duplicate dependency occurrences abort Migration Checklist
416
+
417
+ | Field | Value |
418
+ |---|---|
419
+ | Classification | `PRODUCT_DEFECT` |
420
+ | Severity | `BLOCKER` |
421
+ | Phase | VinGrade Migration Checklist |
422
+ | Evidence | Two valid Version Analysis occurrences for `python:./pypi:langchain-openai`; input loader keys only by `projectId/packageId` and throws `AMBIGUOUS_REFERENCE` |
423
+ | Impact | Full pipeline cannot create Migration Checklist or Markdown for a repository with duplicate package declarations in one project |
424
+ | Reproduction | Analyze an isolated VinGrade copy with the exact real qualification and experimental checklist enabled |
425
+ | Suggested remediation | Define an occurrence-stable identity that includes manifest/declaration identity, or deterministically reconcile duplicate declarations before cross-artifact matching; add an end-to-end duplicate-declaration regression |
426
+ | Release blocking | yes |
427
+
428
+ ### RR01R-002 — Exact-span applicability remains intentionally unverified
429
+
430
+ | Field | Value |
431
+ |---|---|
432
+ | Classification | `EVALUATION_LIMITATION` |
433
+ | Severity | `MEDIUM` |
434
+ | Phase | Controlled checklist review |
435
+ | Evidence | “Stay on Commander 14” was valid exact publisher guidance but low-specificity for two distinct findings |
436
+ | Impact | Human review must decide finding-specific applicability |
437
+ | Suggested remediation | Keep experimental/human-review policy; consider a future deterministic applicability gate without weakening exact-span containment |
438
+ | Release blocking | no while experimental |
439
+
440
+ ### RR01R-003 — Qualification linkage is not portable in the checklist artifact
441
+
442
+ | Field | Value |
443
+ |---|---|
444
+ | Classification | `PRODUCT_DEFECT` |
445
+ | Severity | `MEDIUM` |
446
+ | Phase | Controlled artifact audit |
447
+ | Evidence | Console exposes qualification availability and artifact exposes limitations, but `migration-checklist.json` does not serialize qualification ID/runtime identity |
448
+ | Impact | A consumer cannot independently bind a checklist file to the exact qualification record |
449
+ | Suggested remediation | Decide and version a non-secret qualification lineage field in a future artifact contract |
450
+ | Release blocking | no for the current experimental scope |
451
+
452
+ ### RR01R-004 — Failure progress loses known qualification state
453
+
454
+ | Field | Value |
455
+ |---|---|
456
+ | Classification | `CLI_UX_OBSERVATION` |
457
+ | Severity | `LOW` |
458
+ | Phase | VinGrade failure visibility |
459
+ | Evidence | Migration failure event reported `qualificationState: UNKNOWN` although an exact qualification was injected |
460
+ | Impact | Failure diagnostics are less precise |
461
+ | Suggested remediation | Carry prevalidated/injected qualification state into preparation-failure events in RR-02 |
462
+ | Release blocking | no |
463
+
464
+ ### RR01R-005 — Current docs mix historical v1 and production v2 limitations
465
+
466
+ | Field | Value |
467
+ |---|---|
468
+ | Classification | `DOCUMENTATION_INCONSISTENCY` |
469
+ | Severity | `LOW` |
470
+ | Phase | Documentation audit |
471
+ | Evidence | Stale leading-dash/plain-language “current gaps” and “real-provider not run” wording |
472
+ | Impact | Contributors may misunderstand the active contract and qualification status |
473
+ | Suggested remediation | Separate a clearly labeled historical v1 section from current extractive v2 status |
474
+ | Release blocking | no, but clean up before release |
475
+
476
+ ### RR01R-006 — First controlled target lacked boundary evidence
477
+
478
+ | Field | Value |
479
+ |---|---|
480
+ | Classification | `DATA_LIMITATION` |
481
+ | Severity | `LOW` |
482
+ | Phase | Controlled-target setup |
483
+ | Evidence | React Router major upgrade selected only near-target release evidence and produced no breaking finding |
484
+ | Impact | A nominal major target may not be a usable positive validation target |
485
+ | Suggested remediation | Pre-qualify controlled fixtures against exact boundary evidence; separately review bounded interval evidence selection |
486
+ | Release blocking | no |
487
+
488
+ ## 16. Release Risks
489
+
490
+ 1. Repositories with duplicate declarations for one package in one project can pass IA-01 through IA-03 and then fail the experimental checklist before any package-local isolation is possible.
491
+ 2. Exact selected text proves provenance and structural safety, not finding-specific applicability; mandatory review must remain visible.
492
+ 3. Qualification provenance is not self-contained in the checklist artifact.
493
+ 4. Online registry and publisher data are time-dependent; IA-05 finding counts changed from 6 to 10 without a source-code change.
494
+ 5. Python still lacks a Usage Analyzer, so zero affected files cannot be interpreted as safe or unused.
495
+
496
+ ## 17. Final Verdict
497
+
498
+ ### `NO-GO`
499
+
500
+ Rationale:
501
+
502
+ - the exact provider/model/adapter is genuinely `QUALIFIED` for extractive v2;
503
+ - every real qualification critical gate passed;
504
+ - the controlled positive pipeline passed without unsupported or ambiguous publication;
505
+ - security and privacy checks passed;
506
+ - the VinGrade full pipeline failed at Migration Checklist on a valid duplicate-declaration repository shape;
507
+ - no checklist or Markdown report was produced for VinGrade.
508
+
509
+ Release decisions:
510
+
511
+ | Question | Decision |
512
+ |---|---|
513
+ | May RR-02 start as the next release-readiness gate? | `BLOCKED` until RR01R-001 is fixed and VinGrade is rerun |
514
+ | Is v0.5.0 technically ready? | `NOT READY` |
515
+ | Enable Migration Checklist by default? | `NO` |
516
+ | Keep Migration Checklist experimental? | `YES` |
517
+ | Is the current provider/model/adapter qualified for v2? | `YES` |
518
+ | Is there a blocker before release? | `YES`: duplicate-occurrence identity handling |
519
+
520
+ The qualification result does not override the pipeline blocker and does not authorize default enablement.
521
+
522
+ ## 18. Commands Executed
523
+
524
+ Representative exact commands, with sensitive locations and values omitted:
525
+
526
+ ```bash
527
+ node --version
528
+ npm --version
529
+ node bin/upgradelens.js analyze --help
530
+
531
+ node --test \
532
+ test/migration-checklist-context-runtime.test.js \
533
+ test/migration-checklist-contract.test.js \
534
+ test/migration-checklist-evaluation-v2.test.js \
535
+ test/migration-checklist-evaluation.test.js \
536
+ test/migration-checklist-extractive-experiment.test.js \
537
+ test/migration-checklist-extractive-production.test.js \
538
+ test/migration-checklist-generator.test.js \
539
+ test/migration-checklist-orchestration.test.js \
540
+ test/analysis-orchestration.test.js
541
+
542
+ env npm_config_cache="$TMPDIR/upgradelens-npm-cache" npm run check
543
+ npm pack --dry-run --cache "$TMPDIR/upgradelens-npm-cache"
544
+ git diff --check
545
+
546
+ node --env-file=.env "$TMPDIR/upgradelens-rr01-rerun-real-evaluation.mjs"
547
+ node --env-file=.env "$TMPDIR/upgradelens-rr01-controlled-runner.mjs"
548
+ node --env-file=.env "$TMPDIR/upgradelens-rr01-vingrade-runner.mjs"
549
+ ```
550
+
551
+ The controlled and VinGrade runners called the public application/runtime APIs, injected the exact qualification record, disabled provider debug output, retained only sanitized request metadata, and used the ordinary pipeline scheduler and stage runtimes.
552
+
553
+ ## 19. Scope Confirmation
554
+
555
+ - No production code was changed.
556
+ - No test, dataset, fixture, prompt, schema, trust rule, comparator, policy, or threshold was changed.
557
+ - No dependency was upgraded.
558
+ - No VinGrade source was modified.
559
+ - No source patch, migration command, rollback instruction, or release artifact was created.
560
+ - No fake or v1 qualification was used as real v2 evidence.
561
+ - No retry was used to seek a favorable provider output.
562
+ - No real qualification rerun was performed.
563
+ - No secret, full endpoint, raw provider envelope, prompt, or reasoning was logged.
564
+ - No push, tag, commit, or release was performed.
565
+ - The historical RR-01 report was not overwritten.
566
+ - The only repository file added by RR-01-RERUN is this validation report.
@@ -0,0 +1,35 @@
1
+ # RR-02 — Full Product Workflow and Developer CLI UX Review
2
+
3
+ ## Historical decision
4
+
5
+ Verdict: **`NO_GO_UX_OR_WORKFLOW`**.
6
+
7
+ This release-review record preserves the decision that initiated the RR02
8
+ remediation sequence. It is intentionally not rewritten as a passing result.
9
+
10
+ The full product workflow exposed two release-blocking UX and consistency
11
+ gaps:
12
+
13
+ 1. Migration Planning qualification could be supplied only as transient
14
+ application state, so a public CLI rerun could not reliably reproduce the
15
+ qualification decision or keep guard, progress, console, Markdown, and
16
+ failure output bound to one source of truth.
17
+ 2. Long-running stages did not expose a stage-aware, honest heartbeat. A user
18
+ could not distinguish active work from a stalled command without relying
19
+ on internal implementation detail.
20
+
21
+ The review required two focused remediations before the packaged workflow
22
+ could be qualified:
23
+
24
+ - RR02-FIX-01 — persistent qualification resolution and consistent CLI status;
25
+ - RR02-FIX-02 — stage-aware CLI progress and long-running heartbeat.
26
+
27
+ Migration Checklist remained experimental, opt-in, and mandatory-human-review.
28
+ The review did not authorize default enablement, release, or publication.
29
+
30
+ ## Evidence status
31
+
32
+ The original binary capture tree was not present in the committed repository
33
+ at the start of RR02-FIX-03A. It is not reconstructed from memory. The
34
+ historical verdict and blocker taxonomy are corroborated by the committed
35
+ FIX-01/FIX-02 implementation sequence and the stopped RR02-RERUN report.
@@ -0,0 +1,32 @@
1
+ # RR02-FIX-01 — Persistent Qualification Resolution and Consistent CLI Status
2
+
3
+ ## Historical decision
4
+
5
+ Verdict: **`READY_FOR_RR02_FIX_02`**.
6
+
7
+ Commit `bb17b8a` introduced the persisted Migration Planning qualification
8
+ record, strict schema and integrity validation, deterministic source
9
+ resolution, fail-closed status handling, and one immutable decision shared by
10
+ execution and presentation.
11
+
12
+ The implemented precedence is injected qualification, explicit portable path,
13
+ default project-local path, then missing. Only a missing default record may
14
+ use the explicit experimental exception. Corrupted, fake,
15
+ identity-mismatched, insufficient, and matching `NOT_QUALIFIED` records block
16
+ before provider use.
17
+
18
+ Focused tests in `test/migration-qualification-resolution.test.js` cover the
19
+ store, resolution, failure modes, CLI surface, presentation consistency, and
20
+ provider-call boundary. The current user-facing contract is documented in
21
+ `migration-planning-qualification-resolution.md`.
22
+
23
+ This decision advanced the review to the progress remediation; it did not
24
+ declare the complete product workflow release-ready and did not enable
25
+ Migration Checklist by default.
26
+
27
+ ## Evidence status
28
+
29
+ The original capture helper remains repository-visible as
30
+ `scripts/rr02-fix-01-captures.mjs`, but the historical capture output was not
31
+ present in committed history at RR02-FIX-03A baseline. No replacement
32
+ screenshots or provider results are fabricated in this recovery report.
@@ -0,0 +1,28 @@
1
+ # RR02-FIX-02 — Stage-aware CLI Progress and Long-running Heartbeat
2
+
3
+ ## Historical decision
4
+
5
+ Verdict: **`READY_FOR_RR02_RERUN`**.
6
+
7
+ Commit `3eb51d9` introduced versioned progress events, deterministic stage
8
+ lifecycle scheduling, TTY-aware append-only renderers, bounded safe activity,
9
+ real elapsed time, quiet-stage heartbeats, cancellation propagation, and
10
+ observer/output isolation.
11
+
12
+ The progress contract does not invent percentages, ETA, retry state, token
13
+ streaming, or provider “thinking”. The first interrupt cancels the active
14
+ stage, later stages are skipped, timers are cleaned, and the CLI returns 130.
15
+ Stop-on-first-failure remains deterministic. The current contract and
16
+ limitations are documented in `cli-progress.md`.
17
+
18
+ Focused coverage lives in `test/progress-orchestration.test.js` together with
19
+ qualification and orchestration regression tests. This remediation authorized
20
+ a packaged RR02 rerun; it did not itself qualify npm package composition or
21
+ enable Migration Checklist by default.
22
+
23
+ ## Evidence status
24
+
25
+ The original capture output was not present in committed history at the
26
+ RR02-FIX-03A baseline and is not recreated. The implementation, public
27
+ contract, focused tests, and subsequent stopped rerun are the authoritative
28
+ repository evidence retained here.