@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,450 @@
1
+ # DIFF-01 — Brand and Distribution Identity Decision
2
+
3
+ Decision date: 2026-07-19
4
+
5
+ Status: Accepted for implementation planning; no identity has been changed, registered, reserved, or published.
6
+
7
+ Evidence labels:
8
+
9
+ - **[S]** committed source or package metadata at the stated SHA.
10
+ - **[H]** Git/tag history.
11
+ - **[M]** live GitHub, npm, package-registry, search, or RDAP metadata.
12
+ - **[D]** documentation.
13
+ - **[C]** maintainer-provided context that this read-only task did not reproduce.
14
+ - **[I]** bounded inference from cited evidence.
15
+
16
+ ## 1. Executive decision
17
+
18
+ **Decision verdict: `FULL_REBRAND_BEFORE_PUBLIC_PREVIEW`**
19
+
20
+ **Public-preview gate: `PROCEED_TO_IDENTITY_IMPLEMENTATION`**
21
+
22
+ The selected implementation identity is:
23
+
24
+ | Layer | Decision |
25
+ | --- | --- |
26
+ | Product/brand | **DepVerdict** |
27
+ | GitHub repository | `thomasMinh1995/DepVerdict` |
28
+ | npm package | `@thomasminh1995/depverdict` |
29
+ | Primary CLI | `depverdict` |
30
+ | Temporary CLI compatibility | `upgradelens` alias for one preview release, with a deprecation notice |
31
+ | First rebranded version | `0.6.0-alpha.1` |
32
+ | npm dist-tag | `preview`, never `latest` for the Technical Preview |
33
+
34
+ The identity is selected because it states the strongest source-proven product difference—a repository-level dependency decision—without implying automatic migration or guaranteed safety. It removes the exact **UpgradeLens** product-name overlap, the near-identical npm/CLI identity, and the failed unscoped-package path while adoption is still limited.
35
+
36
+ The decision does **not** constitute trademark clearance. `DepVerdict` was `LIKELY_AVAILABLE` in the bounded checks in section 9, but availability must be rechecked and a maintainer/legal risk review must occur immediately before any public rename or publication. If that checkpoint uncovers a material conflict, implementation must stop and return to DIFF-01 rather than silently choosing another name.
37
+
38
+ ## 2. Context and collision facts
39
+
40
+ UpgradeLens and UpgradeDepDetective are technically differentiated but operate in the same dependency-upgrade domain. The external project displayed **UpgradeLens** and used npm package/CLI `upgrade-lens` from its first commit in April 2025, before the local repository was created in July 2026. **[H][S]** ([external initial commit](https://github.com/zjp123/UpgradeDepDetective-/commit/1ce86a918d2c94318f0c0b29ef61a8fd3adb17c1), [external package metadata](https://github.com/zjp123/UpgradeDepDetective-/blob/d6e5efcb852ba3848fb14dbdcbd7058b17bb6cde/package.json))
41
+
42
+ The local product's current distinctions remain valid:
43
+
44
+ - decision-first policy: registry availability is not a recommendation;
45
+ - exact dependency-occurrence identity and installed/declared/target separation;
46
+ - coverage-aware repository impact;
47
+ - fail-closed evidence and provider boundaries;
48
+ - evidence-bounded Migration Checklist and persisted Coding Agent handoff;
49
+ - explicit human review.
50
+
51
+ Those capabilities support a different product promise, but technical differentiation does not remove brand confusion. A user searching “UpgradeLens dependency upgrade” or typing an install command can reasonably encounter the older package first.
52
+
53
+ The maintainer reports that npm rejected `upgradelens@0.5.0` with `403 Forbidden` because its name was too similar to `upgrade-lens`, and suggested a scoped identity. **[C]** This review did not repeat a publish request because DIFF-01 prohibits registry mutation. Live registry checks confirmed that the conflicting package still exists and that the local unscoped/scoped names were not registered at the check time. **[M]**
54
+
55
+ A scoped package would resolve the immediate unscoped-name feasibility problem, but it would not resolve:
56
+
57
+ - the exact product display-name collision;
58
+ - search/discoverability ambiguity;
59
+ - support questions involving two similarly named tools in the same domain;
60
+ - users confusing `upgradelens` with `upgrade-lens`;
61
+ - long-term cost if a rebrand occurs after adoption.
62
+
63
+ ## 3. Immutable repository/npm snapshots
64
+
65
+ ### Local repository and release
66
+
67
+ Checked 2026-07-19T07:34:28Z–07:42:00Z against Git, the [GitHub repository API](https://api.github.com/repos/thomasMinh1995/UpgradeLens), [GitHub release API](https://api.github.com/repos/thomasMinh1995/UpgradeLens/releases/tags/v0.5.0), and read-only remote refs:
68
+
69
+ | Fact | Immutable/current result | Limitation |
70
+ | --- | --- | --- |
71
+ | Repository | `https://github.com/thomasMinh1995/UpgradeLens`, public, unarchived, default `main`, MIT **[M]** | GitHub state can change after the check. |
72
+ | Local/remote `main` | `c91fbb0032b0e2f6209cb4a14aeeb68d9cf0c28d`; local and `refs/heads/main` matched **[H][M]** | Untracked working-tree files were excluded. |
73
+ | Package | `upgradelens@0.5.0`; bin `upgradelens`; ESM export `"." → "./src/index.js"` **[S]** ([package.json](https://github.com/thomasMinh1995/UpgradeLens/blob/c91fbb0032b0e2f6209cb4a14aeeb68d9cf0c28d/package.json)) | This is committed metadata, not npm publication. |
74
+ | Public tag | Annotated tag object `4750606ca85f990ee69d60ab4673caca5fbfb89b`, peeled commit `74d57344db254d0109ea951dc7c44853cdad9be0`; local and remote refs matched **[H][M]** | The tag must be treated as immutable public history. |
75
+ | GitHub Release | [`v0.5.0`](https://github.com/thomasMinh1995/UpgradeLens/releases/tag/v0.5.0), published 2026-07-19T02:56:50Z, not draft and not marked prerelease **[M]** | Public release state is stronger than a local-only tag. |
76
+ | Tag versus main | `main` is seven commits after the tagged commit **[H]** | The later readiness/community changes are not part of `v0.5.0`. |
77
+ | npm `upgradelens` | HTTP 404 at `https://registry.npmjs.org/upgradelens` **[M]** | 404 is not a reservation and does not guarantee publish acceptance. |
78
+ | npm scoped candidate | HTTP 404 at `https://registry.npmjs.org/@thomasminh1995%2Fupgradelens` **[M]** | Scope authorization was not tested; no publish was attempted. |
79
+
80
+ ### External repository and package
81
+
82
+ Checked 2026-07-19T07:34:28Z–07:41:38Z against the [external GitHub API](https://api.github.com/repos/zjp123/UpgradeDepDetective-), exact raw files and [npm registry metadata](https://registry.npmjs.org/upgrade-lens):
83
+
84
+ | Fact | Result | Limitation |
85
+ | --- | --- | --- |
86
+ | Repository | `zjp123/UpgradeDepDetective-`, public, unarchived, default `main`, MIT; created 2025-04-28T08:02:39Z **[M]** | Repository metadata can change. |
87
+ | First/default-head commits | First `1ce86a918d2c94318f0c0b29ef61a8fd3adb17c1` at 2025-04-28T10:24:39Z; current default head `d6e5efcb852ba3848fb14dbdcbd7058b17bb6cde` at 2025-06-18T08:00:04Z **[H][M]** | Commit dates support chronology, not trademark ownership. |
88
+ | Product display | README title begins `UpgradeLens`; package and CLI are `upgrade-lens` **[S]** ([README](https://github.com/zjp123/UpgradeDepDetective-/blob/d6e5efcb852ba3848fb14dbdcbd7058b17bb6cde/README.md)) | Display-name use does not establish legal rights. |
89
+ | npm package | `upgrade-lens@1.0.2`, `latest`; created 2025-04-28, last published 2025-05-09; npm maintainer identity `zjpctt` **[M]** | No conclusion about why publication stopped. |
90
+ | Installability | Latest tarball endpoint returned HTTP 200; CLI is `upgrade-lens` **[M]** | Read-only availability was checked; package code was not installed or executed. |
91
+ | Activity assessment | No default-branch source commit since June 2025 and no npm release since May 2025, while repository metadata was updated in May 2026 **[M]** | Supports “low recent release activity,” not “abandoned” and not name squatting. |
92
+ | License | MIT, with a 2023 product-name copyright notice **[S]** ([LICENSE](https://github.com/zjp123/UpgradeDepDetective-/blob/d6e5efcb852ba3848fb14dbdcbd7058b17bb6cde/LICENSE)) | License permits code use with notice; it does not clear brand rights. |
93
+
94
+ General web search for “UpgradeLens” was noisy and surfaced unrelated AWS “upgrade lens” operations and another upgrade-assessment product in addition to lens-related results. npm's broad `upgrade lens` search also produced a noisy result set. **[M]** Search ranking is volatile, but this reinforces that a scoped spelling alone would not create a distinctive public identity.
95
+
96
+ ## 4. Current identity inventory
97
+
98
+ The source of truth is committed SHA [`c91fbb0`](https://github.com/thomasMinh1995/UpgradeLens/commit/c91fbb0032b0e2f6209cb4a14aeeb68d9cf0c28d), not untracked captures or reports.
99
+
100
+ | Layer | Current identity | Source of truth | Publicly exposed | Compatibility classification |
101
+ | --- | --- | --- | --- | --- |
102
+ | Repository owner/name | `thomasMinh1995/UpgradeLens` | GitHub + package metadata | Yes | `PUBLIC_PREVIEW_CONTRACT`; `MUST_CHANGE_WITH_BRAND` |
103
+ | Product name | `UpgradeLens` | `src/constants.js`, README | Yes | `PUBLIC_PREVIEW_CONTRACT`; `MUST_CHANGE_WITH_BRAND` |
104
+ | Package name | `upgradelens` | `package.json`, lockfile | Yes in source/release, not npm | `PUBLIC_PREVIEW_CONTRACT`; `MUST_CHANGE_WITH_BRAND` |
105
+ | Package version | `0.5.0` | package + lockfile | Yes | Current metadata is `PUBLIC_PREVIEW_CONTRACT`; tagged `0.5.0` is `HISTORICAL_RECORD` |
106
+ | Bin command | `upgradelens` → `./bin/upgradelens.js` | `package.json` | Yes | `PUBLIC_PREVIEW_CONTRACT`; `CAN_RETAIN_AS_LEGACY_ALIAS` |
107
+ | Package exports | `"."` → `./src/index.js` | `package.json` | Yes | Export path `SHOULD_NOT_CHANGE`; import package specifier `MUST_CHANGE_WITH_BRAND` |
108
+ | README title/value | UpgradeLens; “decision-first CLI for evidence-bounded dependency upgrade analysis” | `README.md` | Yes | Name `MUST_CHANGE_WITH_BRAND`; value proposition `SHOULD_NOT_CHANGE` |
109
+ | Output directory | `.upgradelens/` | `src/constants.js` | Yes | `PUBLIC_PREVIEW_CONTRACT`; `CAN_RETAIN_AS_LEGACY_ALIAS` |
110
+ | Artifact filenames | `project-manifest.json`, `knowledge-manifest.json`, `version-analysis.json`, `usage-index.json`, `repository-impact*.json/md`, `upgrade-decision.json`, `migration-checklist.json`, qualification/governance artifacts | `src/constants.js`, README | Yes | Semantic names `SHOULD_NOT_CHANGE` |
111
+ | Schema IDs | Mostly raw GitHub URLs under `thomasMinh1995/UpgradeLens`; three use `upgradelens.dev` | 22 files under `schemas/` | Yes | Existing IDs/versions are `PUBLIC_STABLE_CONTRACT` and later `HISTORICAL_RECORD`; do not mutate in place |
112
+ | Schema generator identity | Several schemas require generator name `UpgradeLens` | output schemas | Yes in artifacts | Existing versions `PUBLIC_STABLE_CONTRACT`; new branded versions `MUST_CHANGE_WITH_BRAND` |
113
+ | Environment prefix | `UPGRADELENS_*` provider/model/endpoint/auth/timeout/debug/governance settings | CLI, workflow, README | Yes | `PUBLIC_PREVIEW_CONTRACT`; `CAN_RETAIN_AS_LEGACY_ALIAS` |
114
+ | Task IDs | `version-analysis.v1`, `migration-planning.v1`, `migration-planning.v2` | analysis/prompt/evaluation source | Yes in runtime artifacts | `PUBLIC_STABLE_CONTRACT`; `SHOULD_NOT_CHANGE` because they identify semantics, not brand |
115
+ | Provider schema name | `upgradelens_version_analysis` | `src/ai-version-analysis.js` | Sent to providers | `INTERNAL_IDENTIFIER` with external observability; change only with prompt/schema identity and requalification |
116
+ | Prompt/policy IDs | Prompt versions, upgrade policy `1.1.0`, migration qualification policies | analysis/evaluation source | Yes in artifacts/qualification | `PUBLIC_STABLE_CONTRACT`; semantic IDs `SHOULD_NOT_CHANGE` absent a contract change |
117
+ | Qualification identities | Digests bind task, provider/model, dataset, prompt, schema and policy | governance/migration qualification | Yes in records | Existing records `HISTORICAL_RECORD`; never rename/rewrite; requalification creates new IDs |
118
+ | Public exports | 438 package-smoke-checked exports | `src/index.js` + package smoke | Yes | Symbol names mostly `SHOULD_NOT_CHANGE`; package specifier changes |
119
+ | Workflow/badge URLs | GitHub Actions/repository URLs | `.github`, package/docs | Yes | `MUST_CHANGE_WITH_BRAND` after repository cutover |
120
+ | Issue/security links | GitHub issues and private vulnerability reporting under current repository | package, SECURITY, issue templates | Yes | `MUST_CHANGE_WITH_BRAND`, but old route must keep redirect/continuity |
121
+ | Conduct email | `upgradelens.conduct@gmail.com` | `CODE_OF_CONDUCT.md` | Yes | `PUBLIC_PREVIEW_CONTRACT`; `CAN_RETAIN_AS_LEGACY_ALIAS` until a verified replacement exists |
122
+ | Install examples | `npm install -g upgradelens` and `upgradelens@preview` | README/release notes | Yes, currently non-resolving | `MUST_CHANGE_WITH_BRAND` |
123
+ | Source import examples | `from 'upgradelens'` | README/docs | Yes | `MUST_CHANGE_WITH_BRAND` |
124
+ | Tags/releases | `v0.1.1`–`v0.5.0`; public `v0.5.0` release | Git refs/GitHub | Yes | `HISTORICAL_RECORD`; `SHOULD_NOT_CHANGE` |
125
+
126
+ ## 5. Competitor/naming evidence
127
+
128
+ The collision is a naming/distribution issue, not a source-provenance issue:
129
+
130
+ - The external first commit predates the local repository and already used the exact product name and hyphenated package/CLI identity. **[H][S]**
131
+ - `upgrade-lens@1.0.2` remains present and its tarball remains retrievable. **[M]**
132
+ - Local `upgradelens` differs as an executable string from `upgrade-lens`, so POSIX and Windows shims can technically coexist. Human memory, documentation and install-command confusion remain material. **[I]**
133
+ - A scoped package such as `@thomasminh1995/upgradelens` provides publisher clarity but still displays the same product and near-identical command.
134
+ - Search-engine results for the two-word phrase are noisy beyond these two repositories, reducing the value of keeping a generic “Upgrade + Lens” construction. **[M]**
135
+
136
+ No evidence supports an accusation of copying, name squatting, or malicious conduct. npm package ownership is not trademark ownership, and earlier use is chronology—not a legal conclusion.
137
+
138
+ ## 6. License/trademark caveat
139
+
140
+ Both repositories use MIT for source. Reading, referencing and clean-room implementation are allowed at a high level; copying substantial external source would require retaining the license/copyright notice. This decision neither copies code nor relies on external brand assets.
141
+
142
+ MIT does not grant trademark clearance. The candidate checks in section 9 are risk signals only:
143
+
144
+ - registry 404 does not reserve a name;
145
+ - GitHub exact-name absence does not establish exclusivity;
146
+ - web search cannot find unindexed/private/local uses reliably;
147
+ - RDAP 404 is not a domain reservation guarantee;
148
+ - no automated search substitutes for qualified legal review.
149
+
150
+ Therefore the decision is an architecture/product choice with a mandatory pre-mutation human checkpoint, not a legal opinion.
151
+
152
+ ## 7. Options evaluated
153
+
154
+ ### Option A — Keep UpgradeLens, scoped npm identity
155
+
156
+ ```text
157
+ Product: UpgradeLens
158
+ Repository: UpgradeLens
159
+ npm: @thomasminh1995/upgradelens
160
+ CLI: upgradelens
161
+ ```
162
+
163
+ This is likely npm-feasible and has the lowest short-term cost. The scoped install command clarifies publisher ownership and avoids the observed unscoped similarity rejection. It does not solve exact product-name overlap, search confusion, support burden, or eventual rebrand cost. Globally installed `upgradelens` and `upgrade-lens` can coexist technically, but are easy to confuse in prose and memory.
164
+
165
+ ### Option B — Keep product, distinct distribution identity
166
+
167
+ ```text
168
+ Product: UpgradeLens
169
+ Repository: UpgradeLens
170
+ npm: @thomasminh1995/<distinct-name>
171
+ CLI: <distinct-command>
172
+ ```
173
+
174
+ This removes package/CLI collision and is feasible without changing artifact identity. It produces an identity split: the product, repository, package and command no longer reinforce each other, while the exact same-domain display name remains. Support and search ambiguity persist, so this is an incomplete resolution.
175
+
176
+ ### Option C — Full rebrand before public preview
177
+
178
+ ```text
179
+ Product: DepVerdict
180
+ Repository: DepVerdict
181
+ npm: @thomasminh1995/depverdict
182
+ CLI: depverdict
183
+ ```
184
+
185
+ This has the highest bounded implementation cost, but Technical Preview is the cheapest responsible time to absorb it. It creates one memorable identity across product/repository/package/CLI, directly communicates decision-first semantics, and avoids “automatic updater” or “guaranteed safe” claims.
186
+
187
+ ### Option D — Delay npm, GitHub-only preview
188
+
189
+ This avoids immediate migration work and is an acceptable short emergency fallback if the selected candidate becomes unavailable. It leaves the collision unresolved, keeps broken/non-resolving npm instructions visible unless docs change, and makes future migration more expensive. It is not an indefinite strategy.
190
+
191
+ ## 8. Scoring criteria and matrix
192
+
193
+ Scores range from 1 (poor) to 5 (strong). For cost criteria, 5 means lower cost. Weights were consolidated to keep the decision matrix auditable:
194
+
195
+ | Criterion | Weight | Interpretation |
196
+ | --- | ---: | --- |
197
+ | Distinctiveness | 25% | Searchability, name differentiation and domain/social signal |
198
+ | Distribution | 15% | npm feasibility and ownership clarity |
199
+ | CLI risk | 10% | Executable collision, memorability and install clarity |
200
+ | Positioning | 20% | Product meaning plus contributor/user clarity |
201
+ | Short-term cost | 10% | Bounded migration effort now |
202
+ | Long-term cost | 15% | Future migration/support burden |
203
+ | Legal uncertainty | 5% | Lower apparent conflict scores higher; never equals clearance |
204
+
205
+ | Option | Distinctiveness | Distribution | CLI risk | Positioning | Short-term cost | Long-term cost | Legal uncertainty | Weighted score |
206
+ | --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: |
207
+ | A — Keep brand/scoped package | 2 | 5 | 4 | 3 | 5 | 2 | 2 | **3.15** |
208
+ | B — Keep brand/distinct package+CLI | 3 | 5 | 5 | 3 | 4 | 3 | 2 | **3.55** |
209
+ | C — Full rebrand | 5 | 5 | 5 | 5 | 2 | 5 | 3 | **4.60** |
210
+ | D — GitHub-only delay | 2 | 1 | 3 | 2 | 5 | 1 | 2 | **2.10** |
211
+
212
+ The score is a decision aid. Option C wins because it removes the same-domain brand ambiguity and minimizes long-term migration cost—not because it has the least work.
213
+
214
+ ## 9. Candidate research and availability
215
+
216
+ ### Longlist
217
+
218
+ Eight candidates were generated from decision, evidence, readiness and reviewed-handoff concepts:
219
+
220
+ | Candidate | Intended signal | Bounded result | Classification |
221
+ | --- | --- | --- | --- |
222
+ | **DepVerdict** | Explicit dependency decision | No exact npm/scoped/GitHub-name result; no notable general-web result | `LIKELY_AVAILABLE` |
223
+ | **UpgradeLedger** | Persisted evidence/history | No exact registry/repo result, but web/code uses overlap with Ledger/upgrade terminology | `HIGH_CONFUSION_RISK` |
224
+ | **MigrationBrief** | Reviewed handoff summary | Active unrelated “Americas Migration Brief” identity/domain exists | `OCCUPIED` |
225
+ | **VersionVerdict** | Version decision | Existing public code type and generic version-security usage | `HIGH_CONFUSION_RISK` |
226
+ | **DependencyCompass** | Evidence-guided direction | No exact npm/scoped/GitHub-name result; some optional checks incomplete | `AVAILABILITY_UNVERIFIED` |
227
+ | **UpgradeDossier** | Evidence bundle/report | No exact npm/scoped/GitHub-name result; only unrelated phrase-level web hits | `LIKELY_AVAILABLE` |
228
+ | **RepoReadiness** | Repository readiness | Existing repositories and an active dev-tool/community concept use this phrase | `HIGH_CONFUSION_RISK` |
229
+ | **ChangeHandoff** | Human-reviewed agent handoff | No exact registry/repo result, but phrase is generic across operational/health handoffs | `HIGH_CONFUSION_RISK` |
230
+
231
+ All eight exact npm unscoped and `@thomasminh1995/` endpoints returned 404 at 2026-07-19T07:37:45Z. Exact owner/repository URLs also returned 404. GitHub repository-name search returned zero results for six candidates and two `RepoReadiness` repositories. **[M]** Sources: `https://registry.npmjs.org/<candidate>`, encoded scoped registry paths, `https://api.github.com/repos/thomasMinh1995/<candidate>`, and GitHub repository search. These are point-in-time signals only.
232
+
233
+ ### Shortlist
234
+
235
+ | Candidate | Product-positioning fit | Package/CLI plan | Additional checks at 2026-07-19T07:38:46Z | Assessment |
236
+ | --- | --- | --- | --- | --- |
237
+ | **DepVerdict** | “DepVerdict is a decision-first CLI for evidence-bounded dependency upgrade analysis.” Clear, ecosystem-neutral and agent-handoff compatible. “Verdict” must retain `INVESTIGATE`/insufficient-data semantics to avoid overconfidence. | `@thomasminh1995/depverdict`; `depverdict` | npm/PyPI 404; exact GitHub/CLI-name search zero; RDAP returned no record (404) for `.com/.dev/.io/.app` | **Selected; `LIKELY_AVAILABLE`** |
238
+ | **UpgradeDossier** | Strong evidence/report connotation, but weaker on decision and planning; command is long. | `@thomasminh1995/upgradedossier`; `upgradedossier` | npm/PyPI 404; exact GitHub/CLI search zero; RDAP 404 for four checked TLDs | Runner-up; `LIKELY_AVAILABLE` |
239
+ | **DependencyCompass** | Honest guidance metaphor and multi-ecosystem fit, but more generic and less decision-first. | `@thomasminh1995/dependencycompass`; `depcompass` | npm/PyPI 404; exact GitHub/CLI search zero; `.com/.dev` RDAP 404, `.io/.app` throttled | Runner-up; `AVAILABILITY_UNVERIFIED` |
240
+
241
+ Crates.io returned HTTP 403 for all three, so Rust-package availability is `AVAILABILITY_UNVERIFIED`, not available. Unauthenticated GitHub code search returned 401 at 2026-07-19T07:39:21Z; general web and repository-name searches were used as bounded substitutes. Basic exact-name + trademark web queries found no reliable exact software-mark result for the shortlist, but that is not database clearance. A qualified review remains recommended for all candidates.
242
+
243
+ No candidate, package, repository, domain or handle was registered or reserved.
244
+
245
+ ## 10. Product/CLI/package/repository decision
246
+
247
+ ### Product
248
+
249
+ Adopt **DepVerdict**. Preserve the positioning:
250
+
251
+ > DepVerdict is a decision-first CLI for evidence-bounded dependency upgrade analysis.
252
+
253
+ The README must immediately explain that a verdict can be `INVESTIGATE`, `INSUFFICIENT_EVIDENCE`, or `NOT_ANALYZED`; the name does not promise that every dependency has a safe yes/no answer.
254
+
255
+ ### Repository
256
+
257
+ Rename the existing repository to `thomasMinh1995/DepVerdict` during an explicitly authorized implementation cutover. Do not create a second repository or rewrite history. GitHub normally provides redirects after a rename, but implementation must verify clone, web, Actions, issue, advisory, release and raw-content behavior rather than assume all consumers follow redirects.
258
+
259
+ Future manual cutover steps:
260
+
261
+ 1. Merge and qualify the identity migration on the existing repository.
262
+ 2. Recheck `DepVerdict` availability and complete the human/legal risk checkpoint.
263
+ 3. With explicit authorization, rename the repository in GitHub settings.
264
+ 4. Update package `repository/homepage/bugs`, badges, workflow links, issue/security links and contributor clone instructions to the new URL.
265
+ 5. Tell existing contributors to run `git remote set-url origin https://github.com/thomasMinh1995/DepVerdict.git`; verify forks, Actions, releases and private vulnerability reporting.
266
+
267
+ Historical commit messages, reports, release notes and tag contents must not be rewritten.
268
+
269
+ ### npm package
270
+
271
+ Use the public scoped package:
272
+
273
+ ```text
274
+ @thomasminh1995/depverdict
275
+ ```
276
+
277
+ The personal scope makes ownership explicit and avoids dependence on unscoped-name acceptance. It creates a future organization-migration cost, but an organization should not be created until there is a real maintenance need.
278
+
279
+ The future, separately authorized publication form is:
280
+
281
+ ```bash
282
+ npm publish --access public --tag preview
283
+ ```
284
+
285
+ Do not publish with `latest` during Technical Preview. Do not attempt to deprecate, alias, or modify the external `upgrade-lens` package. There is no published local `upgradelens` package to deprecate.
286
+
287
+ ### CLI
288
+
289
+ Use `depverdict` as the primary executable. It is short, memorable and aligned with the brand. Provide `upgradelens` as a compatibility bin alias for one preview release only, with a stderr deprecation notice that does not affect machine-readable stdout. Remove the alias only in a pre-announced later prerelease/minor gate.
290
+
291
+ The failed publish reportedly emitted a bin-normalization warning. That does **not** prove the current mapping is broken. Before changing bin behavior, reproduce package packing and clean installation on supported Node/npm versions, including POSIX and Windows command shims.
292
+
293
+ ## 11. Artifact/schema/env compatibility decision
294
+
295
+ The rebrand must not become an unsafe global text replacement.
296
+
297
+ | Identity | Rename now | Keep | Alias/deprecate | Migration note |
298
+ | --- | --- | --- | --- | --- |
299
+ | Product display | Yes → `DepVerdict` | Historical prose/releases | No current-name branding in new docs | Do not rewrite old reports/releases |
300
+ | Repository slug/URLs | Yes at authorized cutover | Old Git history/tags | Rely on verified GitHub redirect only as transition | Update metadata and security routes |
301
+ | npm package/import specifier | Yes → `@thomasminh1995/depverdict` | No unpublished npm artifact to preserve | No npm alias required | Source-checkout users update imports |
302
+ | CLI | Yes → `depverdict` | — | `upgradelens` one preview release | New CLI is authoritative |
303
+ | Default output root | Yes → `.depverdict/` | Read existing `.upgradelens/` | Legacy read/fallback for one preview line | Never rewrite historical artifacts in place |
304
+ | Artifact filenames | No | All semantic filenames | None | `project-manifest.json`, `upgrade-decision.json`, etc. remain stable |
305
+ | Existing schema IDs/versions | No in-place mutation | Frozen v0.5 contracts | Validators retain legacy read support | New brand-bearing output contracts receive new IDs/versions |
306
+ | Generator name/schema title | Yes only in new schema versions | `UpgradeLens` in frozen historical schemas | Dual-version validation | Changing a `const` requires a schema version change |
307
+ | Environment prefix | Yes → `DEPVERDICT_*` | — | Accept `UPGRADELENS_*` for one preview line; new prefix wins conflicts with warning | Never echo authorization values |
308
+ | Public export symbols | No semantic rename by default | Existing JavaScript symbol names | None unless a symbol embeds the old brand | Package specifier changes, export path remains `"."` |
309
+ | Task IDs | No | `version-analysis.v1`, `migration-planning.v1/v2` | None | They identify semantics, not product spelling |
310
+ | Reason/status codes | No | Existing policy and completion codes | None | Preserve replay and test compatibility |
311
+ | Provider schema name | Yes with next prompt/schema version | Old qualified identity | Legacy validator/provider fixtures | `upgradelens_version_analysis` cannot be silently renamed under the same qualification |
312
+ | Qualification records/IDs | Never rewrite | Existing records are historical | No alias for hashes | Generate new records after requalification |
313
+ | Conduct contact | After verified replacement exists | Keep old inbox operational during transition | Publish a transition window | Security/conduct reporting must never lose a private route |
314
+ | Documentation paths | Current docs change | Historical decision/review/release paths remain | Link a migration note | Avoid mechanical global replacement |
315
+
316
+ This creates one intentional compatibility break—the new default artifact root—while preserving semantic filenames, task IDs, reason codes and historical schemas. The legacy root fallback prevents existing GitHub/source users from losing evidence during the preview transition.
317
+
318
+ ## 12. Version/tag strategy
319
+
320
+ Public `v0.5.0` must remain untouched:
321
+
322
+ - annotated remote tag object: `4750606ca85f990ee69d60ab4673caca5fbfb89b`;
323
+ - tagged commit: `74d57344db254d0109ea951dc7c44853cdad9be0`;
324
+ - published GitHub Release: 2026-07-19T02:56:50Z;
325
+ - current `main`: `c91fbb0032b0e2f6209cb4a14aeeb68d9cf0c28d`, seven commits later.
326
+
327
+ Do not delete, recreate, force-move, or retitle the historical tag as though it contained later readiness work.
328
+
329
+ Use **`0.6.0-alpha.1`** for the first rebranded snapshot:
330
+
331
+ - the product/package/CLI/default-output identities change;
332
+ - brand-bearing schema/provider identities require new versions and qualification;
333
+ - minor-version continuity preserves repository history better than restarting at `0.1.0`;
334
+ - `alpha.1` and npm `preview` communicate that requalification and migration feedback are still required.
335
+
336
+ After implementation:
337
+
338
+ 1. run full package, schema, legacy-read and provider/migration requalification;
339
+ 2. create a new immutable `v0.6.0-alpha.1` tag only from the qualified commit;
340
+ 3. create a GitHub prerelease explaining “DepVerdict, formerly UpgradeLens”;
341
+ 4. publish the scoped package only through a separately authorized gate and only under `preview`.
342
+
343
+ Strategy “0.5.1 patch” is rejected because the chosen identity/default-path/schema transition is broader than a patch. Reusing or moving `v0.5.0` is rejected because it is public history.
344
+
345
+ ## 13. Migration cost inventory
346
+
347
+ Counts below use case-sensitive exact matches in the 463-file committed tree at `c91fbb0`. They exclude all untracked RR02 captures and the untracked comparison report. Categories overlap and must not be summed.
348
+
349
+ | Identity string | Exact occurrences | Files | File distribution | Change classification |
350
+ | --- | ---: | ---: | --- | --- |
351
+ | `UpgradeLens` | 391 | 128 | docs 60, tests 23, schemas 20, source 10, root/other 7, `.github` 3, eval 3, examples 2 | Current product surfaces `MUST_CHANGE`; historical docs/captures `KEEP_AS_HISTORICAL_RECORD` |
352
+ | `upgradelens` | 839 | 209 | docs 116, tests 60, root/other 15, source 10, examples 3, schemas 3, `.github` 1, eval 1 | Package/CLI/current docs `MUST_CHANGE`; legacy aliases `KEEP_FOR_COMPATIBILITY`; historical records stay |
353
+ | `UPGRADELENS_` | 241 | 26 | docs 10, root/other 7, tests 6, source 2, `.github` 1 | New runtime/docs `MUST_CHANGE`; old prefix accepted temporarily |
354
+ | `.upgradelens` | 426 | 115 | docs 61, tests 40, root/other 7, source 5, `.github` 1, examples 1 | New default `MUST_CHANGE`; legacy reads/tests `KEEP_FOR_COMPATIBILITY`; historical records stay |
355
+ | `thomasMinh1995/UpgradeLens` | 41 | 31 | schemas 19, docs 4, root/other 3, `.github` 2, eval 2, tests 1 | Current URLs `SHOULD_CHANGE`; frozen schema IDs/history `KEEP_AS_HISTORICAL_RECORD` |
356
+
357
+ Highest-cost areas are not package metadata; they are schemas, qualification identity, tests and historical documentation. Implementation must classify matches file-by-file:
358
+
359
+ - **`MUST_CHANGE`:** current constants, package/lock metadata, bin, README/current docs, package examples, current community/workflow links, new-brand schemas, provider schema identity.
360
+ - **`SHOULD_CHANGE`:** current architecture prose, current examples and active support links.
361
+ - **`KEEP_FOR_COMPATIBILITY`:** old CLI/env/output-root readers and their tests.
362
+ - **`KEEP_AS_HISTORICAL_RECORD`:** tagged files, prior reviews, captures, release notes, qualification records and commit history.
363
+ - **`UNRELATED_MATCH`:** generic dependency “upgrade” terminology and third-party data; do not alter it.
364
+
365
+ ## 14. User/contributor migration plan
366
+
367
+ | Surface | Before | After | Compatibility/breaking assessment |
368
+ | --- | --- | --- | --- |
369
+ | Install | Documented but unpublished `npm install -g upgradelens@preview` | `npm install -g @thomasminh1995/depverdict@preview` | No npm consumer migration from local package; install command is new |
370
+ | CLI | `upgradelens` | `depverdict` | Breaking public-preview rename; one-release alias |
371
+ | Import | `from 'upgradelens'` | `from '@thomasminh1995/depverdict'` | Breaking specifier; no published old package |
372
+ | Output | `.upgradelens/` | `.depverdict/` | New default; legacy directory remains readable for transition |
373
+ | Artifacts | Existing semantic filenames/schemas | Same filenames; new brand-bearing schema versions | Historical artifacts remain valid and untouched |
374
+ | Environment | `UPGRADELENS_*` | `DEPVERDICT_*` | Legacy fallback for one preview line; deterministic precedence |
375
+ | Git remote | `thomasMinh1995/UpgradeLens.git` | `thomasMinh1995/DepVerdict.git` | GitHub redirect plus documented `git remote set-url` |
376
+ | Releases | `v0.5.0` UpgradeLens history | `v0.6.0-alpha.1` DepVerdict prerelease | History preserved; no moved tags |
377
+
378
+ Release notes must state:
379
+
380
+ - this is an identity migration, not a new automatic-updater contract;
381
+ - no local npm package was previously published;
382
+ - `upgrade-lens` belongs to a different project and must not be installed as a compatibility package;
383
+ - the old CLI/env/output identities are temporary compatibility surfaces only;
384
+ - old reports and qualification records must not be rewritten;
385
+ - full requalification was performed for the exact release commit.
386
+
387
+ ## 15. Risks and mitigations
388
+
389
+ | Risk | Impact | Mitigation |
390
+ | --- | --- | --- |
391
+ | Candidate becomes unavailable before cutover | Blocks consistent identity | Recheck all services immediately before mutation; stop and reopen ADR if conflict exists |
392
+ | Unknown trademark/company conflict | Legal/support cost | Human/legal risk review; no clearance claim; do not reserve automatically |
393
+ | “Verdict” implies false certainty | Overconfident product interpretation | Lead with evidence-bounded tagline and preserve explicit insufficient/investigate states |
394
+ | Large mechanical rename corrupts contracts/history | Schema and provenance breakage | File-by-file classification; version brand-bearing schemas; never rewrite old artifacts/tags |
395
+ | GitHub redirect gaps, especially raw schema links | Broken consumers/docs | Verify every URL class; freeze old IDs; publish new schema IDs; retain release copies/checksums |
396
+ | Personal npm scope becomes limiting | Future ownership migration | Accept for preview; consider organization only when maintenance structure justifies it |
397
+ | CLI alias prolongs confusion | Users keep old identity | One preview release, stderr deprecation, telemetry-free removal gate |
398
+ | Env aliases mishandle secrets or precedence | Credential exposure/unpredictability | New prefix wins; conflict warning names keys only; sanitized tests; never log values |
399
+ | New qualification identity invalidates old approval | Unsafe reuse of qualification | Treat old records as historical; run exact provider/model/task/dataset/prompt/schema/policy qualification |
400
+ | Conduct/security channel breaks during rename | Private reports lost | Verify replacement before retiring old email/URLs; publish overlap period |
401
+
402
+ ## 16. Rejected options
403
+
404
+ - **Keeping UpgradeLens with only a scoped distribution identity:** rejected because it solves npm feasibility but preserves the exact same-domain product name and near-identical install/CLI identity.
405
+ - **Keeping UpgradeLens while renaming only package and CLI:** rejected because four different identity layers would no longer reinforce each other and search/support ambiguity would remain.
406
+ - **GitHub-only delay as the primary strategy:** rejected because it postpones rather than resolves the decision. It remains a safe temporary fallback if pre-cutover checks fail.
407
+ - **Unscoped `depverdict`:** not selected despite an npm 404; scoped ownership clarity is preferable and unscoped acceptance was not tested.
408
+ - **Immediate npm `latest`:** rejected because the product remains Technical Preview and identity/schema compatibility requires requalification.
409
+ - **`0.5.1` identity patch or moved `v0.5.0`:** rejected because the change is broader than a patch and the public tag/release is immutable history.
410
+ - **Creating an npm/GitHub organization or reserving domains/social handles:** rejected for now because it adds operational burden without demonstrated community need.
411
+ - **Mechanical global replacement:** rejected because historical records, semantic task IDs, reason codes, schema versions and qualification digests must remain stable.
412
+
413
+ ## 17. Implementation tasks, maximum 5
414
+
415
+ | Task | Bounded scope | Dependencies | Acceptance criteria | Rollback/compatibility note |
416
+ | --- | --- | --- | --- | --- |
417
+ | `DIFF-02 Identity contract and compatibility implementation` | Add new product/package/CLI/constants, `.depverdict` default, legacy CLI/env/output readers, new brand-bearing schema versions; preserve semantic IDs | DIFF-01 accepted; final availability/legal checkpoint before public mutation | Unit/schema tests prove precedence, sanitized warnings, legacy reads, unchanged task/reason IDs and untouched historical fixtures | Revert code before any external rename; old paths remain usable |
418
+ | `DIFF-03 Package, CLI and repository metadata migration` | Update package/lock/bin/export metadata and planned repository URLs; reproduce bin normalization on Node/npm and Windows/POSIX shims | DIFF-02 | `npm pack` manifest, clean installs, `depverdict --version/help`, temporary alias behavior, zero lifecycle/network mutation | No publish; repository rename requires separate explicit authorization |
419
+ | `DIFF-04 Docs, community and release migration` | Update active README, current docs, templates, support/security routes and migration note; keep historical reports/releases unchanged | DIFF-03; verified replacement conduct/security channel | Link scan classifies redirects; install/import examples are unambiguous; historical diffs are zero | Keep old private channels and URLs during overlap |
420
+ | `DIFF-05 Package/CI/provider requalification` | Full Node 20/22/24 CI, package guard, clean install, schema dual-read, deterministic artifacts, provider/migration qualification at exact identity | DIFF-02–04 | Green hosted CI; reproducible pack; new qualification record binds exact package/prompt/schema/policy; old artifact fixtures still load | Failure blocks tag/publication; no reuse of old qualification |
421
+ | `DIFF-06 Public-preview distribution gate` | Recheck availability, authorized GitHub rename, immutable prerelease tag/release, scoped npm preview publication | DIFF-05 + explicit maintainer authorization + human/legal checkpoint | Remote SHA/tag/release/npm tarball/CLI match; dist-tag is `preview`; old repo redirects verified; no `latest` | Stop before each external mutation if identity drift occurs; never force-move a public tag |
422
+
423
+ No implementation task is executed by DIFF-01. External mutations remain separately authorized actions.
424
+
425
+ ## 18. Validation needed after implementation
426
+
427
+ 1. Recheck exact npm scoped/unscoped names, GitHub slug/name search, web signals and relevant trademark databases immediately before mutation.
428
+ 2. Confirm package name/version in `package.json`, lockfile, tarball manifest and installed metadata.
429
+ 3. Reproduce the reported bin-normalization warning independently on supported Node/npm combinations; validate POSIX symlink and Windows `.cmd`/PowerShell shims rather than assuming current bin is broken.
430
+ 4. Clean-install the packed tarball in isolated prefixes on Node 20, 22 and 24; verify `depverdict --version`, `--help`, normal analysis and the deprecated `upgradelens` alias.
431
+ 5. Verify `DEPVERDICT_*` precedence, `UPGRADELENS_*` fallback and secret-safe conflict/debug messages.
432
+ 6. Verify `.depverdict/` new writes, `.upgradelens/` legacy reads, no in-place rewrite and deterministic artifact lineage.
433
+ 7. Validate frozen v0.5 schemas/fixtures and new brand-bearing schema versions; check every `$id`, generator `const`, provider schema name and prompt/schema digest.
434
+ 8. Re-run evaluation, qualification and provider failure gates for the exact provider/model/task/dataset/prompt/schema/policy identity.
435
+ 9. Run package-content guard, full tests, hosted CI and read-only package smoke; confirm no captures, secrets or local paths enter the tarball.
436
+ 10. After an authorized repository rename, verify clone/fetch redirect, contributor remote update, Actions badges, issues/PRs, private vulnerability reporting, release/tag continuity, raw schema links and forks.
437
+ 11. Create `v0.6.0-alpha.1` only from the qualified SHA and mark the GitHub release as prerelease.
438
+ 12. If separately authorized to publish, use public scoped access with npm `preview`; verify registry metadata/tarball/bin without moving `latest`.
439
+
440
+ Any failed identity, schema, qualification, private-reporting or distribution check blocks the public-preview gate.
441
+
442
+ ## 19. Exact file created
443
+
444
+ DIFF-01 created exactly:
445
+
446
+ ```text
447
+ docs/decisions/diff-01-brand-distribution-identity.md
448
+ ```
449
+
450
+ It did not modify README, package/lock metadata, source, tests, schemas, workflows, tags, releases, repository settings, npm packages, domains, handles, credentials or the external project. Pre-existing untracked RR02 captures and the earlier comparison report were preserved unchanged.