@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,207 @@
1
+ # RR02-FIX-05 — Materialize Persisted Real-provider Qualification
2
+
3
+ ## 1. Executive Verdict
4
+
5
+ **`QUALIFICATION_MATERIALIZED_AND_RELEASE_GATES_PASS`**
6
+
7
+ v0.5.0 readiness: **`GO_V0_5_0_WITH_NON_BLOCKING_UX_FOLLOWUPS`**.
8
+ Migration Checklist default enablement: **`KEEP_EXPERIMENTAL`**.
9
+
10
+ ## 2. Why Materialization Was Required
11
+
12
+ RR02-RERUN proved the packaged FIX-04 heartbeat, cancellation, package and UX
13
+ gates, but stopped at `BLOCKED_BY_QUALIFICATION_INPUT`. Markdown evidence was
14
+ correctly rejected as runtime input. FIX-05 located the original structured
15
+ RR-01-RERUN evaluation and projected its unchanged qualification through the
16
+ supported atomic writer.
17
+
18
+ ## 3. Source Search and Provenance
19
+
20
+ Search was limited to repository artifacts, report-referenced RR-01 outputs
21
+ and scoped temporary RR-01 acceptance locations that were not retained.
22
+
23
+ | Candidate source | Machine-readable | Runtime mode | Identity match | Verdict | Selected |
24
+ | --- | --- | --- | --- | --- | --- |
25
+ | `rr01-real-migration-evaluation.json` | Full v1 report | real | No, v1 task | `NOT_QUALIFIED` | No |
26
+ | `upgradelens-rr01-rerun-real-evaluation.json` | Full v2 report | real | Exact | `QUALIFIED` | Yes |
27
+ | RR-01 controlled/VinGrade result JSON files | ID/transcript only | real | Not independently validatable | N/A | No |
28
+ | RR-01 Markdown reports | Prose only | N/A | Rejected | N/A | No |
29
+
30
+ Selected source provenance:
31
+
32
+ - artifact ID: `upgradelens-rr01-rerun-real-evaluation.json`;
33
+ - source bytes: 118,466;
34
+ - source SHA-256:
35
+ `09fa990a934135ca94efc5ff4387c286fd52ad2d9199285f135ddb24810aa376`;
36
+ - qualification-object canonical SHA-256:
37
+ `05613e763f7a972942761ad68a10ed976ce9e7cd5a9a296fc8a2abc94fc57b68`;
38
+ - generatedAt: `2026-07-17T03:32:16.710Z`;
39
+ - original provider requests: 7;
40
+ - source mutated before writer projection: **NO**.
41
+
42
+ Only the selected file contained the complete strict qualification object.
43
+ Other files containing the same ID were pipeline observations, not competing
44
+ qualification sources.
45
+
46
+ ## 4. Current Identity
47
+
48
+ - task: `migration-planning.v2`;
49
+ - dataset: `migration-planning-golden@2.0.0`;
50
+ - dataset digest: `sha256:c15089381612671c62c3b565d93ad4f5dff1705317ee9622d9ee12a68028d407`;
51
+ - criteria: `migration-action-evaluation@1.0.0`;
52
+ - criteria digest: `sha256:3e2d7c3e32794d2acb59fb834609806e7700cc6888780ffd3d26d1f106078ccc`;
53
+ - comparator/normalization: `2.0.0` / `1.0.0`;
54
+ - policy: `3.0.0`,
55
+ `sha256:b463a30d8044aed5aa8565fc08824b9f430145527da35142e452c3dad544c747`;
56
+ - prompt: `2`,
57
+ `sha256:68c227c7951cd9ad6e60283fc9d54416f7c7e76ebaaa85ce17acfe30252cfdd2`;
58
+ - candidate schema:
59
+ `sha256:6ac9e1477e206ab082ac38cdb263254c996ee4684e04c80af6b9a08ceae0375d`;
60
+ - trust: `migration-checklist-trust.extractive.v2`;
61
+ - presentation: `migration-checklist-extractive-presentation.v1`;
62
+ - runtime: real / `openai-compatible` / `openai/gpt-5.5` /
63
+ `openai-compatible`;
64
+ - qualification identity:
65
+ `sha256:4fa4954d6f254d94859bce17aec6209394d380e4635155a6f3ce23a7e9b70765`.
66
+
67
+ ## 5. Original Qualification Validation
68
+
69
+ Current authoritative code recomputed the qualification from the full
70
+ structured dataset, metrics and runtime report. The recomputed qualification
71
+ was canonically identical to the source object:
72
+
73
+ - strict v2 schema: pass;
74
+ - real runtime and observed identity: pass;
75
+ - 19/19 thresholds: pass;
76
+ - 15/15 critical gates: pass;
77
+ - coverage/verdict invariants: pass;
78
+ - failed thresholds/gates: 0/0;
79
+ - source limitations: 0;
80
+ - secret/raw-payload prohibited keys: 0;
81
+ - verdict: `QUALIFIED`.
82
+
83
+ No provider was called and no field, digest, policy or verdict was edited.
84
+
85
+ ## 6. Persisted Record Materialization
86
+
87
+ The public `writeMigrationPlanningQualificationRecord` API wrote:
88
+
89
+ `.upgradelens/migration-planning-qualification.json`
90
+
91
+ - permissions: `0600`;
92
+ - bytes: 9,622;
93
+ - record digest:
94
+ `sha256:e55b2d6f2f82091f5ce321e3e6b3a36cab8a34ea7608464ccd08b8ef49813847`;
95
+ - file SHA-256:
96
+ `7891afabc6979ab3f362cbdd7c312daacf84595e12a49150c709eda8e477aa69`;
97
+ - qualification ID preserved exactly;
98
+ - writer serialization/read-back exact;
99
+ - destination is ignored by `.gitignore`.
100
+
101
+ ## 7. Record Integrity and Resolution
102
+
103
+ Production loader, resolver and guard confirmed:
104
+
105
+ - strict envelope and record digest;
106
+ - embedded qualification identity digest;
107
+ - default path relative to target root;
108
+ - `status: QUALIFIED`;
109
+ - `executionAllowed: true`;
110
+ - `experimentalOverrideUsed: false`;
111
+ - immutable decision;
112
+ - default and explicit source remain single-source decisions.
113
+
114
+ Focused coverage proves once-per-run resolution, writer determinism,
115
+ idempotence, invalid-source non-overwrite, manual-mutation corruption,
116
+ default analyze isolation and presentation consistency.
117
+
118
+ ## 8. Qualification-dependent Scenario Matrix
119
+
120
+ | Scenario | Source | Status | Execution | Provider calls | Exit | Surface consistency | Capture |
121
+ | --- | --- | --- | --- | ---: | ---: | --- | --- |
122
+ | RERUN-006 | default path | `QUALIFIED` | Allowed, 0/0 contexts | 0 | 0 | Guard/progress/console/Markdown pass | `003-*` |
123
+ | RERUN-007 | `config/qualification.json` | `QUALIFIED` | Allowed, no fallback | 0 | 0 | Pass | `004-*` |
124
+ | RERUN-008 | absent | `MISSING` | Experimental only | 0 | 0 | No qualified claim | `005-*` |
125
+ | RERUN-009 | explicit valid mismatch | `IDENTITY_MISMATCH` | Blocked | 0 | 1 | Constrained | `006-*` |
126
+ | RERUN-010 | tampered digest | `CORRUPTED` | Blocked | 0 | 1 | Constrained | `007-*` |
127
+ | RERUN-011 | matching strict fixture | `NOT_QUALIFIED` | Blocked | 0 | 1 | Override did not bypass | `008-*` |
128
+
129
+ Negative fixtures were generated with authoritative qualification/writer APIs;
130
+ only the corruption scenario intentionally mutated its isolated temporary
131
+ record.
132
+
133
+ ## 9. Provider Request Counts
134
+
135
+ New provider requests: **0**. Qualified runs had zero eligible contexts and
136
+ preserved lazy provider initialization. All negative scenarios blocked before
137
+ context/provider construction. No requalification occurred.
138
+
139
+ ## 10. CLI Capture Evidence
140
+
141
+ `docs/rr02-fix-05-cli-captures/manifest.json` contains eight invocations and
142
+ 11 screenshots. Every invocation has command, environment, raw/clean
143
+ transcript, metadata, exit code and final screen. RERUN-006 additionally has
144
+ start/progress/final evidence.
145
+
146
+ ## 11. Regression and Package Results
147
+
148
+ - focused qualification/progress/cooperative/orchestration: 68/68 pass;
149
+ - MP-01–MP-05 and Extractive regressions: 74/74 pass;
150
+ - canonical parallel attempt 1: 544 pass, 1 lifecycle `SIGKILL` flake,
151
+ 1 sandbox-only skip;
152
+ - isolated lifecycle reproduction: 1/1 pass;
153
+ - canonical parallel attempt 2: 545 pass, 0 fail, 1 sandbox-only skip;
154
+ - serial suite: 545 pass, 0 fail, 1 sandbox-only skip;
155
+ - package guard before report: 207 files, 0 captures, 15/15 required assets;
156
+ - final dry-run/package guard after report: 208 files, 0 captures, 15/15
157
+ required assets;
158
+ - fresh tarball: `upgradelens@0.4.0`, SHA-256
159
+ `c3a5648a15ddcddb752b930b2d581163964cd2c26af51c418fb9ca7906411919`;
160
+ - offline clean install: 12 packages; public version/help/import pass.
161
+
162
+ The first canonical failure is retained and is not replaced silently by the
163
+ retry or serial pass. No timeout or test infrastructure changed.
164
+
165
+ ## 12. Privacy and Repository Policy
166
+
167
+ The persisted record contains no key, token, authorization header, raw
168
+ provider request/response, raw candidate/error payload, endpoint or private
169
+ reasoning. It is generated output, ignored by Git, not committed and excluded
170
+ from npm. The package retains only the public record schema/docs. Capture
171
+ trees and helpers are absent from the tarball.
172
+
173
+ ## 13. Files Changed
174
+
175
+ - generated, Git-ignored:
176
+ `.upgradelens/migration-planning-qualification.json`;
177
+ - added: this report;
178
+ - added: `docs/rr02-fix-05-cli-captures/**`;
179
+ - canonical RR02-RERUN report receives a qualification-completion attempt
180
+ note.
181
+
182
+ Pre-existing RR02-RERUN evidence changes were preserved.
183
+
184
+ ## 14. Remaining Limitations
185
+
186
+ - Migration Checklist remains experimental and requires human review.
187
+ - The known narrow-terminal detail truncation is a non-blocking UX follow-up.
188
+ - Parallel lifecycle timing remains load-sensitive; isolated, canonical retry
189
+ and serial runs passed.
190
+ - The sandbox-only local-loopback case is not counted as a pass.
191
+
192
+ ## 15. Release Decision
193
+
194
+ v0.5.0: **`GO_V0_5_0_WITH_NON_BLOCKING_UX_FOLLOWUPS`**.
195
+
196
+ Migration Checklist: **`KEEP_EXPERIMENTAL`**.
197
+
198
+ The only next task is **v0.5.0 Release Execution Checklist**. This task did
199
+ not release, tag, publish or bump the package.
200
+
201
+ ## 16. Scope Confirmation
202
+
203
+ No production/test/fixture/package source, evaluation identity, dataset,
204
+ criteria, comparator, normalization, policy, prompt, schema, trust,
205
+ generator, progress, scheduler, timeout or version changed. The source was
206
+ not reconstructed from Markdown and no provider requalification ran. Nothing
207
+ was staged, committed, pushed, tagged or published.
@@ -0,0 +1,342 @@
1
+ # RR02-RERUN — After FIX-04 CLI Qualification, Progress and Package Validation
2
+
3
+ ## 1. Executive Verdict
4
+
5
+ Final v0.5.0 verdict: **`BLOCKED_BY_QUALIFICATION_INPUT`**.
6
+
7
+ The committed FIX-04 snapshot passed focused preflight, fresh packaging,
8
+ offline clean installation, public import/version/help, default TTY/plain/CI
9
+ workflows, the production CPU-bound heartbeat gate, cancellation, controlled
10
+ failure, normalized artifact equivalence, canonical parallel regression, and
11
+ the separately executed serial suite.
12
+
13
+ A persisted real-provider Migration Planning qualification record was not
14
+ available through either supported source. The validation did not synthesize,
15
+ copy, repair, or reconstruct one from prose. RERUN-006 and RERUN-007 therefore
16
+ could not establish the required exact identity and integrity evidence, and a
17
+ release GO is not permitted.
18
+
19
+ Migration Checklist default-enablement decision: **`KEEP_EXPERIMENTAL`**.
20
+
21
+ ## 2. Committed Snapshot Precondition
22
+
23
+ - Branch: `feat/mvp-05-evidence-migration-checklist`
24
+ - HEAD: `44eb942e21ea78550700990a00bd74635ce48bcc`
25
+ - Subject: `fix: event-loop starvation`
26
+ - Expected pre-FIX-04 baseline: `a24899dee1714c8b6f7c20cd9a129e9e80a97261`
27
+ - Initial index: clean
28
+ - Initial worktree: clean
29
+ - Initial untracked files: none
30
+
31
+ Committed-tree inspection confirmed:
32
+
33
+ - `src/cooperative-scheduler.js` is present;
34
+ - Discovery and Usage import and call the scheduler at safe boundaries;
35
+ - abort checks are part of the committed scheduler integration;
36
+ - `test/cooperative-scheduling.test.js` is present;
37
+ - the package contains the scheduler module;
38
+ - `package.json` retains `!docs/*-cli-captures`.
39
+
40
+ All post-preflight product evidence used this exact committed HEAD.
41
+
42
+ ## 3. Why This Rerun Was Required
43
+
44
+ The prior RR02-RERUN on `a24899d` stopped at RERUN-005 with
45
+ `NO_GO_QUALIFICATION_OR_PROGRESS`: a CPU-bound Usage stage was quiet for 8.4
46
+ seconds and did not allow the five-second heartbeat timer to run. FIX-04 added
47
+ event-loop-safe cooperative scheduling. Its remediation evidence was not
48
+ itself a release verdict, so this run restarted with a new tarball at
49
+ RERUN-001.
50
+
51
+ Historical evidence remains in capture sequences 001–007 and retains the old
52
+ no-go verdict. The current attempt is sequences 008–018.
53
+
54
+ ## 4. Environment and Fresh Package Identity
55
+
56
+ - Package: `upgradelens@0.4.0`
57
+ - Platform: macOS arm64
58
+ - Node: `v26.0.0`
59
+ - Fresh isolated validation root: yes
60
+ - Fresh UpgradeLens tarball: yes; no prior UpgradeLens tarball reused
61
+ - Clean install: offline, isolated consumer, exact local dependency tarballs
62
+ - Installed packages: 12
63
+ - Public package import: passed; 408 exports observed
64
+ - Provider requests: 0
65
+
66
+ Installed/exercised tarball:
67
+
68
+ - file count: 207;
69
+ - compressed size: 491,143 bytes;
70
+ - unpacked size: 1,940,721 bytes;
71
+ - npm SHA-1: `c8277090a5d8996b3a46c1ef4284cbee3e1534d4`;
72
+ - SHA-256:
73
+ `72ee68a2d06c8a2b9f226a006a73851ac3c595db68783abaccd889924b74cb1c`.
74
+
75
+ The first isolated-cache install correctly returned `ENOTCACHED`. A new
76
+ consumer was then installed offline with the exact local dependency tarballs;
77
+ the UpgradeLens tarball itself remained the newly packed HEAD artifact.
78
+
79
+ ## 5. Qualification Input and Identity Check
80
+
81
+ No `migration-planning-qualification.json` exists in the repository default
82
+ location, under the available Desktop repositories, or under the available
83
+ temporary validation roots. No supported relative override was supplied.
84
+
85
+ Consequences:
86
+
87
+ - strict schema, record integrity, and exact real-provider identity could not
88
+ be established for RERUN-006;
89
+ - the relative override path could not be exercised with a real persisted
90
+ record in RERUN-007;
91
+ - identity mismatch/corruption/`NOT_QUALIFIED` product scenarios were not
92
+ manufactured from test data;
93
+ - no provider was constructed or called.
94
+
95
+ RERUN-008 independently confirmed that an actually missing default record is
96
+ presented as `MISSING`, source `defaultPath`, qualification ID `none`, and
97
+ experimental override `YES`. It was never presented as qualified.
98
+
99
+ ## 6. Preflight Results
100
+
101
+ | Gate | Result |
102
+ | --- | --- |
103
+ | Scheduler, Discovery, Usage, progress, orchestration and CLI | 45 passed, 0 failed |
104
+ | Qualification resolver/guard and Migration Checklist runtime | 75 passed, 0 failed |
105
+ | MP, duplicate occurrence, governance and Extractive Contract v2 | 75 passed, 0 failed |
106
+ | Package content guard before matrix | 207 files, 0 captures, 15/15 required assets |
107
+ | Committed snapshot | Clean and newer than `a24899d` |
108
+
109
+ No focused non-sandbox failure occurred.
110
+
111
+ ## 7. Scenario Matrix
112
+
113
+ | Scenario | Packaged CLI | Qualification | Mode | Duration | Heartbeats | Exit | Provider calls | Result | Capture |
114
+ | --- | --- | --- | --- | ---: | ---: | ---: | ---: | --- | --- |
115
+ | RERUN-001 version | Yes | N/A | non-TTY | 1.1s | 0 | 0 | 0 | Pass | `008-...-version` |
116
+ | RERUN-001 help | Yes | N/A | non-TTY | 0.6s | 0 | 0 | 0 | Pass | `009-...-help` |
117
+ | RERUN-002 default auto | Yes | Not resolved by design | TTY interactive | 0.8s | 0 | 0 | 0 | Pass, seven stages | `010-...-default-tty-auto` |
118
+ | RERUN-003 default auto | Yes | Not resolved by design | non-TTY plain | 1.4s | 0 | 0 | 0 | Pass | `011-...-default-nontty-auto` |
119
+ | RERUN-004 explicit plain | Yes | Not resolved by design | 80-column PTY | 0.8s | 0 | 0 | 0 | Pass | `012-...-plain-tty` |
120
+ | RERUN-005 CPU heartbeat | Yes | Not resolved | TTY interactive | 22.1s total; Usage 16.0s | 3 | 0 | 0 | **Pass** | `013-...-cpu-heartbeat` |
121
+ | RERUN-006 persisted qualified | No | Record unavailable | N/A | N/A | N/A | N/A | 0 | Blocked by input | manifest |
122
+ | RERUN-007 relative override | No | Record unavailable | N/A | N/A | N/A | N/A | 0 | Blocked by input | manifest |
123
+ | RERUN-008 missing | Yes | `MISSING` | non-TTY plain | 1.0s | 0 | 0 | 0 | Pass | `014-...-missing-qualification` |
124
+ | RERUN-009 mismatch | No | No persisted fixture authorized | N/A | N/A | N/A | N/A | 0 | Not manufactured | manifest |
125
+ | RERUN-010 corrupted | No | No persisted fixture authorized | N/A | N/A | N/A | N/A | 0 | Not manufactured | manifest |
126
+ | RERUN-011 `NOT_QUALIFIED` | No | No persisted fixture authorized | N/A | N/A | N/A | N/A | 0 | Not manufactured | manifest |
127
+ | RERUN-012 cancellation | Yes | N/A | non-TTY plain | 5.8s total | 0 | 130 | 0 | Pass | `015-...-usage-cancellation` |
128
+ | RERUN-013 fatal failure | Yes | N/A | non-TTY plain | 0.6s | 0 | 1 | 0 | Pass | `016-...-fatal-stage-failure` |
129
+ | RERUN-014 CI-like | Yes | Not resolved by design | non-TTY/no color | 0.7s | 0 | 0 | 0 | Pass | `017-...-ci-like` |
130
+ | Artifact repeat | Yes | Not resolved by design | non-TTY plain | 0.8s | 0 | 0 | 0 | Pass | `018-artifact-determinism-repeat` |
131
+ | RERUN-015 final package | Tar inspection | N/A | N/A | N/A | N/A | N/A | 0 | Pass | this report |
132
+
133
+ ## 8. CPU-bound Heartbeat Evidence
134
+
135
+ The clean-installed public binary ran the controlled 60,000-file workload
136
+ using the production five-second threshold:
137
+
138
+ ```text
139
+ Repository Usage Discovery — Scanning supported source files [0.0s]
140
+ Repository Usage Discovery — Scanning supported source files [5.0s]
141
+ Repository Usage Discovery — Scanning supported source files [10.0s]
142
+ Repository Usage Discovery — Scanning supported source files [15.0s]
143
+ Repository Usage Discovery — Writing Repository Usage Index [16.0s]
144
+ Repository Usage Discovery completed [16.0s]
145
+ ```
146
+
147
+ The three heartbeat records occur after the quiet threshold and before the
148
+ terminal record. Elapsed values are monotonic. There is no percentage, ETA,
149
+ token stream, model-thinking claim, scanner-forged heartbeat, or heartbeat
150
+ after terminal state.
151
+
152
+ ## 9. Qualification Consistency Results
153
+
154
+ - Default analysis ran seven stages and did not resolve qualification.
155
+ - Default analysis did not schedule Migration Checklist.
156
+ - Missing qualification was resolved once for the experimental run and was
157
+ consistently shown as `MISSING`.
158
+ - Console output reported source, path, ID and override state without claiming
159
+ qualification.
160
+ - The experimental missing-record policy completed with mandatory review and
161
+ zero eligible contexts/provider calls.
162
+ - Focused tests passed persisted `QUALIFIED`, mismatch, corruption,
163
+ `NOT_QUALIFIED`, one-source, immutable-decision and zero-provider-call
164
+ contracts.
165
+
166
+ Focused tests are not substituted for the missing packaged real-provider
167
+ record. That distinction is the release blocker.
168
+
169
+ ## 10. Cancellation and Failure Results
170
+
171
+ RERUN-012 sent the first `SIGINT` after Usage emitted
172
+ `SCAN_SUPPORTED_SOURCE`. Usage reached `STAGE CANCELLED` at 0.1 seconds of that
173
+ stage, the run exited 130, later stages were absent, no success summary was
174
+ printed, and `.upgradelens/usage-index.json` was absent.
175
+
176
+ RERUN-013 passed a file where a repository directory was required. Project
177
+ Discovery emitted one constrained `STAGE FAILED`, the run emitted
178
+ `completed=0/7 next=REVIEW_FAILURE_DETAILS`, exited 1, and did not schedule
179
+ later stages or print a success summary. No raw stack was exposed.
180
+
181
+ ## 11. Artifact Determinism
182
+
183
+ The same packaged command was repeated against the same target. Project
184
+ Manifest, Usage Index, Repository Impact and Repository Impact Evidence were
185
+ equivalent after removing only runtime timestamps and the exact-byte lineage
186
+ digests that necessarily change when those timestamps change. All dependency,
187
+ symbol, file, finding, evidence, ordering, IDs, statuses and presentation data
188
+ were identical.
189
+
190
+ The committed cooperative test independently proves exact-byte equality with
191
+ fixed clocks for yield-disabled, yield-enabled and alternate batch policies.
192
+
193
+ ## 12. CLI Capture Inventory
194
+
195
+ - Historical invocations retained: 7
196
+ - Current attempt invocations: 11
197
+ - Total manifest entries: 18
198
+ - Current sequences: 008–018
199
+ - Current final screens: 11/11
200
+ - Current additional progress screens: 9
201
+ - Missing final screens: 0
202
+ - Raw transcripts: 18
203
+ - Clean transcripts: 18
204
+ - Real-provider requests: 0
205
+ - Sanitization failures: 0
206
+
207
+ The stable-sorted manifest is
208
+ `docs/rr02-rerun-cli-captures/manifest.json`. Every new UpgradeLens CLI
209
+ invocation has command, environment, raw/clean transcript, metadata, exit
210
+ code, and final screen. TTY scenarios used a real PTY; non-TTY images were
211
+ rendered from their actual transcripts.
212
+
213
+ ## 13. UX Scorecard
214
+
215
+ | Criterion | Score | Evidence |
216
+ | --- | ---: | --- |
217
+ | Current activity | 2 | RERUN-002 and RERUN-005 |
218
+ | Meaningful detail | 2 | Stable stage/activity labels |
219
+ | Elapsed time | 2 | 5/10/15-second production heartbeats |
220
+ | Completed history | 2 | Interactive and plain lifecycle trails |
221
+ | Warnings in context | 1 | Missing qualification is contextual; limited warning variety |
222
+ | Final summary | 2 | Default TTY, plain and CI |
223
+ | Visual stability | 2 | Append-only; no cursor rewrite |
224
+ | TTY awareness | 2 | Auto interactive versus auto plain |
225
+ | Honest progress | 2 | No invented percentage, ETA, retry or thinking |
226
+ | Failure recovery | 2 | Cancellation and fatal failure captures |
227
+ | **Total** | **19/20** | UX release target met |
228
+
229
+ The historical Medium 80-column detail-truncation limitation remains a
230
+ non-blocking follow-up. It was not changed or used to alter this validation.
231
+
232
+ ## 14. Package Contents and Clean Install
233
+
234
+ The exercised tarball contained the committed scheduler and all 15
235
+ authoritative runtime/schema/dataset/documentation assets. Inspection and the
236
+ package guard found:
237
+
238
+ - 207 files;
239
+ - zero `docs/*-cli-captures` entries;
240
+ - zero capture helper entries;
241
+ - all 15 required assets;
242
+ - executable CLI and public runtime present;
243
+ - clean offline install and public import passed.
244
+ - `npm pack --dry-run --json` passed with the isolated validation cache.
245
+
246
+ An initial dry-run without the isolated-cache argument hit the host's
247
+ root-owned default npm cache (`EPERM`). The required rerun with the isolated
248
+ validation cache passed; this was an environment permission issue, not a
249
+ package-content failure.
250
+
251
+ RERUN capture trees, FIX-04 capture trees, PNGs, transcripts and temporary
252
+ capture helpers are absent from the package.
253
+
254
+ Fresh RERUN-015 tarball created after the report/capture tree existed:
255
+
256
+ - file count: 207;
257
+ - compressed size: 491,159 bytes;
258
+ - unpacked size: 1,940,925 bytes;
259
+ - npm SHA-1: `97fca29e73ee63d806857deca9c3d38a8e5b31c0`;
260
+ - SHA-256:
261
+ `dff64ad860a346e3d5c5db76c9102941779c50fd6e2c07df3d18dbc438f43746`.
262
+
263
+ ## 15. Canonical and Serial Regression Results
264
+
265
+ Canonical parallel `npm run check`:
266
+
267
+ - 546 tests;
268
+ - 545 passed;
269
+ - 0 failed;
270
+ - 1 known sandbox-only local-loopback skip;
271
+ - package guard passed with 207 files, zero captures and 15/15 assets.
272
+
273
+ Separate serial `npm test -- --test-concurrency=1`:
274
+
275
+ - 546 tests;
276
+ - 545 passed;
277
+ - 0 failed;
278
+ - 1 known sandbox-only local-loopback skip.
279
+
280
+ The serial pass is reported separately and is not a replacement for the
281
+ canonical result. The canonical parallel run passed on its first attempt.
282
+
283
+ ## 16. Defects and Remaining Limitations
284
+
285
+ ### Release blocker — persisted qualification input unavailable
286
+
287
+ The exact real-provider qualification record required by RERUN-006/007 is not
288
+ available. This is an evidence-input blocker, not an inferred
289
+ `NOT_QUALIFIED` result and not identity drift.
290
+
291
+ ### Non-blocking technical debt
292
+
293
+ 1. Migration Checklist remains experimental and requires a separate
294
+ default-enablement review.
295
+ 2. Narrow 80-column activity detail may truncate while stage and elapsed
296
+ identity remain readable.
297
+ 3. The local-loopback lifecycle case is skipped by this sandbox and is not
298
+ counted as a pass.
299
+ 4. Runtime-generated timestamps intentionally alter exact bytes and downstream
300
+ exact-byte lineage between separate CLI runs; fixed-clock tests retain the
301
+ exact deterministic contract.
302
+
303
+ ## 17. Release Decision
304
+
305
+ **v0.5.0 readiness: `BLOCKED_BY_QUALIFICATION_INPUT`.**
306
+
307
+ The FIX-04 heartbeat remediation is release-ready on the observed packaged
308
+ workflows. Package, progress, cancellation, failure, deterministic contract,
309
+ and regressions do not block this candidate. Release GO remains prohibited
310
+ until the existing real-provider qualification record is materialized through
311
+ the supported persisted contract and exact identity/integrity can be checked.
312
+
313
+ **Migration Checklist default enablement: `KEEP_EXPERIMENTAL`.**
314
+
315
+ Next task: materialize/persist the existing qualified record without
316
+ reconstructing it from prose, then rerun only the qualification-dependent
317
+ release gates before a v0.5.0 Release Execution Checklist.
318
+
319
+ ## 18. Scope Confirmation
320
+
321
+ - No production, test, fixture, package, qualification, dataset, policy,
322
+ prompt, schema, trust, generator, or VinGrade file was changed.
323
+ - No lifecycle timeout, heartbeat interval, yield policy, expected transcript,
324
+ or test infrastructure was changed.
325
+ - No record was synthesized, repaired or requalified.
326
+ - No old UpgradeLens tarball was reused.
327
+ - No network or real-provider call occurred.
328
+ - No file was staged or committed.
329
+ - No push, tag, publish or release occurred.
330
+ - Only this canonical report and new canonical capture evidence changed.
331
+ - Migration Checklist remains experimental.
332
+
333
+ ## FIX-05 Qualification Completion Attempt
334
+
335
+ FIX-05 located the original machine-readable RR-01-RERUN real-provider
336
+ evaluation, validated its complete v2 qualification against current identity,
337
+ and materialized the unchanged `QUALIFIED` object through the supported atomic
338
+ writer. Packaged RERUN-006 through RERUN-011 passed with zero new provider
339
+ requests. Final decision is now
340
+ `GO_V0_5_0_WITH_NON_BLOCKING_UX_FOLLOWUPS`; Migration Checklist remains
341
+ `KEEP_EXPERIMENTAL`. Full evidence is in
342
+ `RR02-FIX-05-Materialize-Persisted-Qualification.md`.