@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.
- package/LICENSE +21 -0
- package/README.md +518 -0
- package/bin/depverdict.js +7 -0
- package/bin/upgradelens.js +7 -0
- package/docs/GR-01-Semantic-Grounding-Failure-Analysis.md +309 -0
- package/docs/GR-02-Versioned-Action-Evaluation-Criteria.md +187 -0
- package/docs/GR-03-Extractive-Contract-Safety-Experiment.md +242 -0
- package/docs/GR-04-Versioned-Production-Extractive-Contract.md +154 -0
- package/docs/IA-01-Repository-Usage-Discovery.md +122 -0
- package/docs/IA-02-Repository-Impact-Analysis.md +118 -0
- package/docs/IA-03-Repository-Impact-Evidence.md +160 -0
- package/docs/IA-04-CLI-Orchestration.md +235 -0
- package/docs/IA-05-Real-Provider-Validation.md +235 -0
- package/docs/IA-05-VinGrade-Validation.md +339 -0
- package/docs/MVP-01.md +48 -0
- package/docs/MVP-02-Architecture.md +536 -0
- package/docs/MVP-02-CLI-HTTP-Runtime.md +50 -0
- package/docs/MVP-02-HTTP-Lifecycle.md +37 -0
- package/docs/MVP-02-Knowledge-Manifest-Generation.md +75 -0
- package/docs/MVP-02-Knowledge-Manifest.md +279 -0
- package/docs/MVP-02-Knowledge-Research-Orchestration.md +62 -0
- package/docs/MVP-02-Knowledge-Store.md +87 -0
- package/docs/MVP-02-PyPI-Registry-Adapter.md +97 -0
- package/docs/MVP-02-Research-Planning.md +196 -0
- package/docs/MVP-02-Source-Provenance.md +81 -0
- package/docs/MVP-02-npm-Registry-Adapter.md +99 -0
- package/docs/RR-01-End-to-End-and-Real-Provider-Validation.md +393 -0
- package/docs/RR-01-RERUN-Extractive-Contract-Validation.md +566 -0
- package/docs/RR-02-Full-Product-Workflow-and-Developer-CLI-UX-Review.md +35 -0
- package/docs/RR02-FIX-01-Persistent-Qualification-Resolution.md +32 -0
- package/docs/RR02-FIX-02-Stage-aware-CLI-Progress-and-Heartbeat.md +28 -0
- package/docs/RR02-FIX-03-npm-Capture-Evidence-Exclusion.md +33 -0
- package/docs/RR02-FIX-03A-Complete-Package-Exclusion-and-Evidence-Commit.md +223 -0
- package/docs/RR02-FIX-04-Event-loop-safe-Heartbeat.md +393 -0
- package/docs/RR02-FIX-05-Materialize-Persisted-Qualification.md +207 -0
- package/docs/RR02-RERUN-CLI-Qualification-Progress-UX-and-Package-Validation.md +342 -0
- package/docs/VinGrade-MVP-02-Validation.md +480 -0
- package/docs/VinGrade-RC02-Live-Validation.md +273 -0
- package/docs/ai-capability-discovery.md +573 -0
- package/docs/ai-engineering-production-readiness.md +390 -0
- package/docs/ai-engineering-review.md +251 -0
- package/docs/ai-runtime-governance-discovery.md +754 -0
- package/docs/architecture-overview.md +78 -0
- package/docs/cli-progress.md +111 -0
- package/docs/decisions/diff-01-brand-distribution-identity.md +450 -0
- package/docs/decisions/diff-02-identity-compatibility-contract.md +274 -0
- package/docs/decisions/diff-03-repository-docs-community-migration.md +165 -0
- package/docs/decisions/diff-04-release-evidence-gap-acceptance.md +110 -0
- package/docs/discovery/mvp-05-ai-migration-planning-discovery.md +350 -0
- package/docs/gateway-runtime-discovery.md +614 -0
- package/docs/live-ai-validation.md +299 -0
- package/docs/migration-planning-qualification-resolution.md +99 -0
- package/docs/migrations/upgradelens-to-depverdict.md +97 -0
- package/docs/mp-r03-deterministic-upgrade-decision-architecture.md +135 -0
- package/docs/mp-r04-evidence-bounded-migration-handoff-architecture.md +116 -0
- package/docs/mp-r05-product-completion-and-decision-first-cli-architecture.md +162 -0
- package/docs/mvp-05-deterministic-context-runtime.md +127 -0
- package/docs/mvp-05-migration-checklist-contract.md +166 -0
- package/docs/mvp-05-migration-checklist-orchestration.md +105 -0
- package/docs/mvp-05-migration-evaluation-and-qualification.md +135 -0
- package/docs/mvp-05-provider-neutral-generator.md +79 -0
- package/docs/ollama-local-smoke-validation.md +156 -0
- package/docs/openai-compatible-runtime-discovery.md +789 -0
- package/docs/openrouter-one-dependency-validation.md +205 -0
- package/docs/oss-02-package-guard-hardening-architecture.md +131 -0
- package/docs/oss-04-public-ci-package-metadata-architecture.md +142 -0
- package/docs/package-content-policy.md +98 -0
- package/docs/releases/v0.5.0-technical-preview.md +114 -0
- package/docs/releases/v0.6.0-alpha.1-depverdict-preview.md +101 -0
- package/docs/reviews/diff-02-identity-contract-compatibility.md +413 -0
- package/docs/reviews/diff-03-repository-docs-community-migration.md +364 -0
- package/docs/reviews/diff-04-depverdict-distribution-identity-readiness-rereview.md +453 -0
- package/docs/reviews/diff-04-fix-post-rename-identity-release-remediation.md +310 -0
- package/docs/reviews/diff-05-final-preview-distribution-qualification.md +561 -0
- package/docs/reviews/mvp-05-final-product-value-workflow-rereview.md +471 -0
- package/docs/reviews/mvp-05-product-workflow-review.md +605 -0
- package/docs/reviews/oss-01-duplicate-artifact-investigation-cleanup.md +411 -0
- package/docs/reviews/oss-02-package-guard-hardening.md +303 -0
- package/docs/reviews/oss-03-community-scaffolding.md +378 -0
- package/docs/reviews/oss-04-public-ci-package-metadata.md +439 -0
- package/docs/reviews/oss-05-technical-preview-qualification.md +482 -0
- package/docs/reviews/upgradelens-vs-upgradedepdetective-source-comparison.md +355 -0
- package/docs/reviews/v0.5.0-pre-release-smoke.md +263 -0
- package/docs/reviews/v0.5.0-version-bump-release-verification.md +306 -0
- package/docs/runtime-contract-discovery.md +521 -0
- package/docs/structured-output-compatibility-report.md +100 -0
- package/docs/ts-fix-01-exact-duplicate-occurrence-target-selection-architecture.md +111 -0
- package/docs/version-analysis-architecture.md +827 -0
- package/eval/README.md +86 -0
- package/eval/datasets/generic/declared-constraint.json +59 -0
- package/eval/datasets/generic/evidence-conflict.json +73 -0
- package/eval/datasets/generic/major-breaking-release.json +66 -0
- package/eval/datasets/generic/missing-evidence.json +46 -0
- package/eval/datasets/generic/patch-release-low.json +59 -0
- package/eval/datasets/node/axios-patch-low.json +59 -0
- package/eval/datasets/node/react-major-breaking.json +66 -0
- package/eval/datasets/node/react-minor-compatibility.json +66 -0
- package/eval/datasets/python/fastapi-deprecation.json +66 -0
- package/eval/datasets/python/pydantic-major-breaking.json +66 -0
- package/eval/migration-planning/golden-dataset-v2.json +306 -0
- package/eval/migration-planning/golden-dataset.json +214 -0
- package/eval/schemas/expected-result.schema.json +88 -0
- package/eval/schemas/golden-case.schema.json +181 -0
- package/package.json +57 -0
- package/schemas/ai-scorecard.schema.json +132 -0
- package/schemas/benchmark-report.schema.json +189 -0
- package/schemas/benchmark.schema.json +55 -0
- package/schemas/capability-profile.schema.json +44 -0
- package/schemas/conformance-report.schema.json +150 -0
- package/schemas/deployment-profile.schema.json +64 -0
- package/schemas/evaluation-report.schema.json +158 -0
- package/schemas/knowledge-evidence-bundle.schema.json +150 -0
- package/schemas/knowledge-manifest.schema.json +548 -0
- package/schemas/metrics.schema.json +178 -0
- package/schemas/migration-checklist-extractive-candidate.schema.json +42 -0
- package/schemas/migration-checklist.schema.json +706 -0
- package/schemas/migration-evaluation-dataset-v2.schema.json +208 -0
- package/schemas/migration-evaluation-dataset.schema.json +204 -0
- package/schemas/migration-planning-qualification-record.schema.json +234 -0
- package/schemas/project-manifest.schema.json +308 -0
- package/schemas/qualification-record.schema.json +56 -0
- package/schemas/repository-impact-evidence.schema.json +232 -0
- package/schemas/repository-impact.schema.json +202 -0
- package/schemas/upgrade-decision.schema.json +273 -0
- package/schemas/usage-index.schema.json +179 -0
- package/schemas/version-analysis.schema.json +449 -0
- package/src/ai-runtime-debug.js +325 -0
- package/src/ai-runtime-error.js +42 -0
- package/src/ai-runtime.js +174 -0
- package/src/ai-scorecard.js +204 -0
- package/src/ai-version-analysis.js +484 -0
- package/src/artifact-root-compatibility.js +91 -0
- package/src/benchmark-report.js +111 -0
- package/src/benchmark-runner.js +191 -0
- package/src/canonical-json.js +69 -0
- package/src/cli.js +1299 -0
- package/src/conformance-report.js +158 -0
- package/src/conformance-runner.js +253 -0
- package/src/constants.js +73 -0
- package/src/cooperative-scheduler.js +79 -0
- package/src/dependencies.js +44 -0
- package/src/dependency-ai-context.js +625 -0
- package/src/detectors.js +253 -0
- package/src/discovery.js +234 -0
- package/src/ecosystem-version-adapter.js +294 -0
- package/src/environment-compatibility.js +77 -0
- package/src/evaluation-comparator.js +158 -0
- package/src/evaluation-report.js +76 -0
- package/src/evaluation-runner.js +248 -0
- package/src/evidence-source-adapter.js +472 -0
- package/src/files.js +89 -0
- package/src/governance-diagnostics.js +64 -0
- package/src/governance-loader.js +63 -0
- package/src/governance-metadata.js +346 -0
- package/src/governance-validator.js +360 -0
- package/src/http/bounded-fetch.js +278 -0
- package/src/http/cli-http-runtime.js +44 -0
- package/src/impact/input-loader.js +157 -0
- package/src/impact/matcher.js +40 -0
- package/src/impact/repository-impact.js +199 -0
- package/src/impact/runtime.js +24 -0
- package/src/impact/status.js +62 -0
- package/src/impact/writer.js +30 -0
- package/src/impact-evidence/input-loader.js +202 -0
- package/src/impact-evidence/repository-impact-evidence.js +234 -0
- package/src/impact-evidence/runtime.js +16 -0
- package/src/impact-evidence/writer.js +30 -0
- package/src/index.js +563 -0
- package/src/installed-version-baseline.js +196 -0
- package/src/knowledge-cache.js +324 -0
- package/src/knowledge-evidence-bundle.js +101 -0
- package/src/knowledge-evidence-producer.js +233 -0
- package/src/knowledge-manifest-builder.js +188 -0
- package/src/knowledge-manifest-writer.js +32 -0
- package/src/knowledge-manifest.js +255 -0
- package/src/knowledge-research.js +615 -0
- package/src/metrics-engine.js +205 -0
- package/src/migration-checklist/ai-candidate.js +320 -0
- package/src/migration-checklist/assembler.js +37 -0
- package/src/migration-checklist/context-runtime.js +828 -0
- package/src/migration-checklist/evaluation/action-criteria.js +244 -0
- package/src/migration-checklist/evaluation/comparator-v2.js +332 -0
- package/src/migration-checklist/evaluation/comparator.js +279 -0
- package/src/migration-checklist/evaluation/dataset-v2.js +227 -0
- package/src/migration-checklist/evaluation/dataset.js +336 -0
- package/src/migration-checklist/evaluation/extractive-fixtures-v2.js +148 -0
- package/src/migration-checklist/evaluation/metrics-v2.js +226 -0
- package/src/migration-checklist/evaluation/metrics.js +158 -0
- package/src/migration-checklist/evaluation/qualification-v2.js +321 -0
- package/src/migration-checklist/evaluation/qualification.js +239 -0
- package/src/migration-checklist/evaluation/runner-v2.js +294 -0
- package/src/migration-checklist/evaluation/runner.js +194 -0
- package/src/migration-checklist/evaluation/scorecard-v2.js +106 -0
- package/src/migration-checklist/evaluation/scorecard.js +86 -0
- package/src/migration-checklist/extractive-candidate.js +166 -0
- package/src/migration-checklist/extractive-prompt.js +62 -0
- package/src/migration-checklist/generator.js +702 -0
- package/src/migration-checklist/grounding-policy.js +117 -0
- package/src/migration-checklist/input-loader.js +613 -0
- package/src/migration-checklist/migration-checklist.js +635 -0
- package/src/migration-checklist/presentation.js +292 -0
- package/src/migration-checklist/progress.js +96 -0
- package/src/migration-checklist/prompt.js +83 -0
- package/src/migration-checklist/qualification-guard.js +462 -0
- package/src/migration-checklist/qualification-resolution.js +122 -0
- package/src/migration-checklist/qualification-store.js +225 -0
- package/src/migration-checklist/runtime.js +205 -0
- package/src/migration-checklist/verification.js +134 -0
- package/src/migration-checklist/writer.js +35 -0
- package/src/openai-compatible-provider.js +451 -0
- package/src/orchestration/failure-log.js +32 -0
- package/src/orchestration/pipeline.js +200 -0
- package/src/orchestration/progress-events.js +337 -0
- package/src/orchestration/progress-reporter.js +131 -0
- package/src/orchestration/text-writer.js +22 -0
- package/src/portable.js +13 -0
- package/src/product-completion.js +249 -0
- package/src/project-manifest-input.js +90 -0
- package/src/project-manifest.js +141 -0
- package/src/python-requirements.js +137 -0
- package/src/registry/npm-packument.js +256 -0
- package/src/registry/npm-registry-adapter.js +262 -0
- package/src/registry/pypi-project.js +300 -0
- package/src/registry/pypi-registry-adapter.js +235 -0
- package/src/registry/sanitize-registry-body.js +51 -0
- package/src/renderers/console.js +160 -0
- package/src/renderers/impact-presentation.js +278 -0
- package/src/renderers/markdown.js +172 -0
- package/src/research-plan.js +455 -0
- package/src/runtime-conformance.js +275 -0
- package/src/source-provenance.js +393 -0
- package/src/source-url.js +62 -0
- package/src/structured-output-schema.js +66 -0
- package/src/target-selector.js +306 -0
- package/src/upgrade-decision/input-loader.js +107 -0
- package/src/upgrade-decision/presentation.js +43 -0
- package/src/upgrade-decision/runtime.js +21 -0
- package/src/upgrade-decision/upgrade-decision.js +626 -0
- package/src/upgrade-decision/writer.js +30 -0
- package/src/usage/analyzer-registry.js +63 -0
- package/src/usage/coverage.js +116 -0
- package/src/usage/input-loader.js +139 -0
- package/src/usage/js/analyzer.js +240 -0
- package/src/usage/js/parser.js +21 -0
- package/src/usage/runtime.js +187 -0
- package/src/usage/scope.js +44 -0
- package/src/usage/source-files.js +50 -0
- package/src/usage/usage-index.js +217 -0
- package/src/usage/writer.js +31 -0
- package/src/version-analysis-loader.js +203 -0
- package/src/version-analysis-manifest.js +314 -0
- 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**.
|