@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,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.
|