@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,482 @@
1
+ # OSS-05 — Technical Preview Qualification
2
+
3
+ ## 1. Executive verdict
4
+
5
+ **Verdict: `TECHNICAL_PREVIEW_QUALIFICATION_BLOCKED`**
6
+
7
+ **Gate: `HOSTED_CI_REFRESH_REQUIRED`**
8
+
9
+ The immutable public candidate at
10
+ `a390bac2d911a832dbd8e64e3e0a172bfd15e299` passes its product, package, hosted-CI,
11
+ install, workflow, trust, and community-route checks. No Blocker or High
12
+ product/security defect was found in that snapshot.
13
+
14
+ Qualification nevertheless cannot end at `READY_FOR_PUBLIC_TECHNICAL_PREVIEW`.
15
+ OSS-05 added the missing public-safe sample, zero-secret onboarding, focused
16
+ feedback guidance, a corrected test baseline, this report, and the release-note
17
+ draft. Those intentional changes are not part of the hosted-verified SHA. Some are
18
+ package-visible documentation. They must be reviewed, committed, pushed, and pass
19
+ hosted CI at one new exact PR-head SHA before the final public snapshot can be
20
+ qualified.
21
+
22
+ An external developer can understand, install, run, evaluate, and safely report
23
+ issues with the locally completed candidate. The public PR does not yet contain all
24
+ of that completed onboarding, so publication must wait for the refresh.
25
+
26
+ ## 2. Final qualification SHA and PR
27
+
28
+ | Boundary | Observed value |
29
+ | --- | --- |
30
+ | Local `HEAD` | `a390bac2d911a832dbd8e64e3e0a172bfd15e299` |
31
+ | Remote branch | `origin/fix/public-preview-readiness` at the same SHA |
32
+ | Pull request | [#9](https://github.com/thomasMinh1995/UpgradeLens/pull/9), open |
33
+ | PR head | Same SHA |
34
+ | PR base | `develop` |
35
+ | Public API mergeability | `true`; state `clean` at observation time |
36
+ | Qualification branch | `fix/public-preview-readiness` |
37
+
38
+ The equality was established after `git fetch origin`; no stale OSS-04 SHA was
39
+ reused. The previous `b3f5880...` hosted commit is only historical context.
40
+
41
+ ## 3. Hosted CI evidence for the exact SHA
42
+
43
+ [GitHub Actions CI run #2](https://github.com/thomasMinh1995/UpgradeLens/actions/runs/29676103134)
44
+ is a completed `pull_request` run for the exact qualification SHA and concluded
45
+ `success`.
46
+
47
+ | Hosted job | Required evidence | Conclusion |
48
+ | --- | --- | --- |
49
+ | Node 20 | `npm ci`, bounded canonical test command, package guard | `success` |
50
+ | Node 22 | `npm ci`, canonical suite, package guard | `success` |
51
+ | Node 24 | `npm ci`, canonical suite, package guard | `success` |
52
+ | Package smoke (Node 24) | dry-run manifest, actual pack, extraction, install, CLI, import | `success` |
53
+
54
+ The public run/job/step APIs were the evidence source. Conditional alternate test
55
+ steps were skipped as designed: Node 20 uses bounded test concurrency, while Node
56
+ 22/24 use the canonical command. The run retained zero artifacts. The workflow
57
+ requests no provider secret, uses ordinary `pull_request`, grants only
58
+ `contents: read`, disables persisted checkout credentials, has concurrency and
59
+ timeouts, pins official actions by full SHA, and contains no publish, tag, release,
60
+ push, writeback, or `pull_request_target` path.
61
+
62
+ Raw log download was not needed because public structured APIs exposed the exact
63
+ SHA and every required job/step conclusion.
64
+
65
+ ## 4. Clean-checkout boundary
66
+
67
+ Two isolated boundaries were made from the exact SHA:
68
+
69
+ 1. a detached clean Git checkout, with no working-tree changes, `.env`, local
70
+ `.upgradelens/` records, or capture directories;
71
+ 2. a `git archive` extraction with no Git metadata, used to exercise the
72
+ source-archive structural package mode.
73
+
74
+ Qualification ran on Node `v26.0.0`, npm `11.12.1`, Darwin arm64. Hosted CI supplies
75
+ the supported Node 20/22/24 portability evidence; Node 26 is additional local
76
+ evidence, not a declared support-floor change.
77
+
78
+ The detached checkout passed the canonical suite. Running the whole repository test
79
+ suite directly in the Git-less archive produced 631 pass, one expected
80
+ Git-correlation test failure, and one sandbox-loopback skip because that one test
81
+ asserts Git metadata is available. The dedicated source-archive package test passed
82
+ and the archive-mode guard remained fail-closed structurally. This is a test-topology
83
+ constraint, not a packaged runtime failure; contributor instructions use `git clone`.
84
+
85
+ ## 5. Public product truth assessment
86
+
87
+ README, package metadata, CLI help/version, public policies, issue/PR templates,
88
+ schemas, Upgrade Decision and Migration Checklist presentation, OSS-01 through
89
+ OSS-04 reports, package policy, and CI were cross-checked.
90
+
91
+ | Claim | Assessment |
92
+ | --- | --- |
93
+ | Stage | Clearly Public Technical Preview / Alpha |
94
+ | Primary interface | `upgradelens analyze` CLI |
95
+ | Registry target | Candidate discovery only; never an implicit driver |
96
+ | Explicit target | Structured caller-selected, occurrence-scoped target |
97
+ | Upgrade Decision | Deterministic and occurrence-scoped |
98
+ | Migration handoff | Evidence-bounded and human-reviewed |
99
+ | Checklist | Experimental, opt-in, disabled by default |
100
+ | Source changes | Never performed |
101
+ | Verification commands | Proposed only; never executed |
102
+ | Recovery | Not synthesized without structured evidence |
103
+ | Provider boundary | Provider-neutral API; quality and qualification identity-specific |
104
+ | Offline mode | Explicitly limited and visibly fail-closed |
105
+
106
+ No public surface claims production readiness, autonomous migration, guaranteed
107
+ safety, full ecosystem support, model-independent quality, or freedom from human
108
+ review.
109
+
110
+ ## 6. Package metadata assessment
111
+
112
+ `package.json` and lockfile root metadata agree:
113
+
114
+ - package `upgradelens`, version `0.5.0`, not marked private;
115
+ - decision-first, evidence-bounded CLI description;
116
+ - canonical repository, README homepage, and public bug-tracker URLs;
117
+ - MIT metadata matching `LICENSE`;
118
+ - Node engine `>=20`, aligned with the tested compatibility floor;
119
+ - accurate bounded keywords;
120
+ - executable `upgradelens -> bin/upgradelens.js`;
121
+ - root ESM export `src/index.js`;
122
+ - explicit `files` allowlist and capture exclusion;
123
+ - no invented maintainer email and no security-reporting misuse of `bugs.url`;
124
+ - no dependency or lockfile-root drift from OSS-04.
125
+
126
+ The four runtime dependencies and their lock entries remained unchanged.
127
+
128
+ ## 7. Tarball manifest, digest, and reproducibility
129
+
130
+ The exact hosted SHA passed `npm run check:package`: 234 files, zero suspicious
131
+ artifacts, and all 20 required assets.
132
+
133
+ | Observation | Exact-SHA result |
134
+ | --- | --- |
135
+ | Dry-run entry count | 234 |
136
+ | Actual extracted file count | 234 |
137
+ | Packed size | 595,410 bytes |
138
+ | Unpacked size | 2,337,936 bytes |
139
+ | Actual tarball SHA-256 | `700a58100c3d70d43b0a2db7a12dfa7e652906c03457a3541852e3dca406173c` |
140
+ | Normalized entry inventory SHA-256 | `d753ad14685c695977726ed2a890b166e721371fc3648e75112d4db10ff798b9` |
141
+ | Repeated actual pack | byte-identical |
142
+
143
+ The move from the historical 232-file OSS-03 boundary to 234 is already explained
144
+ by the two intended OSS-04 documents:
145
+ `docs/oss-04-public-ci-package-metadata-architecture.md` and
146
+ `docs/reviews/oss-04-public-ci-package-metadata.md`.
147
+
148
+ Actual entry and byte scans found no duplicate/copy/backup runtime artifact,
149
+ capture, `.env`, credential material, local absolute path, `.upgradelens/` record,
150
+ Git metadata, dependency tree, nested archive, or unintended qualification record.
151
+ The intentional historical documentation title containing “Capture” is not capture
152
+ evidence.
153
+
154
+ The OSS-05 release note and qualification report are package-visible documents, so
155
+ the eventual committed candidate is expected to add two paths (236 total); README
156
+ content will also change in place. The sample is intentionally source-only. No
157
+ digest or hosted claim is made for that not-yet-committed candidate.
158
+
159
+ ## 8. Clean install, CLI, and import results
160
+
161
+ The actual exact-SHA tarball was installed into a new isolated prefix and cache with
162
+ lifecycle scripts disabled; it did not symlink to the source checkout.
163
+
164
+ | Check | Result |
165
+ | --- | --- |
166
+ | Install | pass; 12 packages installed |
167
+ | `upgradelens --version` | `0.5.0` |
168
+ | `upgradelens --help` | exit 0; decision-first help and workflow options present |
169
+ | ESM root import | pass |
170
+ | Public exports | exactly 438 |
171
+ | Official package smoke | pass; 234 extracted files, 20 required assets |
172
+
173
+ No global user provider configuration was used for version, help, import,
174
+ discovery, or the zero-secret offline sample.
175
+
176
+ ## 9. Community sample and onboarding result
177
+
178
+ No suitable user-facing sample existed in the qualification SHA. Internal fixtures
179
+ were not reused because they carry test-only shapes and lack public instructions.
180
+
181
+ OSS-05 therefore adds `examples/technical-preview-node/` with:
182
+
183
+ - a private nested package and exact `fast-deep-equal@3.1.3` declaration;
184
+ - a package-lock v3 installed baseline;
185
+ - a real default import and usage;
186
+ - zero credentials, provider configuration, cached evidence, qualification record,
187
+ intentional vulnerability, or generated artifact.
188
+
189
+ The installed exact-SHA CLI discovered one Node project, one dependency occurrence,
190
+ and installed version `3.1.3` with no warning. The offline workflow made no provider
191
+ request and completed `INSUFFICIENT_DATA`, default exit 0, with target `null`,
192
+ `NOT_ANALYZED`, visible review requirement, and no invented evidence or
193
+ recommendation. Strict mode returned exit 2.
194
+
195
+ The sample is excluded because `package.json.files` does not include `examples/`.
196
+ This prevents nested package bloat/conflict and accidental generated-output
197
+ publication. Installed users follow the repository sample link; source evaluators
198
+ can run it directly.
199
+
200
+ ## 10. Representative workflow results
201
+
202
+ Existing deterministic fixtures and public CLI tests were used; no business rule
203
+ was added for this sample and no real-provider credit was consumed.
204
+
205
+ | Scenario | Qualification result |
206
+ | --- | --- |
207
+ | A. Default registry candidate | pass: newer candidate without driver becomes `INVESTIGATE`; no automatic plan |
208
+ | B. Explicit target | pass: exact occurrence receives `USER_SELECTED_TARGET`; sufficient evidence can produce `PLAN_UPGRADE`; others remain default |
209
+ | C. Installed equals target | pass: `KEEP_CURRENT`, zero actions, successful completion |
210
+ | D. Duplicate selector | pass: ambiguity fails pre-provider; unique copy/paste selectors; exact selection isolated; stale/conflicting IDs fail with zero calls |
211
+ | E. Coverage limitation | pass: unavailable/partial coverage never becomes a verified negative; positive evidence remains visible |
212
+ | F. Provider/output failure | pass: retained failure produces `PARTIAL`, exit 2 |
213
+ | G. Insufficient data | pass: no invented fact; default 0 and strict 2 |
214
+ | H. Offline | pass: local facts only, limitations visible, no fabricated confidence |
215
+ | I. Cancellation | pass: controlled cancellation exits 130 |
216
+ | J. Migration Checklist | pass: disabled by default, opt-in, identity-gated, bounded, human-reviewed, no patch/command execution |
217
+
218
+ ## 11. Completion and exit matrix
219
+
220
+ The installed-product projection contract and focused tests confirm:
221
+
222
+ | Completion | Default exit | `--fail-on-incomplete` |
223
+ | --- | ---: | ---: |
224
+ | `COMPLETED` | 0 | 0 |
225
+ | `COMPLETED_WITH_REVIEW` | 0 | 2 |
226
+ | `INSUFFICIENT_DATA` | 0 | 2 |
227
+ | `PARTIAL` | 2 | 2 |
228
+ | `FAILED` | 1 | 1 |
229
+ | `CANCELLED` | 130 | 130 |
230
+
231
+ Zero actions and an all-`KEEP_CURRENT` result remain successful.
232
+
233
+ ## 12. Migration qualification boundary
234
+
235
+ The ignored machine-readable record was inspected read-only through bounded
236
+ metadata fields, never copied into the package, sample, or report. It is schema
237
+ version `1.0.0`, verdict `QUALIFIED`, generated
238
+ `2026-07-17T03:32:16.710Z`, with:
239
+
240
+ - task `migration-planning.v2`;
241
+ - runtime mode `real`;
242
+ - provider/adapter `openai-compatible`;
243
+ - exact model `openai/gpt-5.5`;
244
+ - dataset `migration-planning-golden@2.0.0` and its digest;
245
+ - evaluation-criteria, policy, prompt, candidate-schema, comparator, normalization,
246
+ and deterministic-presentation identities/digests;
247
+ - 15/15 critical gates passed, every threshold passed, no record limitation;
248
+ - canonical record digest
249
+ `sha256:e55b2d6f2f82091f5ce321e3e6b3a36cab8a34ea7608464ccd08b8ef49813847`.
250
+
251
+ The supported resolver/materialization tests passed for valid, missing, invalid,
252
+ tampered, mismatched, and non-qualified records. The record is ignored/local and
253
+ absent from clean checkout and npm package by policy. Public default analysis does
254
+ not require it. Experimental Checklist users must provide an exact matching record;
255
+ missing default qualification is surfaced honestly, while an invalid explicit path
256
+ never falls back.
257
+
258
+ This qualification does not generalize to another model, model version, provider,
259
+ endpoint, adapter, local runtime, or all OpenAI-compatible services. No real-provider
260
+ replay was needed because identity and retained evidence remained valid.
261
+
262
+ ## 13. Community, security, conduct, and support readiness
263
+
264
+ | Surface | Result |
265
+ | --- | --- |
266
+ | `CONTRIBUTING.md` | clone/install/test/guard/help commands and trust invariants are accurate |
267
+ | Security | GitHub API returned HTTP 200 with Private Vulnerability Reporting `enabled: true` |
268
+ | Conduct | `upgradelens.conduct@gmail.com` is the maintainer-confirmed private contact |
269
+ | Support | bounded routing matrix; no production SLA or private-source request |
270
+ | Bug form | version, environment, completion, minimal sanitized reproduction, privacy acknowledgements |
271
+ | Feature form | problem/workflow, trust boundary, alternatives, privacy acknowledgement |
272
+ | PR template | scope, validation, package, schema, privacy, determinism, human ownership |
273
+ | Public disclosure safety | vulnerabilities never routed to a public issue |
274
+
275
+ Blank issues are disabled. GitHub Discussions remains unavailable, but README/issue
276
+ search is an explicit best-effort usage route. No form requests a credential, full
277
+ private artifact directory, private source, or raw provider payload.
278
+
279
+ ## 14. Feedback questions
280
+
281
+ README, CONTRIBUTING, and the release-note draft now ask the Technical Preview
282
+ questions that matter:
283
+
284
+ 1. Are decisions understandable and actionable?
285
+ 2. Is `INVESTIGATE` too frequent or too rare?
286
+ 3. Is the installed baseline correct in real npm workspaces/monorepos?
287
+ 4. Is ambiguity and copy/paste selector UX usable?
288
+ 5. Are coverage limitations clear enough to prevent false confidence?
289
+ 6. Does the migration handoff reduce re-research?
290
+ 7. Are completion states and exit codes useful in CI?
291
+ 8. Which artifacts help code review and team planning?
292
+
293
+ No question implies that autonomous migration is part of v0.5.0.
294
+
295
+ ## 15. npm registry and package-name check
296
+
297
+ An unauthenticated read-only request to
298
+ `https://registry.npmjs.org/upgradelens` returned HTTP 404 `Not found` on
299
+ 2026-07-19. Therefore neither the package name nor `upgradelens@0.5.0` had a public
300
+ registry record at observation time. No reservation, login, ownership mutation, or
301
+ publish was attempted.
302
+
303
+ The 404 removes a known prior-owner/version collision, but it does not prove that
304
+ the maintainer's npm account is publish-ready or guarantee the name remains
305
+ available later. Recheck immediately before the authorized publish.
306
+
307
+ ## 16. Recommended release strategy
308
+
309
+ **Recommendation: Option B — publish `upgradelens@0.5.0` under npm dist-tag
310
+ `preview`, never `latest`, after the refreshed exact-SHA gate passes.**
311
+
312
+ Rationale:
313
+
314
+ - `0.5.0` is already consistently committed in package metadata, lockfile, CLI,
315
+ docs, and hosted qualification;
316
+ - the package/version is currently unpublished, so a non-default tag can introduce
317
+ the exact qualified bytes without silently changing version metadata;
318
+ - `preview` matches the Public Technical Preview label and avoids stable-channel
319
+ expectations;
320
+ - source-only GitHub installation remains available, but npm preview gives external
321
+ developers a reproducible install boundary;
322
+ - Option C would require an explicit version-change task and complete
323
+ requalification; Option A is safer than `latest` but provides a less representative
324
+ install experience.
325
+
326
+ The maintainer still owns the release decision. The release workflow must recheck
327
+ registry state, verify the final packed digest from the committed checkout, publish
328
+ with the explicit non-default tag, and verify that `latest` was not moved. OSS-05
329
+ does none of those mutations.
330
+
331
+ ## 17. Release-notes draft status
332
+
333
+ `docs/releases/v0.5.0-technical-preview.md` is created and publication-ready for the
334
+ recommended `preview` strategy. It begins with the Technical Preview label and
335
+ contains value, install/source paths, zero-secret sample, MVP-05 capabilities,
336
+ supported scope, limitations, human-review boundaries, community/security routes,
337
+ feedback questions, and validation summary. It makes no autonomous-migration or
338
+ production-safety claim and has no unresolved placeholder.
339
+
340
+ ## 18. Branch-protection handoff
341
+
342
+ Unauthenticated read-only GitHub API checks for `main` and `develop` protection each
343
+ returned HTTP 401 `Requires authentication`; no PAT or repository setting was read
344
+ or changed. Protection is therefore **not verified**, rather than claimed absent.
345
+
346
+ Before or immediately after the first preview publication, the maintainer should:
347
+
348
+ - require pull requests before merging to `main`;
349
+ - require the stable hosted CI checks that actually appear on PR #9;
350
+ - block force pushes and branch deletion;
351
+ - require conversation resolution if it fits the solo-maintainer workflow;
352
+ - apply an appropriate `develop` policy without inventing a nonexistent check name.
353
+
354
+ This is a Medium governance limitation, not an automatic Technical Preview product
355
+ blocker. The immediate block is the exact-SHA hosted refresh.
356
+
357
+ ## 19. Tests and validations
358
+
359
+ | Validation | Result |
360
+ | --- | --- |
361
+ | Clean detached `npm ci` | pass |
362
+ | Canonical suite | 633 total: 632 pass, 0 fail, 1 known skip |
363
+ | Representative workflow/decision/CLI focus | 90/90 pass |
364
+ | Package-guard focus | 18/18 pass |
365
+ | CI/package-metadata focus | 6/6 pass |
366
+ | Package guard | 234 files, 0 suspicious, 20 required assets |
367
+ | Repeated dry-run/actual pack | pass; normalized inventory and bytes stable |
368
+ | Actual extraction and scan | pass |
369
+ | Clean tarball install | pass |
370
+ | Installed version/help/import/exports | pass / pass / pass / 438 |
371
+ | Sample discovery/offline/default/strict | pass / `INSUFFICIENT_DATA` / 0 / 2 |
372
+ | Schema, lineage, tamper, identity, determinism | pass through canonical and focused suites |
373
+ | Hosted exact-SHA CI | all four jobs success |
374
+ | npm registry read-only check | 404, unpublished |
375
+ | Private Vulnerability Reporting | HTTP 200, enabled |
376
+
377
+ `git diff --check`, YAML parsing, Markdown relative-link checks, placeholder scans,
378
+ package guard, and package-boundary checks are rerun after report creation; their
379
+ final state is recorded in the handoff response rather than used to claim hosted
380
+ coverage for local files.
381
+
382
+ ## 20. Blocked and skipped checks
383
+
384
+ - Final hosted CI for the OSS-05 documentation/sample candidate is blocked until a
385
+ maintainer reviews, commits, and pushes those changes.
386
+ - Final tarball digest for that future commit is intentionally not claimed.
387
+ - Branch protection details require authenticated administration access and were
388
+ not inspected with a token.
389
+ - The one canonical skip is the unchanged sandbox restriction on a local loopback
390
+ listener; hosted Node jobs pass.
391
+ - Direct full-suite execution in a Git-less source archive has one Git-correlation
392
+ assertion failure; the dedicated archive structural guard passes.
393
+ - No real-provider replay, advisory submission, conduct email, merge, tag, release,
394
+ publish, external sample push, or repository-setting mutation was performed.
395
+
396
+ ## 21. Defects by severity
397
+
398
+ ### Blocker/High
399
+
400
+ No Blocker or High product, security, trust, package, workflow, or community-route
401
+ defect was found in the exact qualification SHA.
402
+
403
+ The qualification itself remains blocked by required evidence freshness: the
404
+ completed OSS-05 onboarding/release documents are not yet an immutable PR head with
405
+ hosted CI. This is a release-process block, not a hidden product pass.
406
+
407
+ ### Medium
408
+
409
+ - Branch protection is not publicly verifiable without authentication.
410
+ - GitHub Discussions is disabled; usage questions use README and issue search.
411
+ - The sample is source-repository-only rather than npm-package content.
412
+ - Downloaded Git-less source archives cannot run one strict Git-correlation test,
413
+ though package structural mode and packaged runtime work.
414
+
415
+ ### Low
416
+
417
+ None open.
418
+
419
+ ## 22. Known limitations
420
+
421
+ Technical Preview limitations remain explicit: npm lockfile v2/v3 is the primary
422
+ installed-baseline path; pnpm/Yarn and Python installed environments are
423
+ unsupported; source usage is JavaScript/TypeScript-only; detected ecosystems are
424
+ not automatically supported; offline mode may be insufficient; provider/model
425
+ quality varies; Migration Checklist qualification is exact-identity-specific;
426
+ verification commands are not executed; source is not modified; and recovery is not
427
+ invented.
428
+
429
+ Node 20 remains the declared compatibility floor and hosted matrix member even
430
+ though its upstream lifecycle has ended; Node 22/24 are also hosted-qualified.
431
+
432
+ ## 23. Exact files created or changed
433
+
434
+ Created:
435
+
436
+ - `examples/technical-preview-node/README.md`
437
+ - `examples/technical-preview-node/package.json`
438
+ - `examples/technical-preview-node/package-lock.json`
439
+ - `examples/technical-preview-node/src/index.js`
440
+ - `docs/releases/v0.5.0-technical-preview.md`
441
+ - `docs/reviews/oss-05-technical-preview-qualification.md`
442
+
443
+ Changed:
444
+
445
+ - `README.md` — zero-secret sample path, corrected 632-pass baseline, and concise
446
+ feedback guidance.
447
+
448
+ No production source, schema, policy, version, workflow, lockfile root, dependency,
449
+ branch setting, tag, or release was changed.
450
+
451
+ ## 24. Pre-existing changes preserved
452
+
453
+ All pre-existing RR02 capture work remains untouched:
454
+
455
+ - the modified `docs/rr02-rerun-cli-captures/manifest.json`;
456
+ - the untracked `docs/rr02-fix-05-cli-captures/` tree;
457
+ - the untracked numeric-copy files under rerun capture 003;
458
+ - the untracked rerun capture directories 008 through 018.
459
+
460
+ Those paths were excluded from clean qualification and npm packaging. OSS-05 did
461
+ not delete, normalize, stage, rewrite, or include them.
462
+
463
+ ## 25. Final gate and next human actions
464
+
465
+ **Final gate: `HOSTED_CI_REFRESH_REQUIRED`**
466
+
467
+ The maintainer should:
468
+
469
+ 1. review only the seven OSS-05 files listed above, keeping RR02 work separate;
470
+ 2. commit and push the intended OSS-05 candidate to PR #9;
471
+ 3. confirm local, remote, PR head, and the new hosted run all equal one SHA;
472
+ 4. require Node 20/22/24 and package smoke to pass again and confirm zero artifacts;
473
+ 5. rerun actual pack/install/CLI/import from that committed SHA and record its final
474
+ manifest/digest;
475
+ 6. change the verdict to qualified only if no Blocker/High appears;
476
+ 7. explicitly approve Option B or choose another strategy;
477
+ 8. merge/tag/release/publish only in the separately authorized release workflow;
478
+ 9. if Option B is chosen, recheck npm name/version state and publish with the
479
+ explicit `preview` tag without moving `latest`;
480
+ 10. configure or confirm branch protection through an authorized settings review.
481
+
482
+ Until steps 1–5 pass at one immutable SHA: **do not proceed to public preview**.