@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,355 @@
1
+ # UpgradeLens vs UpgradeDepDetective source comparison
2
+
3
+ Assessment date: 2026-07-19
4
+ Comparison basis: immutable committed snapshots; external source was treated as untrusted and was read but never executed.
5
+
6
+ Evidence labels used below:
7
+
8
+ - **[S]** direct source or package metadata at the stated commit.
9
+ - **[T]** test or evaluation evidence.
10
+ - **[D]** README or other documentation claim.
11
+ - **[M]** GitHub, npm, Git, release, or CI metadata.
12
+ - **[I]** inference drawn from the cited evidence.
13
+
14
+ ## 1. Executive verdict
15
+
16
+ **Relationship verdict: `UPGRADELENS_DIFFERENTIATED_WITH_OVERLAP`**
17
+
18
+ **Public-preview impact: `UPDATE_POSITIONING_BEFORE_PUBLIC_PREVIEW`**
19
+
20
+ The repositories address the same broad problem—helping JavaScript projects evaluate dependency upgrades—but implement materially different products. UpgradeDepDetective is a compact npm CLI that compares declared dependency versions with registry latest versions, checks selected peer-dependency relationships and emits console/Markdown output. UpgradeLens is a repository-aware, evidence-bounded analysis pipeline whose central contract separates version availability from an upgrade recommendation, identifies exact dependency occurrences, represents incomplete evidence explicitly, persists reusable artifacts and produces a reviewed migration handoff. **[S][I]** ([UpgradeLens pipeline](https://github.com/thomasMinh1995/UpgradeLens/blob/c91fbb0032b0e2f6209cb4a14aeeb68d9cf0c28d/src/orchestration/pipeline.js), [decision policy](https://github.com/thomasMinh1995/UpgradeLens/blob/c91fbb0032b0e2f6209cb4a14aeeb68d9cf0c28d/src/upgrade-decision/upgrade-decision.js), [UpgradeDepDetective entry point](https://github.com/zjp123/UpgradeDepDetective-/blob/d6e5efcb852ba3848fb14dbdcbd7058b17bb6cde/src/index.js), [compatibility logic](https://github.com/zjp123/UpgradeDepDetective-/blob/d6e5efcb852ba3848fb14dbdcbd7058b17bb6cde/src/compatibility.js))
21
+
22
+ No meaningful non-standard source-text match was found. The material overlap is instead in product identity: the external repository used the displayed name **UpgradeLens**, package name `upgrade-lens`, and CLI `upgrade-lens` before the local project existed; `upgrade-lens@1.0.2` is already published on npm. **[M][S]** This is not evidence of copied implementation, but it creates avoidable brand, discoverability and distribution confusion. Public technical evaluation can proceed, but broader promotion or npm publication should follow an explicit naming and positioning decision.
23
+
24
+ ## 2. Snapshot identities and dates
25
+
26
+ | Attribute | UpgradeLens | UpgradeDepDetective |
27
+ | --- | --- | --- |
28
+ | Repository | `thomasMinh1995/UpgradeLens` | `zjp123/UpgradeDepDetective-` (trailing `-` is part of the identity) |
29
+ | Visibility/access | Public, accessible, unarchived **[M]** | Public, accessible, unarchived **[M]** |
30
+ | Default branch | `main` **[M]** | `main` **[M]** |
31
+ | Exact baseline SHA | [`c91fbb0032b0e2f6209cb4a14aeeb68d9cf0c28d`](https://github.com/thomasMinh1995/UpgradeLens/commit/c91fbb0032b0e2f6209cb4a14aeeb68d9cf0c28d); local and remote matched **[M]** | [`d6e5efcb852ba3848fb14dbdcbd7058b17bb6cde`](https://github.com/zjp123/UpgradeDepDetective-/commit/d6e5efcb852ba3848fb14dbdcbd7058b17bb6cde) **[M]** |
32
+ | Repository created | 2026-07-13 15:04:42 UTC **[M]** | 2025-04-28 08:02:39 UTC **[M]** |
33
+ | Baseline commit date | 2026-07-19 13:50:13 +07:00 **[M]** | 2025-06-18 08:00:04 UTC **[M]** |
34
+ | Package | `upgradelens@0.5.0`, Node `>=20`, ESM **[S]** | `upgrade-lens@1.0.2`, Node `>=14.16`, ESM **[S]** |
35
+ | Primary language/runtime | JavaScript / Node.js **[S][M]** | JavaScript / Node.js **[S][M]** |
36
+ | Tags/releases | Tags `v0.1.1`–`v0.5.0`; GitHub release `v0.5.0` published 2026-07-19. Baseline SHA is after the tag. **[M]** | No public tags or GitHub releases at assessment time. **[M]** |
37
+ | Public CI | Latest baseline push run [29677083963](https://github.com/thomasMinh1995/UpgradeLens/actions/runs/29677083963) completed successfully on 2026-07-19. **[M]** | No workflow under `.github/workflows` at the baseline. **[S]** |
38
+ | Registry state | Unscoped `upgradelens` and planned/scoped `@thomasminh1995/upgradelens` returned npm 404 on 2026-07-19. **[M]** | `upgrade-lens` is published; versions `1.0.0`, `1.0.1`, `1.0.2`, latest `1.0.2`. **[M]** |
39
+ | Baseline size | 457 tracked files: 124 under `src`, 90 test files, 22 schemas, 19 evaluation files, 178 docs, 4 examples. **[M]** | 12 tracked files, including four source modules and no test files or CI workflow. **[M]** |
40
+
41
+ Uncommitted and untracked local files were excluded. The UpgradeLens baseline was reconstructed from the exact committed tree, not the working tree. The external baseline was inspected in an isolated temporary clone at its exact SHA with hooks disabled, without submodules, installation, build, tests, binaries, or lifecycle scripts.
42
+
43
+ ## 3. License/provenance assessment
44
+
45
+ Both baselines contain an MIT license:
46
+
47
+ - UpgradeLens: MIT, copyright 2026 `thomasMinh1995`. **[S]** ([LICENSE](https://github.com/thomasMinh1995/UpgradeLens/blob/c91fbb0032b0e2f6209cb4a14aeeb68d9cf0c28d/LICENSE))
48
+ - UpgradeDepDetective: MIT, copyright 2023 `UpgradeLens`; the license file entered its history in April 2025. **[S][M]** ([LICENSE](https://github.com/zjp123/UpgradeDepDetective-/blob/d6e5efcb852ba3848fb14dbdcbd7058b17bb6cde/LICENSE))
49
+
50
+ **Reuse classification: `LICENSE_REQUIRES_ATTRIBUTION_OR_DISCLOSURE`.**
51
+
52
+ Reading public source and independently implementing a product concept is different from copying protected source expression. MIT generally permits use, modification and distribution, but copies or substantial portions must retain the copyright and permission notice. Therefore:
53
+
54
+ - Reference-only analysis and clean-room implementation of high-level ideas are compatible.
55
+ - Copying source, prompts, prose, tests or distinctive structure would require preserving the external notice and recording provenance.
56
+ - The external notice names the product rather than a clearly identified person or entity and predates the repository by two years. That does not invalidate the assessment, but it is an additional reason to avoid code reuse unless ownership/provenance is clarified.
57
+ - A public repository without a license would remain copyrighted by default; that is not the case for either assessed baseline.
58
+
59
+ No external code reuse is recommended or performed by this review. This is a technical provenance assessment, not legal advice.
60
+
61
+ ## 4. Product summaries
62
+
63
+ ### UpgradeLens
64
+
65
+ - **Users/problem:** maintainers and coding agents deciding whether and how to upgrade a dependency in a real repository. **[D][S]**
66
+ - **Interface:** multi-command CLI plus programmatic exports; primary flow is `analyze`. **[S]** ([CLI](https://github.com/thomasMinh1995/UpgradeLens/blob/c91fbb0032b0e2f6209cb4a14aeeb68d9cf0c28d/src/cli.js), [package metadata](https://github.com/thomasMinh1995/UpgradeLens/blob/c91fbb0032b0e2f6209cb4a14aeeb68d9cf0c28d/package.json))
67
+ - **Input:** repository, dependency/occurrence selection, optional target and evidence/provider configuration. **[S]**
68
+ - **Output:** versioned JSON artifacts, decision states, Markdown report and an experimental evidence-bounded migration handoff. **[S][D]**
69
+ - **Review/autonomy boundary:** performs analysis and suggestions but does not modify application source; non-trivial decisions retain human-review requirements. **[S]**
70
+ - **Ecosystems:** implemented discovery for Node package/workspace projects and Python requirements; deeper installed-baseline and usage support is strongest for npm/JavaScript/TypeScript. **[S]**
71
+ - **Offline/provider behavior:** deterministic discovery and parts of analysis work without a model; offline prevents registry/evidence calls but does not make every provider-dependent path available. **[S]**
72
+ - **Distribution/maturity:** GitHub release and package smoke are available; npm publication is absent. Positioning is technical preview. **[M][D]**
73
+
74
+ ### UpgradeDepDetective
75
+
76
+ - **Users/problem:** JavaScript maintainers checking available dependency updates and selected inter-package compatibility. **[D][S]**
77
+ - **Interface:** single Commander CLI with optional interactive selection, deep flag and Markdown output. **[S]** ([entry point](https://github.com/zjp123/UpgradeDepDetective-/blob/d6e5efcb852ba3848fb14dbdcbd7058b17bb6cde/src/index.js))
78
+ - **Input:** a directory containing a root `package.json`; runtime dependencies are the effective registry-analysis set. **[S]**
79
+ - **Output:** ephemeral console report and optional Markdown file. **[S]**
80
+ - **Review/autonomy boundary:** lets a user select dependencies interactively; it neither changes source nor provides a structured review/approval state. **[S]**
81
+ - **Ecosystems:** root npm package metadata only. The README's frontend framing does not add analyzers for other ecosystems. **[D][S]**
82
+ - **Offline/provider behavior:** no AI provider; npm registry availability is required for fresh package/version details. **[S]**
83
+ - **Distribution/maturity:** published as `upgrade-lens@1.0.2`; compact codebase, but no source tests, public CI, tags or GitHub releases at the baseline. **[M][S]**
84
+
85
+ ### Public-surface inventory
86
+
87
+ | Surface | UpgradeLens | UpgradeDepDetective |
88
+ | --- | --- | --- |
89
+ | Commands/flags | Commands: `analyze`, `discover`, `research`, `analyze-version`, `eval`, `scorecard`, `benchmark`, `conformance`, `governance`. Primary flags include `--target`, `--offline`, `--stdout`, `--progress` and experimental migration-checklist opt-in. **[S][D]** | One command with `--path`, `--deep`, `--interactive` and `--output`; `--deep` has no behavioral use in the analyzer at the baseline. **[S]** |
90
+ | Configuration | CLI options plus `UPGRADELENS_AI_PROVIDER`, `UPGRADELENS_AI_ENDPOINT`, `UPGRADELENS_AI_MODEL`, optional authorization, timeout and sanitized-debug controls; callers can inject an `AiRuntime`. **[S][D]** | CLI flags only; no environment/provider configuration was found. **[S]** |
91
+ | Programmatic API | ESM export surface from `src/index.js`; committed package-smoke verification checked 438 public exports. **[S][T]** | `src/index.js` is both bin and package main; the package does not define a separately governed library export map. **[S]** |
92
+ | Schemas/artifacts | 22 tracked schemas and ten documented/versioned primary workflow artifacts at this baseline. **[S][D]** | No tracked schema; in-memory objects plus console/optional Markdown. **[S]** |
93
+ | Reports | Decision-first console/product-completion summary, validated JSON under `.upgradelens/`, Markdown report and optional migration handoff. **[S]** | Console report and optional Markdown containing a locale-formatted generation time. **[S]** |
94
+ | Exit semantics | Product completion maps complete/review, partial, failure and cancellation to documented exit behavior including `0`, `2`, `1`, `130`; strict mode can strengthen CI handling. **[S][T]** | Normal completion is implicit `0`; top-level fatal catch exits `1`; per-package/report errors do not consistently change the overall exit. **[S]** |
95
+ | Package identity | `upgradelens@0.5.0`, bin `upgradelens`, explicit exports, MIT, Node `>=20`; not published on npm at assessment time. **[S][M]** | `upgrade-lens@1.0.2`, bin `upgrade-lens`, main `src/index.js`, MIT, Node `>=14.16`; published on npm. **[S][M]** |
96
+
97
+ ## 5. Architecture comparison
98
+
99
+ | Concern | UpgradeLens | UpgradeDepDetective |
100
+ | --- | --- | --- |
101
+ | Entry points | `src/cli.js`, public exports from `src/index.js`; commands include `analyze`, `discover`, `research`, `analyze-version`, `eval`, `scorecard`, `benchmark`, `conformance`, `governance`. **[S]** | `src/index.js`; one CLI flow with path/deep/interactive/output options. **[S]** |
102
+ | Orchestration | Eight core stages: project discovery → knowledge research → version analysis → usage discovery → impact analysis → impact evidence → upgrade decision → report; migration checklist can be inserted before reporting. **[S]** | Linear flow: analyze root package → optional interactive filtering → compatibility analysis → report. **[S]** |
103
+ | Contracts/persistence | Versioned artifact schemas and persisted JSON/Markdown outputs; 22 schema files at baseline. **[S]** | In-memory JavaScript objects; optional Markdown report, no schema contract. **[S]** |
104
+ | Parsing/baseline | Package/workspace discovery plus npm lockfile-aware installed-version resolution with fail-closed ambiguity handling; pnpm/Yarn remain unsupported. **[S]** | Reads root `package.json`; derives “current” by stripping non-digits from a declared range. Lockfile is not consulted. **[S]** ([analyzer](https://github.com/zjp123/UpgradeDepDetective-/blob/d6e5efcb852ba3848fb14dbdcbd7058b17bb6cde/src/analyzer.js)) |
105
+ | Research | Registry and evidence/document research with provenance. **[S]** | Sequential npm packument calls; no changelog/release-note/document evidence model. **[S]** |
106
+ | Source analysis | JavaScript/TypeScript usage discovery and explicit coverage states/reasons. **[S]** | No application-source analysis. **[S]** |
107
+ | Decision | Deterministic policy with `KEEP_CURRENT`, `UPGRADE_NOW`, `PLAN_UPGRADE`, `INVESTIGATE`, `INSUFFICIENT_EVIDENCE`, `NOT_ANALYZED`; availability alone is not a driver. **[S]** | Boolean `canUpgrade`, selected peer checks and two hard-coded known-issue rules; registry latest is the candidate. **[S]** |
108
+ | Migration | Evidence-bounded, extractive action/checklist generation with review and qualification gates. **[S][T]** | No migration action generation. **[S]** |
109
+ | AI boundary | Provider-neutral runtime and OpenAI-compatible HTTP provider; structured schemas and deterministic post-validation. **[S]** | No production AI path. `gen.md` is a scaffold/design document, not an invoked prompt. **[S]** |
110
+ | Validation | Evidence allowlists, occurrence identity, coverage/reason states, provider failure types, qualification suites. **[S][T]** | Ad hoc validation; one compatibility path defaults to compatible when details are unavailable. **[S]** |
111
+ | Tests/evaluation | 90 test files, evaluation datasets/scorecards/qualification logic; hosted CI currently green. **[T][M]** | Jest script and `prepublishOnly` exist, but no tracked tests and no hosted workflow. **[S]** |
112
+ | Release tooling | Read-only CI on Node 20/22/24 and package smoke; versioned GitHub releases. **[S][M]** | Published npm package and publishing guide; no CI workflow or repository release tags. **[S][M]** |
113
+
114
+ UpgradeLens exposes a much larger public surface (438 exports were checked by its committed package-smoke qualification), which enables composition but increases API-governance cost. UpgradeDepDetective's four-module architecture is easier to understand, but its smaller surface also omits repository identity, evidence and decision safeguards. **[T][S][I]**
115
+
116
+ ## 6. Feature matrix
117
+
118
+ | Capability | UpgradeLens | UpgradeDepDetective | Evidence | Practical difference | Winner/Trade-off |
119
+ | --- | --- | --- | --- | --- | --- |
120
+ | 1. Project/ecosystem discovery | `IMPLEMENTED` | `PARTIALLY_IMPLEMENTED` | UL discovery modules; UDD root `package.json` reader **[S]** | UL discovers projects/workspaces and records unsupported scope; UDD assumes one npm root. | UL scope truthfulness |
121
+ | 2. Dependency declaration parsing | `IMPLEMENTED` | `PARTIALLY_IMPLEMENTED` | UL parsers; UDD analyzer **[S]** | UDD records dependency groups but registry analysis effectively iterates runtime dependencies only. | UL |
122
+ | 3. Installed-version resolution | `PARTIALLY_IMPLEMENTED` | `NOT_FOUND` | UL `installed-version-baseline.js`; UDD declared-range cleanup **[S]** | UL resolves supported npm lock formats and fails closed; UDD does not establish an installed baseline. | UL |
123
+ | 4. Lockfile/workspace support | `PARTIALLY_IMPLEMENTED` | `NOT_FOUND` | UL npm lock/workspace source and tests; UDD source **[S][T]** | UL supports npm lock v2/v3 and limited v1; not pnpm/Yarn. | UL |
124
+ | 5. Latest/target discovery | `IMPLEMENTED` | `IMPLEMENTED` | Registry modules in both **[S]** | UDD chooses latest; UL distinguishes candidate availability, explicit target and recommendation. | Trade-off: UDD simpler, UL safer |
125
+ | 6. Release notes/changelog/docs research | `IMPLEMENTED` | `NOT_FOUND` | UL knowledge/evidence stages; UDD modules **[S]** | UL can ground risk in documents; UDD uses package metadata and fixed rules. | UL |
126
+ | 7. Evidence provenance | `IMPLEMENTED` | `NOT_FOUND` | UL evidence contracts/schemas **[S]** | UL tracks evidence references; UDD has no provenance artifact. | UL |
127
+ | 8. AI-assisted analysis | `IMPLEMENTED` | `NOT_FOUND` | UL AI version/migration paths; UDD has no invoked AI **[S]** | UL can synthesize bounded evidence but adds provider uncertainty; UDD is deterministic and provider-free. | Trade-off |
128
+ | 9. Provider/model abstraction | `IMPLEMENTED` | `NOT_FOUND` | UL `ai-runtime.js`, OpenAI-compatible provider **[S]** | UL avoids a single named-provider contract; cross-model quality is not yet fully proven. | UL potential |
129
+ | 10. Offline mode | `PARTIALLY_IMPLEMENTED` | `NOT_FOUND` | UL offline branches; UDD registry calls **[S]** | UL preserves some local analysis, not the complete provider/research workflow. | UL |
130
+ | 11. Source usage detection | `PARTIALLY_IMPLEMENTED` | `NOT_FOUND` | UL usage analyzer; UDD does not scan source **[S]** | UL can relate dependency use to repository areas, currently strongest for JS/TS. | UL |
131
+ | 12. Coverage awareness | `IMPLEMENTED` | `NOT_FOUND` | UL coverage states/reason codes **[S][T]** | UL distinguishes complete/partial/unavailable/failed rather than implying unseen source is safe. | UL |
132
+ | 13. Breaking-change matching | `PARTIALLY_IMPLEMENTED` | `PARTIALLY_IMPLEMENTED` | UL evidence/usage matching; UDD peers plus two known issues **[S]** | UL is evidence/usage-oriented; UDD offers narrow deterministic peer checks. Neither proves general semantic compatibility. | Different strengths |
133
+ | 14. Deterministic upgrade decision | `IMPLEMENTED` | `PARTIALLY_IMPLEMENTED` | UL decision policy; UDD `canUpgrade` **[S]** | UL has replayable states/reasons; UDD has a boolean heuristic. | UL |
134
+ | 15. Recommendation-driver policy | `IMPLEMENTED` | `PARTIALLY_IMPLEMENTED` | UL driver policy; UDD latest-based flow **[S]** | UL requires a valid driver; UDD can turn latest availability into upgradeability. | UL |
135
+ | 16. Duplicate occurrence identity | `IMPLEMENTED` | `NOT_FOUND` | UL target selector/hash/tests; UDD flat dependency map **[S][T]** | UL rejects ambiguous or stale occurrence selection before provider work. | UL |
136
+ | 17. Migration action/handoff | `IMPLEMENTED` | `NOT_FOUND` | UL migration v2 contracts/qualification **[S][T]** | UL emits reviewable evidence-bounded actions; UDD stops at compatibility/reporting. | UL, experimental value |
137
+ | 18. Human-in-the-loop review | `IMPLEMENTED` | `PARTIALLY_IMPLEMENTED` | UL review flags/states; UDD interactive filter **[S]** | UDD selection UX is useful, but lacks a decision approval boundary. | Different strengths |
138
+ | 19. Verification commands | `IMPLEMENTED` | `NOT_FOUND` | UL migration artifacts **[S][T]** | UL may propose evidence-linked verification; it does not execute it. | UL |
139
+ | 20. Recovery/rollback | `PARTIALLY_IMPLEMENTED` | `NOT_FOUND` | UL completion/failure semantics; no full migration rollback **[S]** | UL represents operational recovery but does not provide automatic code rollback. | UL limited |
140
+ | 21. Source modification/automation | `NOT_FOUND` | `NOT_FOUND` | Both source trees **[S]** | Both avoid autonomous dependency/source changes. | Parity; safe boundary |
141
+ | 22. CI integration and exit codes | `IMPLEMENTED` | `PARTIALLY_IMPLEMENTED` | UL workflows/completion mapping; UDD fatal catch **[S][M]** | UL maps completion to 0/2/1/130 and runs hosted matrices; UDD lacks CI and may complete after partial registry/report failures. | UL |
142
+ | 23. Reports/artifacts | `IMPLEMENTED` | `IMPLEMENTED` | Both reporters **[S]** | UL persists versioned reusable artifacts; UDD console/Markdown includes local-time output and no schema. | Trade-off: UDD simpler, UL reusable |
143
+ | 24. Security/privacy boundaries | `IMPLEMENTED` | `NOT_FOUND` | UL provider/evidence/security contracts; UDD source/docs **[S][D]** | UL makes network/provider and evidence boundaries explicit. | UL |
144
+ | 25. Community contribution readiness | `IMPLEMENTED` | `DOCUMENTED_ONLY` | UL templates/security/support/CI; UDD README contribution sentence **[S][D]** | UL has public scaffolding; UDD has no issue templates or CI gate. | UL |
145
+ | 26. Testing/evaluation maturity | `IMPLEMENTED` | `DOCUMENTED_ONLY` | UL tests/evals/CI; UDD Jest script without tests **[T][S]** | UL checks policy and provider behavior; UDD package hook can pass with no tests. | UL |
146
+ | 27. Installation/package distribution | `PARTIALLY_IMPLEMENTED` | `IMPLEMENTED` | GitHub release/npm metadata **[M]** | UDD already has one-command npm distribution; UL package smoke passes but no npm package exists. | UDD |
147
+ | 28. Developer/Coding Agent handoff | `IMPLEMENTED` | `NOT_FOUND` | UL persisted artifact/report contracts **[S][T]** | UL outputs can reduce repeat research and preserve review boundaries; realized community value still needs feedback. | UL potential |
148
+
149
+ This matrix is not a feature-count score. UpgradeDepDetective wins on immediate installation, compactness, no-model operation and focused interactive UX. UpgradeLens wins where the user needs a defensible repository-level decision rather than a quick latest/peer check.
150
+
151
+ ## 7. Workflow comparison
152
+
153
+ ### UpgradeLens
154
+
155
+ ```mermaid
156
+ flowchart LR
157
+ A["Discover project and exact dependency occurrence"] --> B["Research versions and bounded evidence"]
158
+ B --> C["Resolve installed baseline and analyze target"]
159
+ C --> D["Discover source usage and coverage"]
160
+ D --> E["Assess impact and link evidence"]
161
+ E --> F["Apply deterministic driver and decision policy"]
162
+ F --> G["Generate reviewed migration handoff (optional)"]
163
+ G --> H["Persist artifacts and report completion"]
164
+ ```
165
+
166
+ ### UpgradeDepDetective
167
+
168
+ ```mermaid
169
+ flowchart LR
170
+ A["Read root package.json"] --> B["Fetch npm latest/package details"]
171
+ B --> C["Optionally select dependencies interactively"]
172
+ C --> D["Check peer relationships and known issue rules"]
173
+ D --> E["Set canUpgrade and recommendations"]
174
+ E --> F["Print console report / optional Markdown"]
175
+ ```
176
+
177
+ UpgradeLens is discovery-then-decision-first: it establishes the repository occurrence and installed baseline, collects evidence and coverage, then applies a deterministic policy. UpgradeDepDetective is availability-and-compatibility-first: it starts with declared ranges and registry latest, then checks selected package relationships. **[S]**
178
+
179
+ The practical contrasts are:
180
+
181
+ - **Rules versus AI:** UDD uses static program logic and hard-coded special cases. UL combines deterministic policy with schema-bound AI synthesis; AI cannot override the final factual contract.
182
+ - **Availability versus recommendation:** UDD's latest version is the candidate feeding `canUpgrade`; UL records a newer registry version without treating it as a recommendation driver.
183
+ - **Aggregate versus occurrence:** UDD uses one name-keyed root map; UL selects a stable, exact occurrence and rejects ambiguity.
184
+ - **Autonomy versus handoff:** neither edits source. UL produces an explicit reviewed handoff; UDD reports compatibility suggestions.
185
+ - **Ephemeral versus persisted:** UDD primarily prints a report; UL persists versioned artifacts intended for replay and downstream agent use.
186
+ - **`--deep` caveat:** UDD parses and passes the flag, but its analyzer does not use it to alter discovery at the baseline; it is therefore `DOCUMENTED_ONLY` behavior rather than deep dependency analysis. **[S]**
187
+
188
+ ## 8. Decision-quality cases
189
+
190
+ | Case | UpgradeLens outcome | UpgradeDepDetective outcome | Safer/more useful and why |
191
+ | --- | --- | --- | --- |
192
+ | 1. Installed equals target | `KEEP_CURRENT` when versions are comparable and equal. | `NOT REPRESENTABLE`; no structured equal-target decision because target is registry latest and equal packages are omitted from upgrade analysis. | UL is explicit and replayable. |
193
+ | 2. Registry has newer patch | `INVESTIGATE` if registry latest is the only signal; availability is not a recommendation driver. | May set `canUpgrade: true` when no selected peer conflict is found. | UL is safer; UDD is faster for update discovery. |
194
+ | 3. New major with breaking changes | Default latest-only path remains `INVESTIGATE`; an explicit target with sufficient bounded evidence may become `PLAN_UPGRADE`. | Uses peer constraints and two hard-coded issue rules; otherwise can mark the latest candidate upgradeable. | UL represents uncertainty and evidence; UDD's focused peer check is useful but incomplete. |
195
+ | 4. Missing lockfile baseline | `NOT_ANALYZED` or `INSUFFICIENT_EVIDENCE` depending stage/context; no invented installed version. | `NOT REPRESENTABLE` as a missing-baseline state; a cleaned declared range is treated as current. | UL is safer and more truthful. |
196
+ | 5. Partial source coverage | Review remains explicit; repository-sensitive decisions are constrained, commonly `INVESTIGATE`. | `NOT REPRESENTABLE`. | UL is safer because unseen source is recorded. |
197
+ | 6. Unsupported ecosystem | `INVESTIGATE`/fail-closed with unsupported reason; no false complete analysis. | `NOT REPRESENTABLE`; absence of a usable `package.json` is fatal, with no ecosystem outcome. | UL is more informative. |
198
+ | 7. Duplicate same-name occurrences | Ambiguity candidates are returned and provider work is blocked until exact selection; stale/conflicting identity fails. | `NOT REPRESENTABLE`; flat root object has one value per dependency name. | UL is safer for workspaces/monorepos. |
199
+ | 8. Provider/network unavailable | Typed provider failure contributes to `PARTIAL`; CLI maps package-local partial completion to exit 2. | Registry errors are caught per package in some paths and can yield incomplete/unknown data while the overall CLI still reports completion; fatal top-level errors exit 1. | UL exposes partial completion more reliably. |
200
+ | 9. Conflicting evidence | `INVESTIGATE`, with conflict retained as a reason. | `NOT REPRESENTABLE` as an evidence-conflict state. | UL is safer and auditable. |
201
+ | 10. Explicit user-selected target | `USER_SELECTED_TARGET` is occurrence-scoped; sufficient evidence/coverage can allow `PLAN_UPGRADE`. | `NOT REPRESENTABLE`; source always evaluates registry latest and offers no explicit target input. | UL enables intentional, reproducible planning. |
202
+
203
+ All UL outcomes above are policy outcomes supported by [`src/upgrade-decision/upgrade-decision.js`](https://github.com/thomasMinh1995/UpgradeLens/blob/c91fbb0032b0e2f6209cb4a14aeeb68d9cf0c28d/src/upgrade-decision/upgrade-decision.js) and related baseline/selector contracts. UDD outcomes come from its [`analyzer.js`](https://github.com/zjp123/UpgradeDepDetective-/blob/d6e5efcb852ba3848fb14dbdcbd7058b17bb6cde/src/analyzer.js) and [`compatibility.js`](https://github.com/zjp123/UpgradeDepDetective-/blob/d6e5efcb852ba3848fb14dbdcbd7058b17bb6cde/src/compatibility.js). **[S]**
204
+
205
+ The most consequential distinction is missing-evidence behavior. One UDD compatibility path returns the initialized compatible result when package or version details cannot be obtained. That is fail-open for the affected check. UL instead carries missing/partial/conflicting evidence into decision and completion states. **[S][I]**
206
+
207
+ ## 9. AI/trust comparison
208
+
209
+ | Trust question | UpgradeLens | UpgradeDepDetective |
210
+ | --- | --- | --- |
211
+ | Production AI path | Yes, version and migration analysis are invoked through runtime contracts. **[S]** | No. `gen.md` is not invoked by production source. **[S]** |
212
+ | Provider/model | Provider-neutral `AiRuntime`; an OpenAI-compatible HTTP implementation is included. **[S]** | None; no model requirement or model cost. **[S]** |
213
+ | Prompt location | Dedicated version-analysis and migration prompt builders in source. **[S]** | No production prompt. |
214
+ | Structured output | Strict JSON/schema contracts and versioned artifacts. **[S]** | Plain in-memory objects, console/Markdown; no schema. |
215
+ | Grounding/provenance | Prompt receives supplied evidence; unknown/invented evidence references and URLs are removed or downgraded; risk may become unknown. **[S][T]** | Registry package data and static rules; no evidence allowlist/provenance contract. |
216
+ | Deterministic validation | Decision policy remains deterministic; migration v2 requires extractive evidence spans and qualification gates. **[S][T]** | Deterministic code, but incomplete registry data can fail open in one compatibility path. **[S]** |
217
+ | Model switching | Runtime contract reduces coupling; equivalence across models remains a qualification gap. **[S][I]** | Not applicable—absence of AI eliminates model drift. |
218
+ | Evaluation/qualification | Evaluation datasets, scorecards and migration v2 qualification thresholds/gates are present. **[T]** | No tracked test or evaluation dataset. **[S]** |
219
+ | Provider failure | Typed failure and product completion semantics (`PARTIAL`, `FAILED`, etc.). **[S]** | Registry errors are handled inconsistently between analysis paths; no structured partial state. **[S]** |
220
+ | Cost/call controls | Calls occur after selection and evidence preparation; exact occurrence selection prevents ambiguous provider work. **[S]** | No model cost; sequential registry requests are the only external calls. **[S]** |
221
+ | Offline fallback | Local/deterministic stages are usable, but not every research/AI-dependent result can be completed offline. **[S]** | No declared offline mode; registry-dependent analysis loses fresh evidence. **[S]** |
222
+
223
+ AI is not automatically an UpgradeLens advantage. Its demonstrated value is narrower: it turns bounded evidence into structured analysis and handoff content while deterministic validators retain authority. The value is credible because schemas, evidence filtering, failure semantics and qualification exist; whether it improves real upgrade outcomes across providers remains a community/evaluation question. UDD's no-AI design is a genuine simplicity, cost and predictability advantage.
224
+
225
+ ## 10. Source similarity findings
226
+
227
+ The comparison used file-tree inventory, SHA-256 hashing, normalized exact-line matching and bounded string searches. External code was never executed.
228
+
229
+ | Finding | Evidence | Classification | Assessment |
230
+ | --- | --- | --- | --- |
231
+ | Shared tracked paths | Only generic paths overlapped: `.gitignore`, `LICENSE`, `README.md`, `package-lock.json`, `package.json`, `src/index.js`. **[M]** | `STANDARD_TOOLING_PATTERN` | Expected Node/open-source layout; not distinctive structure. |
232
+ | Key file hashes | LICENSE: UL `4576ccb2…`, UDD `0de4e4fa…`; README: `f27c85f2…` vs `c9d11975…`; package: `77c73b2…` vs `0d8c87cb…`; `src/index.js`: `fd048e4c…` vs `69b65f54…`. **[M]** | `NO_MEANINGFUL_OVERLAP` | No exact identity in the key same-named files. |
233
+ | Source exact-line scan | After normalization, import lines excluded and minimum length 40: 15,738 unique UL JavaScript lines vs 161 UDD lines; zero matches. **[M]** | `NO_MEANINGFUL_OVERLAP` | No nontrivial exact source-line match in the bounded scan. |
234
+ | Documentation exact-line scan | Minimum length 40: 8,761 unique UL Markdown lines vs 19 UDD lines; zero matches. **[M]** | `NO_MEANINGFUL_OVERLAP` | No nontrivial exact documentation-line match. |
235
+ | Broader long-line scan | 16 matches: 14 standard MIT-license lines and two package-lock transitive Babel helper entries. **[M]** | `STANDARD_TOOLING_PATTERN` | Common license/tool-generated data, not authored product logic. |
236
+ | Architecture | UL has 124 source files and a staged artifact pipeline; UDD has four source modules and a linear in-memory flow. **[S][M]** | `INDEPENDENT_SIMILAR_IMPLEMENTATION` | Both inspect dependencies/registry data, but sequence, contracts and implementation shape differ. |
237
+ | Domain terms | Both use package/version/upgrade/compatibility/report terminology. **[S]** | `COMMON_DOMAIN_CONCEPT` | Necessary vocabulary for the problem space. |
238
+ | Product name/CLI identity | Both display “UpgradeLens”; UDD uses package/CLI `upgrade-lens`, UL uses `upgradelens`. **[S][M]** | `DOCUMENTATION_WORDING_OVERLAP` | Material positioning/distribution overlap, but not an exact source match. |
239
+ | Project-specific strings | No local exact `UpgradeDepDetective` or `zjp123`; no external `thomasMinh`; no matching project-specific status/reason/schema/prompt/test strings were found. **[M]** | `NO_MEANINGFUL_OVERLAP` | No direct cross-reference or distinctive vocabulary match. |
240
+
241
+ No `STRUCTURAL_SIMILARITY_REQUIRES_REVIEW` or `EXACT_SOURCE_MATCH_REQUIRES_PROVENANCE` finding was identified. The source evidence supports independent implementations in a common domain. It cannot prove that neither author ever saw the other project, and it should not be used to make an authorship accusation.
242
+
243
+ ## 11. Git history timeline
244
+
245
+ | Date | Repository | Event and significance |
246
+ | --- | --- | --- |
247
+ | 2025-04-28 10:24:39 UTC | UDD | [Initial commit `1ce86a9`](https://github.com/zjp123/UpgradeDepDetective-/commit/1ce86a918d2c94318f0c0b29ef61a8fd3adb17c1): already used README product name `UpgradeLens`, package `upgrade-lens@1.0.0` and CLI `upgrade-lens`; no license file in that first commit. **[M][S]** |
248
+ | 2025-04-28 10:32:58 UTC | UDD | MIT license added in [`7f7205a`](https://github.com/zjp123/UpgradeDepDetective-/commit/7f7205a); subsequent npm versions reached 1.0.2 in May. **[M]** |
249
+ | 2025-06-18 08:00:04 UTC | UDD | Default-branch baseline [`d6e5efc`](https://github.com/zjp123/UpgradeDepDetective-/commit/d6e5efcb852ba3848fb14dbdcbd7058b17bb6cde). **[M]** |
250
+ | 2025-06-19 | UDD | Unmerged branch `feature-支持插件` reached `ebdfc2d8…`; it adds a much larger plugin experiment, but is not default-branch or released product evidence. **[M][S]** |
251
+ | 2026-07-13 22:04:43 +07:00 | UL | [Initial commit `961480a`](https://github.com/thomasMinh1995/UpgradeLens/commit/961480a5d944d3ac105cf9a30ecd404f986bc9cc) used README title `Up-Migrade-Lens` and had no package metadata. **[M][S]** |
252
+ | 2026-07-13 22:32:59 +07:00 | UL | [`535615d`](https://github.com/thomasMinh1995/UpgradeLens/commit/535615dee50f8d699b9f9fed2ad84fb73caf9ca9) renamed the product to `UpgradeLens`, introduced `upgradelens@0.1.0` and CLI `upgradelens`. **[M][S]** |
253
+ | 2026-07-13–19 | UL | 61 commits and tags through `v0.5.0` added evidence, baseline, selector, decision, migration, completion, CI and community gates. **[M]** |
254
+ | 2026-07-19 | UL | `v0.5.0` release published; later baseline [`c91fbb0`](https://github.com/thomasMinh1995/UpgradeLens/commit/c91fbb0032b0e2f6209cb4a14aeeb68d9cf0c28d) passed hosted CI. **[M]** |
255
+
256
+ UDD predates UL by about fourteen months and predates UL's rename to UpgradeLens. UL's initial different name followed by a prompt rename is supporting evidence of its own naming evolution, not proof of legal priority or lack of awareness. The radically different feature-introduction order and source topology support independent engineering. Git timestamps alone cannot establish originality.
257
+
258
+ UDD has 15 default-branch commits (16 across inspected remote branches) and two author-name identities. UL has 61 baseline commits and one author-name identity. Email addresses and other private/local identity data are intentionally omitted. **[M]**
259
+
260
+ ## 12. UpgradeLens differentiators
261
+
262
+ | Axis | Classification | Source-backed assessment |
263
+ | --- | --- | --- |
264
+ | A. Decision-first semantics | `STRONG_DIFFERENTIATOR` | Registry availability does not automatically recommend an upgrade; explicit drivers, comparable versions and deterministic states/reasons control the result. **[S][T]** |
265
+ | B. Repository-aware evidence | `STRONG_DIFFERENTIATOR` | Installed lock baseline, occurrence identity, usage coverage and affected areas connect the decision to the actual repository rather than a package name alone. Coverage/ecosystem limits remain explicit. **[S][T]** |
266
+ | C. Trust boundary | `STRONG_DIFFERENTIATOR` | Fail-closed ambiguity/evidence handling, provider failure semantics, evidence filtering, qualification gates and human review limit unsupported confidence. **[S][T]** |
267
+ | D. Coding Agent handoff | `POTENTIAL_DIFFERENTIATOR` | Versioned persisted artifacts and extractive migration actions can reduce repeated research and preserve approval boundaries. The mechanics are implemented; community value and snapshot-drift ergonomics still need field validation. **[S][T][I]** |
268
+ | E. Model/provider independence | `POTENTIAL_DIFFERENTIATOR` | Provider-neutral runtime and deterministic downstream validation reduce provider coupling. Cross-model quality equivalence and cost/value are not yet broadly demonstrated. **[S][T][I]** |
269
+
270
+ The clearest positioning is: **a decision-first, evidence-bounded repository upgrade analysis and handoff tool**, not another “find the latest dependency version” detector. The differentiator is the truthfulness and reuse of the decision artifact, not the presence of AI or the raw number of features.
271
+
272
+ ## 13. UpgradeDepDetective advantages
273
+
274
+ 1. **Immediate distribution:** `npm install -g upgrade-lens` resolves to an existing published package, while UpgradeLens has no npm publication. **[M]**
275
+ 2. **Compact onboarding:** one CLI flow, four source modules and a small option set are easier to understand and try. **[S][I]**
276
+ 3. **Interactive focus:** users can select which dependencies to inspect rather than analyze everything. **[S]**
277
+ 4. **Deterministic peer preflight:** pairwise `peerDependencies` checks and compatible-version recommendations provide useful narrow feedback when registry metadata is available. **[S]**
278
+ 5. **No model dependency:** no provider credentials, inference cost, hallucination surface or cross-model drift. **[S]**
279
+
280
+ These advantages do not make UDD's recommendation safer; they show that simplicity, selection and deterministic compatibility checks can improve the front door of a more evidence-heavy product.
281
+
282
+ ## 14. Lessons to adopt safely
283
+
284
+ | Lesson | External evidence | User value | License-safe implementation approach | Priority |
285
+ | --- | --- | --- | --- | --- |
286
+ | Add a deterministic peer-constraint preflight | UDD checks pairwise peer ranges and offers compatible combinations in `compatibility.js`. **[S]** | Surfaces a common upgrade blocker before model analysis. | Specify a new clean-room contract from npm peer semantics; attach registry provenance, occurrence identity and fail closed on missing data. Do not port rules or wording. | P0 |
287
+ | Offer focused dependency/occurrence selection | UDD interactive mode filters the analyzed dependency set. **[S]** | Faster evaluation and lower provider/network cost. | Extend UL's existing selector with repeatable non-interactive filters and an optional thin interactive wrapper; assert zero provider calls for unselected occurrences. | P1 |
288
+ | Preserve a useful zero-provider path | UDD provides registry/peer output without an LLM. **[S]** | Low-cost first value and clearer explanation of what AI adds. | Compose existing deterministic UL baseline, target, coverage and peer facts into a preflight artifact; do not issue an upgrade recommendation without a valid driver/evidence. | P1 |
289
+ | Simplify first-run summary | UDD's single flow prints a compact console result. **[S]** | Makes the product easier to evaluate before reading all artifacts. | Design a new decision-first terminal summary from UL states: decision, reason, evidence gaps, review step and artifact location. | P1 |
290
+ | Resolve distribution identity before publishing | UDD already owns `upgrade-lens` on npm and uses the same display name. **[M][S]** | Avoids install mistakes and community confusion. | Conduct a brand/registry search, choose retained/renamed/scoped identity, and document the distinction; no reuse of UDD assets or prose. | P0 |
291
+
292
+ ## 15. Approaches not to copy
293
+
294
+ - **Do not treat registry latest as the recommendation driver.** UDD's latest candidate can become `canUpgrade: true` when its limited compatibility checks pass. That conflicts with UL's decision-first contract. **[S]**
295
+ - **Do not infer installed state by stripping syntax from a declaration range.** A declaration such as `^1.2.3` is intent, not proof of the installed occurrence. **[S]**
296
+ - **Do not fail open when package/version evidence is unavailable.** UDD's initialized compatibility result can remain compatible after missing details. UL should retain explicit incomplete evidence. **[S]**
297
+ - **Do not collapse a workspace to one root, name-keyed dependency map.** That loses duplicate occurrences, ownership, lockfile reality and selector stability. **[S]**
298
+ - **Do not report overall success after meaningful fetch or report-write failure.** UDD catches some per-package and report errors without a structured partial completion result; UL's exit/completion contract should remain authoritative. **[S]**
299
+ - **Do not present hard-coded package-pair rules as general compatibility.** Narrow rules can be useful only when provenance, scope and uncovered cases are explicit. **[S]**
300
+
301
+ UDD does not autonomously modify source, use an ungrounded LLM, or couple to a secret provider, so none of those unsupported criticisms are attributed to it.
302
+
303
+ ## 16. Naming/distribution risks
304
+
305
+ The naming risk is more material than the technical-overlap risk:
306
+
307
+ - UDD used **UpgradeLens**, npm package `upgrade-lens`, and CLI `upgrade-lens` from its April 2025 initial commit. UL adopted **UpgradeLens** in July 2026. **[M][S]**
308
+ - `upgrade-lens@1.0.2` is already published. UL's `upgradelens` and `@thomasminh1995/upgradelens` were unclaimed/404 at assessment time, but npm availability can change and a distinct spelling does not eliminate human confusion. **[M]**
309
+ - Publishing `upgradelens` could still cause users to install the hyphenated package by habit; a scoped package reduces registry collision but not display-name, search or CLI confusion.
310
+ - Both projects appear in the same domain, making README and GitHub search differentiation especially important.
311
+ - The external repository's generic MIT copyright name is a provenance signal to review before any reuse, but it is not evidence that UL infringes its source or name.
312
+
313
+ **Recommendation:** make a P0 brand/distribution decision before npm publication or wider public-preview promotion. Options should include retaining the repository name with a clearly distinct subtitle and scoped CLI/package identity, or renaming after a proper brand/legal search. If the name is retained, lead the README with “decision-first, evidence-bounded repository upgrade analysis,” state that latest availability is not a recommendation, and avoid ambiguous `upgrade-lens` install instructions. This task does not change any package or product name.
314
+
315
+ ## 17. Community feedback questions
316
+
317
+ 1. After reading one report, can you clearly distinguish “a newer version exists” from “the repository should upgrade now,” and is the decision driver understandable?
318
+ 2. In a monorepo or duplicate-dependency case, does occurrence-level installed-baseline and selector evidence change your decision compared with a package-level latest/peer detector?
319
+ 3. Are `INVESTIGATE` and `INSUFFICIENT_EVIDENCE` calibrated helpfully, or do they block cases where the available evidence is sufficient?
320
+ 4. Do persisted evidence and migration-handoff artifacts reduce re-research for maintainers or coding agents, and which fields are actually reused?
321
+ 5. Do coverage limitations and exit codes (`0`, `2`, `1`, `130`) make CI safer and actionable, or add complexity without changing what you do next?
322
+
323
+ The public evaluation should recruit maintainers with workspaces, duplicated dependency occurrences and incomplete source coverage—not only single-package happy paths—so the comparison tests UL's actual differentiator.
324
+
325
+ ## 18. Prioritized roadmap, maximum 5 tasks
326
+
327
+ | Priority / ID | Problem | Why it matters after comparison | Bounded implementation scope | Acceptance evidence | Expected product outcome | Dependency |
328
+ | --- | --- | --- | --- | --- | --- | --- |
329
+ | P0 — `DIFF-01 Brand and distribution identity decision` | Exact display-name and near package/CLI collision can confuse users. | UDD predates UL and owns `upgrade-lens` on npm. | Document registry/brand search; choose retain/rename/scoped identity; define README subtitle and install identity. No package change until approved. | Recorded decision, collision table, reviewed README/package migration plan and zero ambiguous install command. | Community can identify and install the intended product. | Maintainer decision; brand/legal review as appropriate. |
330
+ | P0 — `DQ-01 Provenance-bound peer constraint evidence` | UL lacks a compact deterministic peer preflight comparable to UDD's strongest technical feature. | Adds useful evidence without weakening driver policy. | Parse target/installed occurrence peer constraints for npm only; persist sources and unknown states; never emit “safe” on missing data. | Fixtures for compatible, conflict, missing packument, duplicate occurrence and workspace owner; decision remains policy-controlled. | Faster, more precise risk triage before AI. | Installed baseline, target selector, registry provenance. |
331
+ | P1 — `UX-01 Zero-provider decision preflight` | First value currently depends on a larger workflow. | UDD demonstrates the appeal of deterministic/no-model use. | Compose existing baseline, target availability, coverage and peer facts into one versioned preflight artifact/summary; no recommendation without a driver. | Offline/no-provider fixtures, stable schema, zero AI calls, explicit limitation reasons. | Lower-cost trial and clearer evidence of AI's incremental value. | `DQ-01`; existing completion semantics. |
332
+ | P1 — `UX-02 Focused occurrence selection` | Analyzing all dependencies can waste attention and calls. | UDD's interactive selection is simple and useful; UL can make it occurrence-safe. | Add repeatable package/occurrence focus filters and optional interaction around the existing selector; preserve non-interactive CI behavior. | Duplicate/stale selection tests; unselected targets cause zero registry/provider calls; deterministic capture. | Faster UX without losing monorepo identity. | Existing target selector. |
333
+ | P1 — `EVAL-01 Public decision-calibration fixtures` | Product differentiation is source-proven but community value is not yet field-proven. | Must show that evidence/coverage/driver semantics improve decisions over latest-based detection. | Publish anonymized fixtures for the ten cases in section 8 and collect structured feedback on clarity, actionability and false confidence. | Reproducible artifacts, decision rationale, reviewer rubric and issue template; no model training. | Evidence for preview positioning and next roadmap choices. | Stable naming/positioning from `DIFF-01`. |
334
+
335
+ ## 19. Evidence limitations
336
+
337
+ - This is a source and metadata assessment at two exact SHAs, not a runtime benchmark.
338
+ - External code was not installed, built, tested or executed. Runtime behavior is inferred directly from control flow and package metadata; environment-specific behavior is therefore `UNVERIFIED`.
339
+ - GitHub and npm metadata were observed on 2026-07-19 and may change after the assessment.
340
+ - The external feature branch `feature-支持插件` was inspected only as history context. It is unmerged, unreleased and excluded from the product baseline.
341
+ - Absence of public issues/PRs, workflows or tests at the snapshot does not prove they never existed privately or elsewhere.
342
+ - Hash and normalized-line scans detect exact overlap, not every possible paraphrase, algorithmic influence or common upstream.
343
+ - Commit order supports chronology but cannot prove awareness, independent invention, ownership, trademark rights or copying.
344
+ - UL's passing tests/CI prove its declared contracts at the baseline, not real-world correctness for every monorepo, ecosystem, provider or dependency.
345
+ - No credentials, local absolute paths, external full-source copies or private data are included.
346
+
347
+ ## 20. Exact files created
348
+
349
+ This investigation created exactly one repository file:
350
+
351
+ ```text
352
+ docs/reviews/upgradelens-vs-upgradedepdetective-source-comparison.md
353
+ ```
354
+
355
+ No production source, package metadata, workflow, test, historical commit, remote, tag, release or external repository was changed. No external code was copied or executed.