@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,439 @@
1
+ # OSS-04 — Public CI and Package Metadata
2
+
3
+ ## 1. Executive verdict
4
+
5
+ **Current verdict after OSS-04-FIX: `WORKFLOW_PUSH_AND_HOSTED_CI_VERIFIED`**
6
+
7
+ UpgradeLens now has a read-only public CI contract for pull requests, `main`,
8
+ `develop`, and manual dispatch. It validates Node 20, 22, and 24, runs the canonical
9
+ suite and actual-manifest package guard, and performs a clean installed-package
10
+ smoke on Node 24. Public npm metadata now describes the decision-first,
11
+ evidence-bounded CLI and links to the canonical repository, README, and issue
12
+ tracker.
13
+
14
+ Static validation and local matrix replay pass with the documented Node 20
15
+ concurrency bound. OSS-04-FIX subsequently pushed the workflow commit and verified
16
+ all intended jobs on GitHub Actions; section 22 records the hosted evidence.
17
+
18
+ ## 2. Previous CI and metadata gaps
19
+
20
+ Before OSS-04:
21
+
22
+ - `.github/workflows/` did not exist;
23
+ - pull requests and long-lived branches had no public automated gate;
24
+ - the npm description still described generic project discovery;
25
+ - keywords emphasized discovery and modernization rather than the current product;
26
+ - npm metadata had no homepage or bug-tracker URL;
27
+ - package/install/CLI/import verification existed only in release-review evidence,
28
+ not in a public workflow.
29
+
30
+ The repository URL, version, engine, bin, export, files, type, and license were
31
+ already correct.
32
+
33
+ ## 3. Architecture decision
34
+
35
+ The complete decision is recorded in
36
+ `docs/oss-04-public-ci-package-metadata-architecture.md`. The design uses one
37
+ supported-Node matrix job and one Node 24 package-smoke job. It keeps test,
38
+ packaging, and consumer-install behavior visible as ordinary npm/Node commands and
39
+ adds no deployment, publishing, release, or dependency-update automation.
40
+
41
+ ## 4. Workflow triggers and permissions
42
+
43
+ | Contract | Decision |
44
+ | --- | --- |
45
+ | Pull requests | Every `pull_request` |
46
+ | Pushes | `main` and `develop`, matching verified local and remote long-lived branches |
47
+ | Manual | `workflow_dispatch` enabled |
48
+ | Schedule | None; no time-based check is in scope |
49
+ | Workflow token | `contents: read` only |
50
+ | PR model | Ordinary `pull_request`; never `pull_request_target` |
51
+ | Checkout credentials | `persist-credentials: false` |
52
+
53
+ No job has package, identity-token, security-event, issue, pull-request, or content
54
+ write permission.
55
+
56
+ ## 5. Node matrix and official support evidence
57
+
58
+ The project engine remains `>=20`; OSS-04 does not narrow it.
59
+
60
+ | Node | Role at the OSS-04 decision date | Upstream end date | CI behavior |
61
+ | ---: | --- | --- | --- |
62
+ | 20 | Declared compatibility floor; upstream EOL | 2026-04-30 | Full suite with test-runner concurrency 2 |
63
+ | 22 | Maintenance LTS | 2027-04-30 | Full canonical `npm test` |
64
+ | 24 | Active LTS and primary release line | 2028-04-30 | Full canonical tests plus package smoke |
65
+
66
+ Evidence is the official
67
+ [Node.js release schedule](https://github.com/nodejs/Release/blob/main/schedule.json).
68
+ Node 26 is Current and is not scheduled to enter LTS until October 2026, so it is not
69
+ a mandatory Technical Preview gate.
70
+
71
+ Local replay initially found one Node 20 keep-alive lifecycle test exceeding its
72
+ unchanged three-second natural-exit budget under default full-suite concurrency. The
73
+ test passed alone in 1.25 seconds, and the complete 633-test suite passed with
74
+ `--test-concurrency=2`. CI applies that bound only to Node 20. No test is skipped,
75
+ its timeout is not increased, and Node 22/24 retain the plain canonical command.
76
+
77
+ ## 6. Action pinning policy
78
+
79
+ Only GitHub-maintained actions are used:
80
+
81
+ | Action | Immutable reference | Reviewed release line |
82
+ | --- | --- | --- |
83
+ | `actions/checkout` | `df4cb1c069e1874edd31b4311f1884172cec0e10` | `v6` |
84
+ | `actions/setup-node` | `249970729cb0ef3589644e2896645e5dc5ba9c38` | `v6` |
85
+
86
+ The references were resolved from the official repositories at implementation time.
87
+ Full commit SHAs prevent a moving tag from changing executed code without a
88
+ repository diff. Updates require a reviewed pull request.
89
+
90
+ ## 7. Install, test, and package-smoke flow
91
+
92
+ Every matrix entry performs:
93
+
94
+ 1. checkout without persisted credentials;
95
+ 2. setup of its exact Node major and npm lockfile cache;
96
+ 3. `npm ci`;
97
+ 4. the full canonical test script;
98
+ 5. `npm run check:package` against an actual lifecycle-disabled tarball.
99
+
100
+ The primary Node 24 package job additionally performs:
101
+
102
+ 1. `npm pack --dry-run --json --ignore-scripts`;
103
+ 2. actual tarball creation in isolated temporary output/cache;
104
+ 3. actual-manifest package-guard validation;
105
+ 4. tar extraction and manifest-to-filesystem equality;
106
+ 5. clean temporary install with lifecycle scripts disabled;
107
+ 6. installed CLI `--version` and `--help`;
108
+ 7. ESM import and the 438-public-export assertion;
109
+ 8. unconditional cleanup in `finally`.
110
+
111
+ No tarball is uploaded or retained as a GitHub Actions artifact.
112
+
113
+ ## 8. Fork, security, and provider isolation
114
+
115
+ The workflow uses no `secrets` expression and gives fork pull requests only the
116
+ read-only token. It does not interpolate PR title, body, branch, labels, actor input,
117
+ or other PR-controlled text into shell commands.
118
+
119
+ `CI=true` is explicit. Supported UpgradeLens provider variables are shadowed with
120
+ empty values at workflow scope, and the package-smoke subprocess environment removes
121
+ them. Deterministic tests inject their own fakes where needed. CI does not need
122
+ OpenAI, OpenRouter, Anthropic, Ollama, an API key, `.env`, a persisted qualification
123
+ record, or private repository access.
124
+
125
+ ## 9. Lifecycle and side-effect review
126
+
127
+ `package.json` has no `prepack`, `prepare`, `prepublishOnly`, `preinstall`,
128
+ `install`, or `postinstall` hook. The package guard and smoke pack with
129
+ `--ignore-scripts`; clean consumer installation also disables lifecycle scripts.
130
+ There is no package-guard recursion.
131
+
132
+ The workflow contains no publish, pack upload, Git commit, tag, push, release,
133
+ deployment, PR comment, lockfile writeback, or repository API write. It has neither
134
+ the command nor permission/credential path needed to publish.
135
+
136
+ Concurrency uses the workflow name and stable Git ref with
137
+ `cancel-in-progress: true`. Each job has a 20-minute timeout. No command or provider
138
+ can hang without a finite job boundary.
139
+
140
+ ## 10. Package metadata before and after
141
+
142
+ | Field | Before | After |
143
+ | --- | --- | --- |
144
+ | Description | Generic project structure/technology discovery | Decision-first CLI for evidence-bounded dependency upgrade analysis |
145
+ | Repository | Canonical GitHub Git URL | Unchanged |
146
+ | Homepage | Missing | Canonical GitHub README |
147
+ | Bugs | Missing | Canonical GitHub Issues |
148
+ | Keywords | discovery, migration, modernization, cli | cli, dependency-upgrades, migration-planning, repository-analysis, developer-tools |
149
+ | Version | `0.5.0` | `0.5.0` |
150
+ | Engine | `>=20` | `>=20` |
151
+
152
+ The npm issue URL handles ordinary bugs and does not replace the private security
153
+ route documented in `SECURITY.md`.
154
+
155
+ Name, license, type, bin, export, package files, dependency tree, and runtime
156
+ behavior are unchanged. No author email, funding URL, unsupported ecosystem claim,
157
+ or production-stability claim was invented.
158
+
159
+ ## 11. Lockfile impact
160
+
161
+ `npm install --package-lock-only --ignore-scripts --no-audit --no-fund` reported the
162
+ tree up to date and produced no `package-lock.json` diff. npm's lockfile v3 root
163
+ record does not mirror description, homepage, bug URL, or keywords. Version,
164
+ dependencies, resolved URLs, integrity values, bin, license, and engine remain
165
+ unchanged.
166
+
167
+ ## 12. Focused and static workflow validation
168
+
169
+ The focused CI/metadata suite passes 6/6 and verifies:
170
+
171
+ - PR, push-branch, and manual triggers;
172
+ - absence of `pull_request_target`;
173
+ - read-only permission and non-persisted checkout credentials;
174
+ - immutable official action references;
175
+ - Node 20/22/24 matrix;
176
+ - `npm ci`, canonical tests, package guard, dry-run pack, and package smoke;
177
+ - timeout, cache, concurrency, and cancellation;
178
+ - no secret expression or publish/release/write command;
179
+ - exact description, URLs, keywords, version, engine, and lockfile version.
180
+
181
+ Ruby Psych parses the workflow YAML successfully. Manual security review confirms
182
+ that all expressions are GitHub-owned matrix/ref values used by Actions keys, not
183
+ untrusted event text passed into shell.
184
+
185
+ ## 13. Canonical, package, and install validation
186
+
187
+ | Check | Result |
188
+ | --- | --- |
189
+ | Focused CI/metadata tests | 6/6 pass |
190
+ | Focused package guard | 18/18 pass |
191
+ | Canonical local suite | 633 total: 632 pass, 0 fail, 1 known sandbox-loopback skip |
192
+ | Node 20 local matrix replay | Pass with concurrency 2; 633 tests executed |
193
+ | Node 22 local matrix replay | Pass; 633 tests executed |
194
+ | Node 24 local matrix replay | Pass; 633 tests executed |
195
+ | Package guard | Pass; 0 suspicious artifacts, 20 required assets |
196
+ | Actual extraction | Pass; extracted paths equal actual tar entries |
197
+ | Clean tarball install | Pass |
198
+ | Installed CLI | `--version` returns `0.5.0`; `--help` exits zero |
199
+ | ESM package import | Pass |
200
+ | Public exports | 438 |
201
+ | Schema/evaluation identity | Pass through canonical schema, dataset, lineage, and determinism coverage |
202
+ | Provider calls | 0 |
203
+
204
+ The local default-runtime canonical run retains the known skip because this sandbox
205
+ does not permit its loopback listener. Escalated Node matrix replay executes the
206
+ listener test rather than accepting an unexpected skip.
207
+
208
+ ## 14. Tarball delta
209
+
210
+ The OSS-03 explained package contained 232 files. OSS-04 intentionally adds two
211
+ published documents:
212
+
213
+ - `docs/oss-04-public-ci-package-metadata-architecture.md`;
214
+ - `docs/reviews/oss-04-public-ci-package-metadata.md`.
215
+
216
+ The final explained package therefore contains 234 files. The workflow, repository
217
+ smoke helper, and focused test remain outside the `files` allowlist. Metadata changes
218
+ modify `package/package.json` content but do not add a path. Root community policies
219
+ and `.github/` remain absent from npm.
220
+
221
+ Repeated dry-run manifests, the final actual tarball, extraction, and suspicious
222
+ artifact scan are required to agree on this 234-file boundary.
223
+
224
+ ## 15. Hosted CI execution status
225
+
226
+ **Local status: `LOCAL_CI_CONTRACT_VALIDATED`**
227
+
228
+ **Hosted status after OSS-04-FIX: `HOSTED_CI_VERIFIED`**
229
+
230
+ GitHub Actions run
231
+ `https://github.com/thomasMinh1995/UpgradeLens/actions/runs/29675936431`
232
+ completed successfully for
233
+ `b3f5880096ab0ddd5713d50c1dc83b32666a829d`. Section 22 records the job-level
234
+ evidence and authentication boundary.
235
+
236
+ ## 16. Branch-protection handoff
237
+
238
+ After an authorized commit:
239
+
240
+ 1. push the task branch;
241
+ 2. open or update its pull request;
242
+ 3. observe `Node 20`, `Node 22`, `Node 24`, and `Package smoke (Node 24)`;
243
+ 4. confirm no secret prompt or permission escalation appears;
244
+ 5. confirm every canonical, guard, and package-smoke step passes;
245
+ 6. record the Actions run URL and exact commit SHA;
246
+ 7. do not merge if a required job fails or unexpectedly skips coverage.
247
+
248
+ Only after those check names have run should maintainers consider requiring them for
249
+ merge. Recommended branch policy is required CI on `main`, appropriate up-to-date
250
+ enforcement for the repository's merge flow, and blocked force pushes/deletions.
251
+ OSS-04 does not configure branch protection through an API.
252
+
253
+ ## 17. Blocked and skipped checks
254
+
255
+ The original OSS-04 task intentionally stopped before commit/push. OSS-04-FIX
256
+ completed the maintainer-authenticated push and hosted run. One default local
257
+ canonical test is skipped only because the restricted sandbox cannot bind its
258
+ loopback listener; matrix diagnostics and hosted jobs pass.
259
+
260
+ The unauthenticated public GitHub endpoint for raw job-log download returned HTTP
261
+ 403 requiring repository administration. No token was supplied to the verifier.
262
+ Public run, job, check, step, commit, PR, workflow-content, and artifact endpoints
263
+ provided sufficient acceptance evidence.
264
+
265
+ No real provider, npm publish, GitHub Release, tag, deployment, branch-protection
266
+ mutation, or package upload was attempted.
267
+
268
+ ## 18. Defects and limitations
269
+
270
+ | Severity | Count | Detail |
271
+ | --- | ---: | --- |
272
+ | Blocker | 0 | None |
273
+ | High | 0 | None after local matrix and package replay |
274
+ | Medium | 0 | None |
275
+ | Low/accepted limitation | 1 | Node 20 is upstream EOL and remains only the declared compatibility floor |
276
+
277
+ The Node 20 concurrency bound mitigates a demonstrated test-runner resource flake
278
+ without changing behavior or suppressing a test. A hosted failure remains a
279
+ required stop condition, not an accepted baseline.
280
+
281
+ ## 19. Exact files changed or created
282
+
283
+ - Created `.github/workflows/ci.yml`.
284
+ - Created `scripts/ci-package-smoke.mjs`.
285
+ - Created `test/ci-workflow-metadata.test.js`.
286
+ - Created `docs/oss-04-public-ci-package-metadata-architecture.md`.
287
+ - Created `docs/reviews/oss-04-public-ci-package-metadata.md`.
288
+ - Modified `package.json`.
289
+
290
+ No runtime, schema, dataset, evaluation fixture, package version, dependency,
291
+ lockfile, README, community route, qualification record, or historical capture was
292
+ changed.
293
+
294
+ ## 20. Pre-existing changes preserved
295
+
296
+ The initial branch was `fix/public-preview-readiness` at
297
+ `b498d52aea073211b10804c8507a37895b3f543e`. The pre-existing modified RR02 rerun
298
+ manifest, RR02/RR02-FIX-05 captures, retained numeric-suffix capture copies, ignored
299
+ material, and all historical evidence were left untouched.
300
+
301
+ No destructive Git command, commit, merge, tag, push, release, publish, provider
302
+ call, target-repository mutation, or qualification regeneration was performed.
303
+
304
+ ## 21. Final verdict and next gate
305
+
306
+ **Verdict: `WORKFLOW_PUSH_AND_HOSTED_CI_VERIFIED`**
307
+
308
+ The workflow contract, permissions, fork safety, provider isolation, supported Node
309
+ matrix, package boundary, clean consumer install, CLI, import/export contract,
310
+ metadata, lockfile consistency, and local validation pass. Package version remains
311
+ `0.5.0`; no Blocker or High defect is open.
312
+
313
+ **Gate: `PROCEED_TO_OSS_05_TECHNICAL_PREVIEW_QUALIFICATION`**
314
+
315
+ OSS-05 may use the exact hosted evidence recorded below. This does not authorize a
316
+ merge, tag, release, or npm publish.
317
+
318
+ ## 22. OSS-04-FIX workflow push and hosted verification addendum
319
+
320
+ ### 22.1 Original push failure
321
+
322
+ GitHub rejected the first HTTPS push because the OAuth App credential selected by
323
+ the existing credential flow could push ordinary source but could not create
324
+ `.github/workflows/ci.yml`. The local commit remained intact; the workflow and Git
325
+ history were not rewritten or removed.
326
+
327
+ ### 22.2 Root cause
328
+
329
+ The rejected credential lacked permission to update GitHub Actions workflow files.
330
+ Static YAML and focused workflow checks passed before authentication changed, so
331
+ this was a credential-capability failure rather than a workflow-content defect.
332
+
333
+ ### 22.3 Authentication method
334
+
335
+ The maintainer created a fine-grained personal access token limited to UpgradeLens,
336
+ entered it directly through the protected HTTPS credential prompt, and used the
337
+ configured macOS Keychain credential path. The token value, prefix, suffix, and
338
+ Keychain content were never provided to or accessed by Codex.
339
+
340
+ ### 22.4 Granted permission names
341
+
342
+ The maintainer-approved token scope was:
343
+
344
+ - repository access: UpgradeLens only;
345
+ - `Contents: Read and write`;
346
+ - `Workflows: Read and write`;
347
+ - `Metadata: Read` automatically.
348
+
349
+ No Administration, Actions write, Packages write, Secrets, Issues write, or Pull
350
+ requests write permission was required by this task.
351
+
352
+ ### 22.5 Local and remote commit identity
353
+
354
+ | Location | Commit |
355
+ | --- | --- |
356
+ | Local `HEAD` | `b3f5880096ab0ddd5713d50c1dc83b32666a829d` |
357
+ | Remote `fix/public-preview-readiness` | `b3f5880096ab0ddd5713d50c1dc83b32666a829d` |
358
+
359
+ The exact SHA equality was verified through the public remote ref after the
360
+ maintainer push. The canonical HTTPS remote contains no embedded username or
361
+ credential.
362
+
363
+ ### 22.6 Push outcome
364
+
365
+ The non-force branch push succeeded. No rebase, merge, amend, tag, release, package
366
+ publish, or other remote write was performed. Pre-existing local capture and
367
+ manifest changes remained outside the pushed commit.
368
+
369
+ ### 22.7 Workflow run and event
370
+
371
+ - Workflow: `CI`
372
+ - Run: `https://github.com/thomasMinh1995/UpgradeLens/actions/runs/29675936431`
373
+ - Event: `pull_request`
374
+ - Pull request: `https://github.com/thomasMinh1995/UpgradeLens/pull/9`
375
+ - Base/head: `develop` ← `fix/public-preview-readiness`
376
+ - Head SHA: `b3f5880096ab0ddd5713d50c1dc83b32666a829d`
377
+ - Run status/conclusion: `completed` / `success`
378
+ - Attempt: 1
379
+
380
+ The workflow file is present on the remote branch at the expected path and blob.
381
+
382
+ ### 22.8 Hosted Node and job results
383
+
384
+ | Job | Conclusion |
385
+ | --- | --- |
386
+ | `Node 20` | `success` |
387
+ | `Node 22` | `success` |
388
+ | `Node 24` | `success` |
389
+ | `Package smoke (Node 24)` | `success` |
390
+
391
+ The alternate Node test step skipped by each matrix condition is expected: Node 20
392
+ runs the bounded-concurrency command, while Node 22/24 run the plain canonical
393
+ command. No intended job or required package step was skipped.
394
+
395
+ ### 22.9 Hosted package, test, and smoke results
396
+
397
+ The public jobs API records successful completion of:
398
+
399
+ - checkout and supported Node setup;
400
+ - deterministic `npm ci` in every job;
401
+ - the full selected canonical test command on Node 20, 22, and 24;
402
+ - `npm run check:package` on every Node matrix entry;
403
+ - dry-run npm package manifest on Node 24;
404
+ - actual pack, manifest inspection, clean install, installed CLI version/help, ESM
405
+ import, and export-contract smoke.
406
+
407
+ No package artifact was uploaded; the run reports zero retained artifacts.
408
+
409
+ ### 22.10 Security checks
410
+
411
+ The remote URL remains the canonical credential-free HTTPS URL. The remote workflow
412
+ retains `contents: read`, ordinary `pull_request`, non-persisted checkout
413
+ credentials, empty provider environment variables, immutable official action SHAs,
414
+ and no secrets expression, publish, tag, release, push, or writeback command.
415
+
416
+ No provider key, repository secret, private qualification record, `.env`, or real
417
+ provider was required. The verifier used only public read-only GitHub API endpoints
418
+ and never accessed the fine-grained token.
419
+
420
+ ### 22.11 Blocked, skipped, and report-only state
421
+
422
+ Raw job-log download through the unauthenticated endpoint returned HTTP 403 and was
423
+ not retried with maintainer credentials. This does not block acceptance because the
424
+ public run/job/check APIs expose the exact SHA, event, terminal conclusion, all four
425
+ jobs, and each required step conclusion.
426
+
427
+ This addendum was written after the successful hosted run. It is a local report-only
428
+ follow-up and is not part of the already verified commit. It does not require an
429
+ immediate push-and-monitor loop and does not alter the hosted workflow evidence.
430
+
431
+ ### 22.12 Final verdict and gate
432
+
433
+ **Verdict: `WORKFLOW_PUSH_AND_HOSTED_CI_VERIFIED`**
434
+
435
+ **Gate: `PROCEED_TO_OSS_05_TECHNICAL_PREVIEW_QUALIFICATION`**
436
+
437
+ Local and remote workflow SHAs match, the remote workflow exists, the exact hosted
438
+ run succeeded across every intended job, package smoke passed, no provider secret
439
+ was required, and no Blocker or High defect remains.