@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,274 @@
1
+ # DIFF-02 — Identity and Compatibility Contract
2
+
3
+ - Status: Accepted for implementation
4
+ - Date: 2026-07-19
5
+ - Scope: `0.6.0-alpha.1`
6
+ - Product identity: DepVerdict
7
+ - Distribution identity: `@thomasminh1995/depverdict`
8
+ - Canonical executable: `depverdict`
9
+
10
+ ## Context
11
+
12
+ UpgradeLens `v0.5.0` established the current evidence formats, workflow semantics,
13
+ and historical release record. The next preview changes the product and
14
+ distribution identity to DepVerdict without invalidating those artifacts or
15
+ silently changing their meaning.
16
+
17
+ This decision is intentionally narrower than the later repository,
18
+ documentation, and community migration. The repository remains
19
+ `thomasMinh1995/UpgradeLens` during DIFF-02. Existing tags, especially `v0.5.0`,
20
+ and existing review or qualification records remain historical facts and are
21
+ not rewritten.
22
+
23
+ ## Accepted identity map
24
+
25
+ | Surface | Canonical identity | Compatibility identity |
26
+ | --- | --- | --- |
27
+ | Product | DepVerdict | UpgradeLens in historical records |
28
+ | Future repository | `thomasMinh1995/DepVerdict` | Current repository is not renamed here |
29
+ | npm package | `@thomasminh1995/depverdict` | No second legacy package is introduced |
30
+ | CLI | `depverdict` | `upgradelens`, deprecated for the `0.6.x` preview window |
31
+ | Artifact root | `.depverdict/` | `.upgradelens/`, read-only fallback |
32
+ | Environment prefix | `DEPVERDICT_*` | `UPGRADELENS_*`, deprecated fallback |
33
+ | Preview version | `0.6.0-alpha.1` | `v0.5.0` remains immutable history |
34
+
35
+ ## 1. Package and executable contract
36
+
37
+ The package name becomes `@thomasminh1995/depverdict`, and its version becomes
38
+ `0.6.0-alpha.1`. The package exposes two executable entries:
39
+
40
+ - `depverdict` is the canonical executable.
41
+ - `upgradelens` is a thin compatibility wrapper that invokes the same command
42
+ dispatcher with an explicit legacy invocation identity.
43
+
44
+ Both executables must produce the same exit codes, stdout payloads, and
45
+ artifacts for the same command and inputs. The only permitted difference is a
46
+ bounded deprecation diagnostic on stderr from the legacy executable. The
47
+ diagnostic is emitted at most once per process and must not contain secrets.
48
+
49
+ The alias remains through the `0.6.x` preview compatibility window. Its removal
50
+ requires a separate decision and release note; this implementation does not
51
+ silently remove it.
52
+
53
+ The npm preview publication itself is outside DIFF-02. When publication is
54
+ authorized later, it must use the `preview` dist-tag rather than `latest`.
55
+
56
+ ## 2. Runtime product presentation
57
+
58
+ New runtime presentation uses DepVerdict:
59
+
60
+ - help and version banners;
61
+ - user-agent strings;
62
+ - decision-first outcome headings;
63
+ - runtime remediation text and command examples.
64
+
65
+ Historical persisted names are not presentation strings. They remain unchanged
66
+ where they participate in existing schema contracts.
67
+
68
+ ## 3. Persisted schema compatibility
69
+
70
+ Existing artifact schemas, schema versions, reason codes, prompt versions,
71
+ policy versions, and provider qualification identities remain unchanged.
72
+
73
+ In particular, existing schemas require `generator.name` to equal
74
+ `"UpgradeLens"`. New `0.6.0-alpha.1` artifacts therefore continue to write that
75
+ value as a compatibility protocol identifier. The runtime product name
76
+ `DepVerdict` is separate from this persisted protocol identifier.
77
+
78
+ The existing internal version-analysis schema name
79
+ `upgradelens_version_analysis` also remains unchanged because it participates in
80
+ provider request and qualification compatibility.
81
+
82
+ This separation prevents a brand change from masquerading as an evidence-format
83
+ or provider-contract migration.
84
+
85
+ ## 4. Artifact write-root contract
86
+
87
+ All implicit/default writes use `.depverdict/`.
88
+
89
+ An explicit output path supplied by the caller remains authoritative. The
90
+ runtime must not rewrite, relocate, copy, or delete explicitly addressed
91
+ artifacts.
92
+
93
+ The legacy `.upgradelens/` directory remains ignored by discovery alongside
94
+ `.depverdict/`. This prevents either generated tree from affecting project
95
+ analysis.
96
+
97
+ ## 5. Legacy artifact read contract
98
+
99
+ Automatic compatibility reads use a whole-chain selection rule:
100
+
101
+ 1. If every required canonical artifact exists, use the canonical chain.
102
+ 2. If the canonical chain is complete and legacy artifacts also exist, use the
103
+ canonical chain and emit one bounded `LEGACY_ARTIFACT_ROOT_IGNORED`
104
+ diagnostic.
105
+ 3. If no canonical member exists and every required legacy artifact exists, use
106
+ the legacy chain and emit one bounded `LEGACY_ARTIFACT_ROOT_USED`
107
+ diagnostic.
108
+ 4. If both roots contain members but the canonical chain is incomplete, or the
109
+ only available inputs form a split/partial chain, fail closed with
110
+ `ARTIFACT_ROOT_CONFLICT`.
111
+ 5. If neither root contains a member, select canonical paths so the established
112
+ missing-input behavior remains authoritative.
113
+
114
+ The resolver never combines artifacts from both roots. It never judges
115
+ lineage by timestamps and never repairs a chain by copying files.
116
+
117
+ Explicit input paths bypass automatic root selection. An explicitly selected
118
+ legacy path is allowed because caller intent is unambiguous.
119
+
120
+ ## 6. Stage-boundary behavior
121
+
122
+ Automatic root selection is applied at input boundaries that consume persisted
123
+ workflow state, including:
124
+
125
+ - research manifest loading;
126
+ - version-analysis manifest, knowledge manifest, and evidence-bundle loading;
127
+ - migration-checklist workflow input loading;
128
+ - default migration-qualification resolution.
129
+
130
+ Each boundary declares its complete required input set. A downstream stage must
131
+ not fill missing canonical members from legacy storage.
132
+
133
+ A standalone stage may read a complete legacy input set and write its output to
134
+ the canonical default root. That does not grant later stages permission to
135
+ merge the roots. The caller must regenerate a complete canonical chain or use
136
+ explicit input paths.
137
+
138
+ ## 7. Environment compatibility contract
139
+
140
+ Supported canonical variables are:
141
+
142
+ - `DEPVERDICT_AI_PROVIDER`
143
+ - `DEPVERDICT_AI_ENDPOINT`
144
+ - `DEPVERDICT_AI_MODEL`
145
+ - `DEPVERDICT_AI_AUTHORIZATION`
146
+ - `DEPVERDICT_AI_TIMEOUT_MS`
147
+ - `DEPVERDICT_AI_TIMEOUT_SECONDS`
148
+ - `DEPVERDICT_AI_MAX_RESPONSE_BYTES`
149
+ - `DEPVERDICT_AI_DEBUG`
150
+
151
+ Each maps one-to-one to the corresponding `UPGRADELENS_*` legacy variable.
152
+
153
+ Resolution precedence is:
154
+
155
+ 1. explicit programmatic or CLI override;
156
+ 2. canonical `DEPVERDICT_*` environment variable;
157
+ 3. legacy `UPGRADELENS_*` environment variable;
158
+ 4. established default.
159
+
160
+ When both mapped environment variables are present, the canonical value wins.
161
+ The runtime emits one bounded conflict diagnostic naming variable keys only.
162
+ When only a legacy variable is used, the runtime emits one bounded deprecation
163
+ diagnostic naming the key only.
164
+
165
+ Diagnostics must never print values. This is mandatory for
166
+ `*_AUTHORIZATION` and applies uniformly to every mapping. Unknown variables
167
+ under either prefix are ignored.
168
+
169
+ Injected environment objects are closed worlds: passing `{}` must not fall
170
+ through to `process.env`.
171
+
172
+ ## 8. Diagnostic contract
173
+
174
+ Compatibility diagnostics go to stderr and never alter structured stdout.
175
+ Diagnostic emission is bounded within one invocation:
176
+
177
+ - one legacy-executable warning;
178
+ - at most one warning per mapped environment key;
179
+ - at most one artifact-root diagnostic per resolved input chain.
180
+
181
+ Diagnostics contain stable codes where programmatic interpretation is useful
182
+ and do not include absolute paths, environment values, authorization material,
183
+ or artifact contents.
184
+
185
+ ## 9. Programmatic API contract
186
+
187
+ Existing public exports remain stable for this preview. Compatibility helpers
188
+ are internal implementation details unless separately promoted through a
189
+ future public-API decision.
190
+
191
+ Programmatic calls to `runCli` default to canonical invocation identity and do
192
+ not receive a legacy-executable warning. Tests and embedders may explicitly
193
+ provide invocation identity and isolated diagnostic state.
194
+
195
+ Existing loader return shapes and validation behavior remain unchanged except
196
+ for the documented automatic selection of a complete legacy artifact chain.
197
+
198
+ ## 10. Qualification and evidence contract
199
+
200
+ Provider qualification does not become valid merely because the product was
201
+ renamed. The existing provider, endpoint, model, schema, prompt, policy, and
202
+ test-vector identity fields remain the qualification authority.
203
+
204
+ For an implicit default qualification path, canonical storage wins and a
205
+ complete legacy record may be used as fallback. An explicit qualification path
206
+ never falls back elsewhere. A malformed or mismatched selected record fails
207
+ closed; the resolver does not search another root for a more favorable answer.
208
+
209
+ ## 11. Packaging and CI contract
210
+
211
+ The package-content guard must inspect the actual packed tarball and require
212
+ both executable files. Existing protections against captures, credentials,
213
+ local artifacts, and repository-only material remain active.
214
+
215
+ Package smoke verification must install the packed scoped package, invoke both
216
+ executables, verify canonical programmatic import, and confirm:
217
+
218
+ - canonical help/version output presents DepVerdict;
219
+ - the canonical executable has clean stderr for ordinary help/version calls;
220
+ - the legacy executable emits only its bounded warning;
221
+ - package export shape remains compatible;
222
+ - no publish or registry mutation occurs.
223
+
224
+ Hosted CI keeps read-only permissions, tests supported Node versions, and
225
+ sanitizes both canonical and legacy environment prefixes.
226
+
227
+ No repository rename, tag creation, commit, push, npm publish, or dist-tag
228
+ mutation is authorized by this decision.
229
+
230
+ ## 12. Brand preflight
231
+
232
+ The required pre-implementation preflight ran at `2026-07-19T08:05:34Z`.
233
+ Exact-name checks found no direct collision for DepVerdict on npm, GitHub
234
+ repository search, PyPI, RubyGems, or the local executable path. General web
235
+ queries also returned no exact software or company result.
236
+
237
+ Crates.io returned an access denial, and unauthenticated GitHub code search was
238
+ unavailable, so those checks are recorded as unverified rather than clear.
239
+ Domain RDAP responses are only weak availability signals.
240
+
241
+ Classification: `BRAND_PREFLIGHT_CLEAR_WITH_LOW_RISK`.
242
+
243
+ This classification is time-sensitive, is not a reservation, and is not a
244
+ legal or trademark clearance.
245
+
246
+ ## 13. Legacy compatibility removal criteria
247
+
248
+ The legacy CLI, environment mappings, and artifact fallback may be removed only
249
+ after all of the following are true:
250
+
251
+ - the complete `0.6.x` preview compatibility window has shipped;
252
+ - canonical CLI, environment, and artifact-root usage is documented in the
253
+ repository/community migration;
254
+ - telemetry-free evidence available to the project, such as issue reports and
255
+ preview feedback, reveals no unresolved Blocker or High migration defect;
256
+ - removal is announced in release notes before or with the removing release;
257
+ - the removing release includes an explicit breaking-change decision, focused
258
+ tests, and migration guidance;
259
+ - historical `.upgradelens/` artifacts remain readable by a documented retained
260
+ release even if a future major removes automatic fallback.
261
+
262
+ Calendar time alone is not a removal criterion. DIFF-02 does not authorize the
263
+ removal.
264
+
265
+ ## Consequences
266
+
267
+ DepVerdict becomes the only canonical identity for new runtime use while one
268
+ bounded compatibility window protects existing automation and persisted
269
+ evidence. The implementation accepts some deliberate dual naming internally:
270
+ DepVerdict for the product, and UpgradeLens for unchanged artifact protocols.
271
+
272
+ Repository naming, broad documentation replacement, community-template
273
+ migration, release publication, and removal scheduling remain work for later
274
+ gates.
@@ -0,0 +1,165 @@
1
+ # DIFF-03 — Repository, Documentation, and Community Identity Migration
2
+
3
+ - Status: Accepted for implementation
4
+ - Date: 2026-07-19
5
+ - Scope: `0.6.0-alpha.1`
6
+ - Product identity: DepVerdict
7
+ - Repository at the DIFF-03 implementation checkpoint: `thomasMinh1995/UpgradeLens`
8
+ - Current canonical repository: `thomasMinh1995/DepVerdict`
9
+ - Post-rename status updated: 2026-07-19
10
+
11
+ ## Context and two-phase boundary
12
+
13
+ DIFF-02 established the DepVerdict package, executable, artifact-root, and
14
+ environment identities. DIFF-03 originally made the repository experience use
15
+ that identity before the separate GitHub rename. The rename has since completed:
16
+ `https://github.com/thomasMinh1995/DepVerdict` is canonical. The former URL is
17
+ retained only as historical truth, migration explanation, and a redirect
18
+ compatibility aid. npm publication, runtime compatibility, and historical evidence
19
+ remain separate boundaries.
20
+
21
+ ## 1. Normative and historical ownership
22
+
23
+ Each old-name reference is assigned one ownership class before editing:
24
+
25
+ | Class | Ownership and migration rule |
26
+ | --- | --- |
27
+ | `CURRENT_NORMATIVE` | Describes the current product or contributor workflow; migrate to DepVerdict. |
28
+ | `CURRENT_COMPATIBILITY_DOCUMENTATION` | Keep the old identity only while explaining the bounded `0.6.x` compatibility window. |
29
+ | `HISTORICAL_RECORD` | Preserve the name, command, version, path, URL, and result that were true when the record was produced. |
30
+ | `VERSIONED_ARCHITECTURE_RECORD` | Preserve when it defines a completed version or milestone; current operational documents may receive a narrowly scoped migration note or canonical example update. |
31
+ | `TEST_FIXTURE_ASSERTION` | Preserve when it protects schema, protocol, compatibility, or historical behavior. |
32
+ | `RUNTIME_IDENTITY_ALREADY_MIGRATED` | Do not change except to keep current documentation and checks aligned with DIFF-02. |
33
+ | `EXTERNAL_PROJECT_REFERENCE` | Preserve the external project's actual identity and comparison evidence. |
34
+ | `UNRELATED_TEXT` | Leave unchanged. |
35
+
36
+ Current normative owners include the root README and community policies, current
37
+ issue and pull-request templates, current operational documentation, the current
38
+ Technical Preview sample, package-facing metadata, and workflow presentation.
39
+ Milestone reports under `docs/reviews/`, RR/MP/MVP/OSS reports, capture evidence,
40
+ and `docs/releases/v0.5.0-technical-preview.md` remain historical records.
41
+
42
+ ## 2. Product-name migration rule
43
+
44
+ Current prose uses **DepVerdict**. Canonical examples use:
45
+
46
+ - package `@thomasminh1995/depverdict`;
47
+ - executable `depverdict`;
48
+ - artifact root `.depverdict/`;
49
+ - environment prefix `DEPVERDICT_*`.
50
+
51
+ The old executable, artifact root, and environment prefix appear in current
52
+ material only to document compatibility or a verified transition route. The
53
+ persisted protocol identifier `generator.name: "UpgradeLens"`, schema names,
54
+ task IDs, reason codes, qualification identities, and old fixtures remain
55
+ unchanged under the DIFF-02 compatibility contract.
56
+
57
+ ## 3. Live repository URL rule
58
+
59
+ After the completed manual rename:
60
+
61
+ - relative links remain preferred for repository files;
62
+ - clone, issue, metadata, badge, and security URLs use the canonical
63
+ `thomasMinh1995/DepVerdict` route;
64
+ - the former `thomasMinh1995/UpgradeLens` route may appear only in historical or
65
+ migration context.
66
+
67
+ GitHub redirects are a continuity aid, not the permanent documentation strategy.
68
+
69
+ ## 4. Security advisory URL rule
70
+
71
+ Vulnerability reports use:
72
+
73
+ `https://github.com/thomasMinh1995/DepVerdict/security/advisories/new`
74
+
75
+ This canonical private route remains in `SECURITY.md` and the issue-form
76
+ configuration. No vulnerability report is routed through a public issue.
77
+
78
+ ## 5. Conduct contact strategy
79
+
80
+ Decision: `KEEP_VERIFIED_LEGACY_CONTACT_FOR_ONE_PREVIEW`.
81
+
82
+ `upgradelens.conduct@gmail.com` remains the verified private conduct channel for
83
+ the DepVerdict community during the `0.6.x` preview transition. It is not described
84
+ as deprecated because no replacement exists and has been tested. A maintainer may
85
+ later create and verify a DepVerdict-named contact; documentation changes only
86
+ after that channel is proven usable. No new email is invented by this migration.
87
+
88
+ ## 6. README, CLI, package, and installation contract
89
+
90
+ The README must:
91
+
92
+ - identify DepVerdict as a decision-first CLI for evidence-bounded dependency
93
+ upgrade analysis and visibly label it Public Technical Preview / Alpha;
94
+ - distinguish target availability from a recommendation;
95
+ - show `depverdict analyze .`, `--offline`, `--fail-on-incomplete`, and exact
96
+ supported target-selector examples;
97
+ - describe deterministic decisions, coverage-aware impact, evidence-bounded
98
+ handoff, and mandatory human review;
99
+ - state that source is not modified and suggested verification commands are not
100
+ executed;
101
+ - keep Migration Checklist experimental and opt-in;
102
+ - explain model/provider qualification as identity-specific and describe offline
103
+ limitations.
104
+
105
+ The planned npm command is
106
+ `npm install -g @thomasminh1995/depverdict@preview`. It must remain explicitly
107
+ pre-publication until distribution qualification confirms the preview exists.
108
+ Source setup uses the canonical DepVerdict clone URL and
109
+ `node ./bin/depverdict.js`.
110
+
111
+ ## 7. Legacy compatibility window
112
+
113
+ The `upgradelens` executable, `.upgradelens/` read fallback, and
114
+ `UPGRADELENS_*` environment fallback remain for one bounded `0.6.x` preview
115
+ window. Canonical values win conflicts and legacy use warns without printing
116
+ values. The migration guide must state that removal requires a separate decision
117
+ and release note; the window is not an indefinite support promise.
118
+
119
+ ## 8. Release and version ownership
120
+
121
+ `docs/releases/v0.5.0-technical-preview.md` remains an immutable UpgradeLens
122
+ historical release record. The current preview is owned by
123
+ `docs/releases/v0.6.0-alpha.1-depverdict-preview.md`. The new file is a release
124
+ draft, does not claim npm availability or `latest`, and does not claim autonomous
125
+ migration.
126
+
127
+ ## 9. Badge and workflow-link strategy
128
+
129
+ Workflow display text uses DepVerdict. Any README workflow badge uses the
130
+ canonical repository URL. No npm badge is shown until a preview package has
131
+ actually been published. Hosted CI must be rerun at the exact post-remediation
132
+ commit.
133
+
134
+ ## 10. Package boundary
135
+
136
+ The migration guide, this decision, the current release draft, current operational
137
+ documentation, and the DIFF-03 report are intentionally package-visible under the
138
+ existing `docs` allowlist. Community `.github/` files and the repository-only
139
+ sample remain excluded. Package guard required assets will include the current
140
+ migration decision and guide without treating a total tarball file count as a
141
+ business invariant.
142
+
143
+ Generated `.depverdict/` and `.upgradelens/` trees, RR02 captures, credentials,
144
+ environment files, duplicate/copy artifacts, and private qualification data remain
145
+ forbidden package content.
146
+
147
+ ## 11. Post-rename manual checklist
148
+
149
+ Post-rename status:
150
+
151
+ 1. GitHub repository rename, canonical origin, former-URL redirect, pull requests,
152
+ issues, Releases, Actions history, branch settings, and Private Vulnerability
153
+ Reporting were externally verified by DIFF-04.
154
+ 2. `package.json`, clone examples, advisory routes, current release/migration
155
+ status, and identity tests are remediated by DIFF-04-FIX.
156
+ 3. Historical GitHub Release presentation was remediated by the explicitly
157
+ approved DIFF-04-FIX live metadata edit.
158
+ 4. Identity checks, link checks, package guard, clean-install smoke, and hosted CI
159
+ must run on the exact post-remediation commit/configuration.
160
+
161
+ The verified conduct address remains unchanged until a separately created
162
+ DepVerdict address has been tested. Removal of the UpgradeLens compatibility
163
+ identity requires the end of the documented preview window, usage review, a
164
+ separate compatibility decision, release notes, passing canonical-only tests, and
165
+ no remaining supported consumer dependency on the legacy interfaces.
@@ -0,0 +1,110 @@
1
+ # DIFF-04 — Historical release evidence-gap acceptance
2
+
3
+ - Status: `ACCEPTED`
4
+ - Scope: one-time UpgradeLens-to-DepVerdict GitHub Release presentation repair
5
+ - Baseline collected: 2026-07-19T10:42:43Z
6
+ - Maintainer approval recorded: 2026-07-19T11:18:54Z
7
+ - Canonical repository: `thomasMinh1995/DepVerdict`
8
+
9
+ ## Decision boundary
10
+
11
+ A complete release-ID, state, timestamp, and asset inventory was not retained
12
+ before the repository rename and release-title edits. That missing before-state
13
+ cannot be recreated retrospectively and must not be described as proven.
14
+
15
+ The retained evidence and current read-only checks support a bounded repair:
16
+
17
+ - all five annotated remote tag objects and peeled commits match local refs;
18
+ - the retained DIFF-01 snapshot independently proves continuity for the
19
+ `v0.5.0` tag object and peeled commit;
20
+ - the retained DIFF-01 snapshot and current API agree on the `v0.5.0` published
21
+ timestamp and non-draft/non-prerelease state;
22
+ - all five current releases have zero assets;
23
+ - no evidence reviewed conflicts with the current tags or release targets.
24
+
25
+ This record does **not** claim that assets never existed, never changed, or were
26
+ never removed. It does **not** prove before-state release IDs, titles, bodies,
27
+ states, timestamps, or assets where no retained evidence exists.
28
+
29
+ ## Invariant classification
30
+
31
+ | Invariant | Classification | Evidence |
32
+ | --- | --- | --- |
33
+ | `v0.5.0` tag object and peeled target continuity | `PROVEN` | DIFF-01 retained object `4750606ca85f990ee69d60ab4673caca5fbfb89b` and target `74d57344db254d0109ea951dc7c44853cdad9be0`; current local and remote refs match. |
34
+ | `v0.1.1`–`v0.4.0` current tag objects and peeled targets | `SUPPORTED_BY_CURRENT_STATE_ONLY` | Current local and remote refs match; no complete retained pre-rename ref inventory was found. |
35
+ | `v0.5.0` published timestamp and draft/prerelease state | `PROVEN` | DIFF-01 and current GitHub API agree on `2026-07-19T02:56:50Z`, draft false, prerelease false. |
36
+ | Earlier release IDs/states/timestamps before rename | `UNKNOWN_BEFORE_STATE` | Current API supplies values, but no complete retained before-state inventory was found. |
37
+ | Release asset state before rename | `UNKNOWN_BEFORE_STATE` | No retained asset IDs, names, sizes, digests, or explicit zero-asset inventory was found. |
38
+ | Current absence of release assets | `SUPPORTED_BY_CURRENT_STATE_ONLY` | Current GitHub API reports zero assets for all five releases. |
39
+ | Conflicting tag/target/asset evidence | `SUPPORTED_BY_CURRENT_STATE_ONLY` | No conflict was found in retained records, Git history, current refs, or current API state. |
40
+
41
+ ## Maintainer acceptance
42
+
43
+ The maintainer explicitly accepted both the five-release metadata plan and this
44
+ bounded evidence-gap statement in the DIFF-04-FIX Codex task. Approval covered
45
+ only the approved titles and bodies. No credential was included in or retained by
46
+ the approval record.
47
+
48
+ ## Pre-edit release baseline
49
+
50
+ This table is the mandatory baseline for all future release mutations. API
51
+ `target_commitish` currently reports `main`; the immutable target values below are
52
+ the peeled Git tag commits.
53
+
54
+ | ID | Tag | Tag object | Peeled commit | Draft / prerelease | Created / published / updated (UTC) | Assets |
55
+ | ---: | --- | --- | --- | --- | --- | ---: |
56
+ | `353312307` | `v0.1.1` | `5716a6f8d00119d106487830c37b37957b171919` | `95cd3025c27d2c4d8e97f711625541ee0da7dbc0` | false / false | `2026-07-13T17:10:16Z` / `17:16:09Z` / `2026-07-19T10:08:01Z` | 0 |
57
+ | `353747096` | `v0.2.0` | `2b82aae4ce49184175c2eb13a421610ca1c31a9a` | `411c9e6216d9476b48d72311c9163b2a563d1e60` | false / false | `2026-07-14T11:12:11Z` / `11:22:02Z` / `2026-07-19T10:08:52Z` | 0 |
58
+ | `354822066` | `v0.3.0` | `4849f78a594f468cdcfa45151498168869685a55` | `8fea8ec5b06dd6c85a0f600be1d566d65ef2c7a2` | false / false | `2026-07-16T01:40:55Z` / `01:43:27Z` / `2026-07-19T10:09:10Z` | 0 |
59
+ | `355150303` | `v0.4.0` | `6c7983000468d53704eeaf00bb9dd98c6d2e638a` | `734be0b9395b0bd74454badc010e4df237319cc3` | false / false | `2026-07-16T14:33:06Z` / `14:35:09Z` / `2026-07-19T10:09:31Z` | 0 |
60
+ | `356244177` | `v0.5.0` | `4750606ca85f990ee69d60ab4673caca5fbfb89b` | `74d57344db254d0109ea951dc7c44853cdad9be0` | false / false | `2026-07-19T02:55:33Z` / `02:56:50Z` / `2026-07-19T09:43:20Z` | 0 |
61
+
62
+ ## Exact approved-operation candidate
63
+
64
+ Every body receives this exact prefix:
65
+
66
+ ```markdown
67
+ > **Project rename:** This release was originally published under the
68
+ > **UpgradeLens** name. The project is now **DepVerdict**:
69
+ > https://github.com/thomasMinh1995/DepVerdict
70
+ >
71
+ > This historical release remains associated with its original tag and commit.
72
+ ```
73
+
74
+ After the prefix and one blank line, the current body is preserved with each
75
+ body-local `DepVerdict` product-name token changed to `UpgradeLens`. No claim,
76
+ section, tag, target, state, timestamp, or asset is otherwise changed.
77
+
78
+ | ID / tag | Before title | Approved candidate title | Before body SHA-256 / bytes | Candidate body SHA-256 / bytes | Product-name replacements |
79
+ | --- | --- | --- | --- | --- | ---: |
80
+ | `353312307` / `v0.1.1` | `DepVerdict v0.1.1 — MVP-01 Project Discovery Foundation` | `UpgradeLens v0.1.1 — MVP-01 Project Discovery Foundation` | `72c80ae81fe4432ae5c5c19f5a88db7ed3ce114a879e763bb628c2758b0025dd` / 1963 | `17c9f1ece26eb1f6af20fb438b800d0cd74f3117aea979566ebb5b16b11c28e1` / 2227 | 6 |
81
+ | `353747096` / `v0.2.0` | `DepVerdict v0.2.0 — Knowledge Research` | `UpgradeLens v0.2.0 — Knowledge Research` | `357a718be404db84510663d485a59d95a9670028f2be77b60de9900e6ecc3080` / 4319 | `32af0823ca8199a5c041b48ceb4b126d9a0cdec369128463f4da5e9d2d560411` / 4588 | 11 |
82
+ | `354822066` / `v0.3.0` | `DepVerdict v0.3.0 — AI Version Analysis` | `UpgradeLens v0.3.0 — AI Version Analysis` | `6efaeca1fa7b38601e3cb1d1eee984740b36f7ae2da06093fb211f7815da2bfc` / 565 | `8b264cb667a555c392f9e688e49fbf91e8145beec19ef76d2b4edb5c1eef7262` / 823 | 0 |
83
+ | `355150303` / `v0.4.0` | `DepVerdict v0.4.0 — Repository Impact Analytics` | `UpgradeLens v0.4.0 — Repository Impact Analytics` | `83a35b7972090f6d0e6a54db6026b605875430109071d3be56d8ef8aa89cd0a5` / 1075 | `b71c108f31b1cb31d331cb89bda5fd5aec8fa63ca857d3b86825cd69c3383ff3` / 1335 | 2 |
84
+ | `356244177` / `v0.5.0` | `DepVerdict v0.5.0 — Evidence-Bounded Migration Planning` | `UpgradeLens v0.5.0 — Evidence-Bounded Migration Planning` | `e06386beb973627f65ab9190415eff7577e3da6f986e370eac96f68e2e0a2f44` / 731 | `0d556e775bff4c27e16b0090b1203d4d09567d0c3e3d8b28ce353cee16e54eba` / 990 | 1 |
85
+
86
+ The maintainer approved these five release IDs, titles, body transformation, and
87
+ the bounded evidence-gap statement. All five approved edits completed.
88
+
89
+ ## Post-edit release baseline
90
+
91
+ Read-only GitHub API and remote-ref verification completed after the approved
92
+ edits. Release ID, tag, `target_commitish`, annotated tag object, peeled commit,
93
+ draft/prerelease state, created/published timestamps, and asset arrays are
94
+ unchanged. GitHub changed the API-managed `updated_at` timestamp when each
95
+ title/body changed; that field was not supplied in any PATCH payload.
96
+
97
+ | ID / tag | Current title | Body SHA-256 | Updated at (UTC) | Assets |
98
+ | --- | --- | --- | --- | ---: |
99
+ | `353312307` / `v0.1.1` | `UpgradeLens v0.1.1 — MVP-01 Project Discovery Foundation` | `17c9f1ece26eb1f6af20fb438b800d0cd74f3117aea979566ebb5b16b11c28e1` | `2026-07-19T11:17:07Z` | 0 |
100
+ | `353747096` / `v0.2.0` | `UpgradeLens v0.2.0 — Knowledge Research` | `32af0823ca8199a5c041b48ceb4b126d9a0cdec369128463f4da5e9d2d560411` | `2026-07-19T11:17:46Z` | 0 |
101
+ | `354822066` / `v0.3.0` | `UpgradeLens v0.3.0 — AI Version Analysis` | `8b264cb667a555c392f9e688e49fbf91e8145beec19ef76d2b4edb5c1eef7262` | `2026-07-19T11:17:47Z` | 0 |
102
+ | `355150303` / `v0.4.0` | `UpgradeLens v0.4.0 — Repository Impact Analytics` | `b71c108f31b1cb31d331cb89bda5fd5aec8fa63ca857d3b86825cd69c3383ff3` | `2026-07-19T11:17:48Z` | 0 |
103
+ | `356244177` / `v0.5.0` | `UpgradeLens v0.5.0 — Evidence-Bounded Migration Planning` | `0d556e775bff4c27e16b0090b1203d4d09567d0c3e3d8b28ce353cee16e54eba` | `2026-07-19T11:17:48Z` | 0 |
104
+
105
+ ## Future mutation rule
106
+
107
+ Before every future GitHub Release mutation, capture release ID, tag, tag object,
108
+ peeled target, title/body digest, draft/prerelease state, timestamps, and complete
109
+ asset ID/name/size/digest inventory. After the mutation, recapture and compare the
110
+ same fields. Unexpected changes fail closed.