@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,303 @@
|
|
|
1
|
+
# OSS-02 — Package Guard Hardening
|
|
2
|
+
|
|
3
|
+
## 1. Executive verdict
|
|
4
|
+
|
|
5
|
+
**Verdict: `PACKAGE_GUARD_DETECTS_ARTIFACT_DRIFT`**
|
|
6
|
+
|
|
7
|
+
UpgradeLens now validates the actual npm tarball, rejects the OSS-01 copy-artifact
|
|
8
|
+
class with stable reasons, correlates packaged protected implementation paths with
|
|
9
|
+
Git in strict release mode, preserves legitimate numeric identities, and retains
|
|
10
|
+
the prior required-asset and exclusion contracts. The current package, canonical
|
|
11
|
+
suite, clean install, CLI, ESM import, public exports, schemas, and evaluation
|
|
12
|
+
dataset identity all pass.
|
|
13
|
+
|
|
14
|
+
## 2. Root cause addressed
|
|
15
|
+
|
|
16
|
+
OSS-01 established that an external filesystem copy/conflict operation created
|
|
17
|
+
untracked `" 2"` and `" 3"` files and that broad `src/` and `schemas/` inclusion
|
|
18
|
+
allowed 76 copies into npm. The old guard remained green because it checked only
|
|
19
|
+
required assets and capture exclusions.
|
|
20
|
+
|
|
21
|
+
OSS-02 closes both enabling gaps:
|
|
22
|
+
|
|
23
|
+
- copy/backup filename policy is evaluated against actual tar entries; and
|
|
24
|
+
- an actual protected package entry that is not tracked by Git fails in strict
|
|
25
|
+
release mode.
|
|
26
|
+
|
|
27
|
+
The guard reports findings only. It does not infer content ownership, merge, rewrite,
|
|
28
|
+
or delete a file.
|
|
29
|
+
|
|
30
|
+
## 3. Architecture decision summary
|
|
31
|
+
|
|
32
|
+
The complete decision is recorded in
|
|
33
|
+
`docs/oss-02-package-guard-hardening-architecture.md`. The implementation separates:
|
|
34
|
+
|
|
35
|
+
1. an actual-tarball producer using `npm pack --json --ignore-scripts`;
|
|
36
|
+
2. a pure structured package-entry validator;
|
|
37
|
+
3. an optional Git-state resolver;
|
|
38
|
+
4. deterministic policy rendering and CLI exit mapping.
|
|
39
|
+
|
|
40
|
+
The tarball is authoritative. Git is supplemental release evidence. File count and
|
|
41
|
+
tarball digest are observations, not business invariants.
|
|
42
|
+
|
|
43
|
+
## 4. Old guard gap
|
|
44
|
+
|
|
45
|
+
The previous guard already read gzip tar entries, so it was stronger than a
|
|
46
|
+
working-tree-only check. Its validator nevertheless:
|
|
47
|
+
|
|
48
|
+
- normalized through absolute/traversing input instead of rejecting it;
|
|
49
|
+
- deduplicated paths before it could detect duplicate normalized entries;
|
|
50
|
+
- recognized only CLI-capture paths and missing required assets;
|
|
51
|
+
- had no protected-area or suspicious-name grammar;
|
|
52
|
+
- had no tracked/untracked package correlation;
|
|
53
|
+
- emitted category-specific legacy text instead of stable reason codes;
|
|
54
|
+
- ran `npm pack` without an explicit lifecycle-recursion boundary.
|
|
55
|
+
|
|
56
|
+
That design could accept all 76 packaged OSS-01 copies.
|
|
57
|
+
|
|
58
|
+
## 5. New package-manifest boundary
|
|
59
|
+
|
|
60
|
+
`inspectNpmPackage` creates an isolated pack/cache directory, invokes npm with
|
|
61
|
+
lifecycle scripts disabled, reads the actual `.tgz`, retains the raw entry
|
|
62
|
+
multiplicity, resolves Git state when available, and passes structured input to the
|
|
63
|
+
validator. Task-owned temporary state is removed in `finally`.
|
|
64
|
+
|
|
65
|
+
The pure validator rejects:
|
|
66
|
+
|
|
67
|
+
- invalid absolute, drive-letter, traversal, outside-root, NUL, and empty paths;
|
|
68
|
+
- duplicate normalized package entries;
|
|
69
|
+
- forbidden capture, environment, credential-file, local-machine, archive, and
|
|
70
|
+
private qualification artifacts;
|
|
71
|
+
- missing required package assets;
|
|
72
|
+
- suspicious artifact names in protected areas;
|
|
73
|
+
- packaged protected implementation paths not tracked by Git in strict mode.
|
|
74
|
+
|
|
75
|
+
## 6. Protected areas and filename grammar
|
|
76
|
+
|
|
77
|
+
Strict artifact policy follows the current public package structure:
|
|
78
|
+
|
|
79
|
+
| Protected prefix | Rationale |
|
|
80
|
+
| --- | --- |
|
|
81
|
+
| `package/bin/` | Executable entry points |
|
|
82
|
+
| `package/src/` | Runtime and public exports |
|
|
83
|
+
| `package/schemas/` | Public data contracts |
|
|
84
|
+
| `package/eval/datasets/` | Published evaluation cases |
|
|
85
|
+
| `package/eval/migration-planning/` | Versioned evaluation datasets |
|
|
86
|
+
| `package/eval/schemas/` | Evaluation contracts |
|
|
87
|
+
|
|
88
|
+
The grammar detects terminal copy conventions:
|
|
89
|
+
|
|
90
|
+
- whitespace numeric suffix: `runtime 2.js`, `schema 3.schema.json`;
|
|
91
|
+
- parenthesized numeric suffix: `runtime (2).js`;
|
|
92
|
+
- delimited terminal copy label: `runtime copy.js`, `runtime-copy.js`,
|
|
93
|
+
`runtime_duplicate.js`;
|
|
94
|
+
- backup/editor suffix: `~`, `.bak`, `.orig`, `.save`, `.tmp`, `.swp`, `.swo`.
|
|
95
|
+
|
|
96
|
+
It does not treat arbitrary digits or the word `duplicate` anywhere in a path as
|
|
97
|
+
suspicious. Repository-only `scripts/` and `test/` are not actual package areas.
|
|
98
|
+
Docs keep capture/forbidden checks but are intentionally outside the strict copy-name
|
|
99
|
+
grammar.
|
|
100
|
+
|
|
101
|
+
## 7. Tracked/untracked policy
|
|
102
|
+
|
|
103
|
+
When Git metadata is available, every actual package entry in a protected area must
|
|
104
|
+
exist in `git ls-files`. This also catches ignored or otherwise untracked
|
|
105
|
+
implementation artifacts, not only the output of one untracked listing.
|
|
106
|
+
|
|
107
|
+
Git states are explicit:
|
|
108
|
+
|
|
109
|
+
- `available`: strict protected-path correlation runs;
|
|
110
|
+
- `GIT_METADATA_UNAVAILABLE`: source-archive mode; structural tarball policy still
|
|
111
|
+
runs and Git absence does not fail;
|
|
112
|
+
- `GIT_COMMAND_UNAVAILABLE`: Git executable unavailable; structural policy still
|
|
113
|
+
runs and the limitation is visible;
|
|
114
|
+
- unexpected Git command errors: operational failure, not a silently clean state.
|
|
115
|
+
|
|
116
|
+
No generated implementation allowlist was added because the package has no
|
|
117
|
+
repository-owned generated public implementation path.
|
|
118
|
+
|
|
119
|
+
## 8. False-positive protections
|
|
120
|
+
|
|
121
|
+
Focused tests accept:
|
|
122
|
+
|
|
123
|
+
- `src/sha256.js`;
|
|
124
|
+
- `src/oauth2.js`;
|
|
125
|
+
- `src/v2-runtime.js`;
|
|
126
|
+
- `src/mp-r02-policy.js`;
|
|
127
|
+
- `schemas/migration-checklist-v2.schema.json`;
|
|
128
|
+
- `schemas/contract-v2.json`;
|
|
129
|
+
- `eval/datasets/fixture-2fa.json`;
|
|
130
|
+
- `docs/python3.md` and `docs/mp-r02-architecture.md`;
|
|
131
|
+
- the intentional tracked TS-FIX-01 duplicate-occurrence architecture document;
|
|
132
|
+
- a valid actual source-archive package with no `.git`.
|
|
133
|
+
|
|
134
|
+
The OSS-01 retained numeric capture copies remain outside the npm package and cannot
|
|
135
|
+
fail the actual-manifest guard.
|
|
136
|
+
|
|
137
|
+
## 9. Diagnostics and exit contract
|
|
138
|
+
|
|
139
|
+
Every violation has a stable code and relative portable path. Results are sorted by
|
|
140
|
+
reason code, then path, independent of manifest enumeration order. Policy output is
|
|
141
|
+
bounded to ten paths per reason while retaining structured totals.
|
|
142
|
+
|
|
143
|
+
Failure format is:
|
|
144
|
+
|
|
145
|
+
```text
|
|
146
|
+
Package guard failed.
|
|
147
|
+
|
|
148
|
+
REASON_CODE (count)
|
|
149
|
+
- relative/path
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
No file content, local root, secret value, or stack trace is printed for policy
|
|
153
|
+
failure. CLI success returns zero; policy or operational failure returns non-zero.
|
|
154
|
+
The validator and CLI never delete or modify findings.
|
|
155
|
+
|
|
156
|
+
## 10. Focused tests
|
|
157
|
+
|
|
158
|
+
The focused package-guard suite contains 18 passing tests and covers:
|
|
159
|
+
|
|
160
|
+
- all required numeric, parenthesized, copy-label, and backup cases;
|
|
161
|
+
- multi-extension schema/test names;
|
|
162
|
+
- valid numeric-name false positives and the intentional document;
|
|
163
|
+
- absolute/traversing/outside-root paths and duplicate normalized entries;
|
|
164
|
+
- protected area mapping;
|
|
165
|
+
- strict packaged-untracked rejection;
|
|
166
|
+
- source archive behavior without Git;
|
|
167
|
+
- capture, `.env`, credential-file, local, and qualification exclusions;
|
|
168
|
+
- missing required assets;
|
|
169
|
+
- stable bounded diagnostics under reversed input;
|
|
170
|
+
- repeatability and input immutability;
|
|
171
|
+
- non-zero CLI policy mapping without stack traces;
|
|
172
|
+
- authoritative required assets;
|
|
173
|
+
- actual npm incident replay;
|
|
174
|
+
- actual no-Git source-archive pack;
|
|
175
|
+
- actual current package;
|
|
176
|
+
- lifecycle/consumer-hook absence.
|
|
177
|
+
|
|
178
|
+
The prior focused suite had 7 tests. OSS-02 replaces it with 18, a net increase of
|
|
179
|
+
11 while retaining every previous contract.
|
|
180
|
+
|
|
181
|
+
## 11. OSS-01 incident replay
|
|
182
|
+
|
|
183
|
+
An isolated temporary npm package is initialized as a Git checkout. Its canonical
|
|
184
|
+
`src/runtime.js` and package metadata are tracked; an untracked byte copy named
|
|
185
|
+
`src/runtime 2.js` is added. Actual `npm pack` includes both files.
|
|
186
|
+
|
|
187
|
+
The guard deterministically fails with:
|
|
188
|
+
|
|
189
|
+
```text
|
|
190
|
+
SUSPICIOUS_NUMERIC_COPY_SUFFIX
|
|
191
|
+
UNEXPECTED_PACKAGED_UNTRACKED_IMPLEMENTATION_FILE
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
The test verifies the copy's bytes and path still exist after validation and that
|
|
195
|
+
only the temporary pack/cache directory is removed. Thus the OSS-01 incident class
|
|
196
|
+
fails before release without guard-driven cleanup.
|
|
197
|
+
|
|
198
|
+
## 12. Current repository/package acceptance
|
|
199
|
+
|
|
200
|
+
| Contract | Result |
|
|
201
|
+
| --- | --- |
|
|
202
|
+
| Package version | `0.5.0` |
|
|
203
|
+
| Final explained package | 231 files: OSS-01's 229 plus the required OSS-02 architecture and report |
|
|
204
|
+
| Suspicious packaged artifacts | 0 |
|
|
205
|
+
| Required assets | 20/20 present |
|
|
206
|
+
| Capture evidence | 0 |
|
|
207
|
+
| Strict Git correlation | Pass |
|
|
208
|
+
| Public exports | 438 |
|
|
209
|
+
| Package count/digest pinning | Not used |
|
|
210
|
+
|
|
211
|
+
Both OSS-02 documents are intentional public docs under the existing `files`
|
|
212
|
+
contract. Production source count and product behavior are unchanged.
|
|
213
|
+
|
|
214
|
+
## 13. Canonical suite and package verification
|
|
215
|
+
|
|
216
|
+
| Check | Result |
|
|
217
|
+
| --- | --- |
|
|
218
|
+
| Focused package guard | 18/18 pass |
|
|
219
|
+
| Canonical suite | 627 total: 626 pass, 0 fail, 1 known skip |
|
|
220
|
+
| Test delta | +11 pass from the previous 616-test baseline |
|
|
221
|
+
| `git diff --check` | Pass |
|
|
222
|
+
| `npm run check:package` | Pass |
|
|
223
|
+
| Repeated dry-run manifests | Pass; identical normalized entry inventories |
|
|
224
|
+
| Repeated actual tarballs | Pass; byte-identical |
|
|
225
|
+
| Extracted suspicious-name scan | Pass; no unintended artifact |
|
|
226
|
+
| Clean install from final tarball | Pass |
|
|
227
|
+
| Packaged CLI `--version` / `--help` | `0.5.0` / exit 0 |
|
|
228
|
+
| ESM import / public exports | Pass / 438 |
|
|
229
|
+
| Schemas and evaluation dataset identity | Pass |
|
|
230
|
+
|
|
231
|
+
## 14. Lifecycle, recursion, and consumer-install safety
|
|
232
|
+
|
|
233
|
+
Manifest production uses `--ignore-scripts`. `package.json` has no `prepack`,
|
|
234
|
+
`prepare`, `prepublishOnly`, `preinstall`, `install`, or `postinstall` hook.
|
|
235
|
+
`check:package` is a contributor/release command only and cannot recurse through npm
|
|
236
|
+
pack.
|
|
237
|
+
|
|
238
|
+
The guard script and its tests remain repository-only because `scripts/` and `test/`
|
|
239
|
+
are outside the package `files` allowlist. They do not become production CLI
|
|
240
|
+
dependencies. A clean consumer install has no `.git`, does not execute the guard,
|
|
241
|
+
and passes.
|
|
242
|
+
|
|
243
|
+
## 15. Blocked/skipped checks
|
|
244
|
+
|
|
245
|
+
No OSS-02 acceptance check was blocked. The canonical suite retains one known
|
|
246
|
+
sandbox-loopback skip for the online CLI keep-alive listener; it is unchanged and
|
|
247
|
+
unrelated to package hygiene. Real-provider execution was deliberately not run.
|
|
248
|
+
|
|
249
|
+
## 16. Defects and remaining limitations
|
|
250
|
+
|
|
251
|
+
| Severity | Count | Detail |
|
|
252
|
+
| --- | ---: | --- |
|
|
253
|
+
| Blocker | 0 | None |
|
|
254
|
+
| High | 0 | None |
|
|
255
|
+
| Medium | 0 | None |
|
|
256
|
+
| Low/accepted limitation | 2 | Source archives cannot enforce Git correlation; docs intentionally use narrower filename policy |
|
|
257
|
+
|
|
258
|
+
Source archives still enforce all structural and suspicious-name policy, so the
|
|
259
|
+
OSS-01 numeric-copy incident remains blocked. Documentation is bounded by capture,
|
|
260
|
+
forbidden-artifact, path-validity, and duplicate-entry rules; broader docs filename
|
|
261
|
+
linting would create known false positives and is outside this release guard.
|
|
262
|
+
|
|
263
|
+
The guard is intentionally not a general malware or content-secret scanner. It does
|
|
264
|
+
not pin package count or digest.
|
|
265
|
+
|
|
266
|
+
## 17. Exact files changed/created
|
|
267
|
+
|
|
268
|
+
- Modified `scripts/package-content-guard.mjs`.
|
|
269
|
+
- Modified `test/package-content-guard.test.js`.
|
|
270
|
+
- Modified `docs/package-content-policy.md`.
|
|
271
|
+
- Created `docs/oss-02-package-guard-hardening-architecture.md`.
|
|
272
|
+
- Created `docs/reviews/oss-02-package-guard-hardening.md`.
|
|
273
|
+
|
|
274
|
+
No product runtime, public export, schema, dataset, package version, dependency, bin,
|
|
275
|
+
or package metadata file changed.
|
|
276
|
+
|
|
277
|
+
## 18. Pre-existing changes preserved
|
|
278
|
+
|
|
279
|
+
The untracked OSS-01 report, two earlier v0.5.0 review reports, all RR02 and
|
|
280
|
+
RR02-FIX-05 capture/rerun evidence, nine retained numeric-suffix capture copies,
|
|
281
|
+
ignored `.DS_Store`, ignored qualification material, and unrelated review output
|
|
282
|
+
were preserved. No cleanup command touched them.
|
|
283
|
+
|
|
284
|
+
The branch and commit baseline remained
|
|
285
|
+
`fix/public-preview-readiness` at
|
|
286
|
+
`74d57344db254d0109ea951dc7c44853cdad9be0`. No commit, merge, tag, push,
|
|
287
|
+
GitHub Release, npm publish, real-provider call, target-repository change, or
|
|
288
|
+
qualification regeneration occurred.
|
|
289
|
+
|
|
290
|
+
## 19. Final verdict and next gate
|
|
291
|
+
|
|
292
|
+
**Verdict: `PACKAGE_GUARD_DETECTS_ARTIFACT_DRIFT`**
|
|
293
|
+
|
|
294
|
+
The actual npm manifest is validated; OSS-01 replay fails deterministically; valid
|
|
295
|
+
numeric identities remain accepted; existing required and exclusion checks are
|
|
296
|
+
preserved and expanded; strict untracked policy is explicit; lifecycle recursion and
|
|
297
|
+
consumer installation are safe; current package and canonical validation pass; and
|
|
298
|
+
there is no Blocker or High defect.
|
|
299
|
+
|
|
300
|
+
**Gate: `PROCEED_TO_OSS_03_COMMUNITY_SCAFFOLDING`**
|
|
301
|
+
|
|
302
|
+
This gate authorizes only the next readiness task. It does not authorize commit,
|
|
303
|
+
merge, tag, release, public preview, or publish.
|
|
@@ -0,0 +1,378 @@
|
|
|
1
|
+
# OSS-03 — Community Scaffolding
|
|
2
|
+
|
|
3
|
+
## 1. Executive verdict
|
|
4
|
+
|
|
5
|
+
**Current verdict after OSS-03-FIX: `COMMUNITY_PRIVATE_REPORTING_READY`**
|
|
6
|
+
|
|
7
|
+
The contributor guide, security policy, Contributor Covenant, support policy,
|
|
8
|
+
GitHub issue forms, issue configuration, pull request template, and README community
|
|
9
|
+
navigation are complete and internally consistent. The project is accurately
|
|
10
|
+
positioned as a Public Technical Preview / Alpha with a CLI-first,
|
|
11
|
+
decision-first, evidence-bounded, non-autonomous contract.
|
|
12
|
+
|
|
13
|
+
The original OSS-03 review found no usable private security or conduct-reporting
|
|
14
|
+
channel. OSS-03-FIX closes both findings with API-verified GitHub Private
|
|
15
|
+
Vulnerability Reporting and a maintainer-confirmed public conduct contact.
|
|
16
|
+
|
|
17
|
+
## 2. Community positioning
|
|
18
|
+
|
|
19
|
+
All new community materials preserve this contract:
|
|
20
|
+
|
|
21
|
+
| Dimension | Position |
|
|
22
|
+
| --- | --- |
|
|
23
|
+
| Release stage | Public Technical Preview / Alpha |
|
|
24
|
+
| Primary interface | CLI |
|
|
25
|
+
| Product role | Decision-first, evidence-bounded dependency upgrade analysis |
|
|
26
|
+
| Execution boundary | No autonomous source migration or suggested-command execution |
|
|
27
|
+
| Migration Checklist | Experimental, opt-in, human-reviewed |
|
|
28
|
+
| Support | Best effort; no production or response SLA |
|
|
29
|
+
|
|
30
|
+
No material calls UpgradeLens production-stable, a guaranteed-safe updater, a
|
|
31
|
+
security scanner, an autonomous migration tool, or a replacement for developer or
|
|
32
|
+
Coding Agent review.
|
|
33
|
+
|
|
34
|
+
## 3. Discovery and existing gaps
|
|
35
|
+
|
|
36
|
+
| Community need | Existing coverage | Gap before OSS-03 | Owner after OSS-03 |
|
|
37
|
+
| --- | --- | --- | --- |
|
|
38
|
+
| Contributor setup/workflow | README development commands and architecture docs | No contributor guide | `CONTRIBUTING.md` |
|
|
39
|
+
| Vulnerability handling | Product privacy/trust docs | No security policy or private route | `SECURITY.md`; private route still required |
|
|
40
|
+
| Conduct | None | No policy or reporting route | `CODE_OF_CONDUCT.md`; private route still required |
|
|
41
|
+
| Support routing | README product scope | No channel matrix or reproduction guidance | `SUPPORT.md` |
|
|
42
|
+
| Bug intake | GitHub Issues enabled | No structured form/privacy acknowledgement | Bug Issue Form |
|
|
43
|
+
| Feature intake | GitHub Issues enabled | No workflow/trust questions | Feature Issue Form |
|
|
44
|
+
| Pull requests | No template | Missing validation/privacy checklist | Pull request template |
|
|
45
|
+
| Community navigation | No README community section | Policies undiscoverable | README links |
|
|
46
|
+
|
|
47
|
+
Discovery also confirmed Node.js `>=20`, npm with a tracked lockfile v3, the
|
|
48
|
+
`test`, `check`, and `check:package` scripts, no lint/format script, CLI primary
|
|
49
|
+
workflow, and no current repository branch-naming or Conventional Commits policy.
|
|
50
|
+
|
|
51
|
+
## 4. Files created or updated
|
|
52
|
+
|
|
53
|
+
Created:
|
|
54
|
+
|
|
55
|
+
- `CONTRIBUTING.md`
|
|
56
|
+
- `SECURITY.md`
|
|
57
|
+
- `CODE_OF_CONDUCT.md`
|
|
58
|
+
- `SUPPORT.md`
|
|
59
|
+
- `.github/ISSUE_TEMPLATE/bug_report.yml`
|
|
60
|
+
- `.github/ISSUE_TEMPLATE/feature_request.yml`
|
|
61
|
+
- `.github/ISSUE_TEMPLATE/config.yml`
|
|
62
|
+
- `.github/pull_request_template.md`
|
|
63
|
+
- `docs/reviews/oss-03-community-scaffolding.md`
|
|
64
|
+
|
|
65
|
+
Updated:
|
|
66
|
+
|
|
67
|
+
- `README.md` with a four-link Community section.
|
|
68
|
+
|
|
69
|
+
No runtime, test, schema, dataset, package metadata, package allowlist, CI workflow,
|
|
70
|
+
or version file was changed.
|
|
71
|
+
|
|
72
|
+
## 5. Contributor workflow contract
|
|
73
|
+
|
|
74
|
+
`CONTRIBUTING.md` documents the verified source workflow:
|
|
75
|
+
|
|
76
|
+
```sh
|
|
77
|
+
git clone https://github.com/thomasMinh1995/UpgradeLens.git
|
|
78
|
+
cd UpgradeLens
|
|
79
|
+
npm install
|
|
80
|
+
npm test
|
|
81
|
+
npm run check:package
|
|
82
|
+
node ./bin/upgradelens.js --help
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
It does not invent a lint command, require a real provider, enforce an undocumented
|
|
86
|
+
branch/commit convention, or turn the guide into a replacement architecture manual.
|
|
87
|
+
It links to the authoritative architecture and package-policy documents.
|
|
88
|
+
|
|
89
|
+
The guide preserves occurrence identity, separate installed/declared/target facts,
|
|
90
|
+
non-recommendation registry latest, coverage-aware impact, fail-closed evidence,
|
|
91
|
+
deterministic artifacts, human-owned target/command/approval/recovery, and the
|
|
92
|
+
no-source-modification boundary.
|
|
93
|
+
|
|
94
|
+
## 6. Security reporting channel and proof it is usable
|
|
95
|
+
|
|
96
|
+
**Resolved historical finding: `PRIVATE_SECURITY_CHANNEL_REQUIRED`.**
|
|
97
|
+
|
|
98
|
+
At the original OSS-03 review, public GitHub API verification returned:
|
|
99
|
+
|
|
100
|
+
- `private-vulnerability-reporting`: HTTP 200 with `enabled: false`;
|
|
101
|
+
- owner profile `email: null`;
|
|
102
|
+
- no other public profile contact.
|
|
103
|
+
|
|
104
|
+
OSS-03-FIX rechecked the same GitHub endpoint and received HTTP 200 with
|
|
105
|
+
`enabled: true`. The canonical reporter route is
|
|
106
|
+
`https://github.com/thomasMinh1995/UpgradeLens/security/advisories/new`.
|
|
107
|
+
`SECURITY.md`, Issue configuration, and the bug form now direct vulnerabilities to
|
|
108
|
+
that private route and continue to prohibit public disclosure.
|
|
109
|
+
|
|
110
|
+
## 7. Conduct reporting channel
|
|
111
|
+
|
|
112
|
+
**Resolved historical finding: `CONDUCT_REPORTING_CHANNEL_REQUIRED`.**
|
|
113
|
+
|
|
114
|
+
`CODE_OF_CONDUCT.md` adopts Contributor Covenant 2.1, includes project-space scope,
|
|
115
|
+
maintainer enforcement responsibilities, four enforcement levels, privacy handling,
|
|
116
|
+
conflict-of-interest guidance, and upstream attribution.
|
|
117
|
+
|
|
118
|
+
The original review found no verified private conduct contact. The maintainer has
|
|
119
|
+
now configured and confirmed `upgradelens.conduct@gmail.com` as the public community
|
|
120
|
+
contact for private conduct reports. The policy states best-effort handling,
|
|
121
|
+
reasonable privacy, malicious-report enforcement, and routes vulnerabilities back
|
|
122
|
+
to `SECURITY.md`. The conduct email is intentionally public and is not a secret or a
|
|
123
|
+
security-reporting address.
|
|
124
|
+
|
|
125
|
+
## 8. Support routing matrix
|
|
126
|
+
|
|
127
|
+
| Request type | Route |
|
|
128
|
+
| --- | --- |
|
|
129
|
+
| Reproducible product bug | Bug Issue Form |
|
|
130
|
+
| Feature or product feedback | Feature Issue Form |
|
|
131
|
+
| Usage question | README and issue search; no dedicated Q&A channel |
|
|
132
|
+
| Vulnerability | Security policy; no public disclosure |
|
|
133
|
+
| Conduct concern | Code of Conduct; no public sensitive details |
|
|
134
|
+
| Provider outage/account/quota/billing | Provider support unless UpgradeLens mishandles it |
|
|
135
|
+
| Private repository debugging | Synthetic/public reproduction only |
|
|
136
|
+
|
|
137
|
+
GitHub Discussions is currently disabled, so no Discussions URL or unsupported
|
|
138
|
+
support promise was added.
|
|
139
|
+
|
|
140
|
+
## 9. Issue forms and pull request template summary
|
|
141
|
+
|
|
142
|
+
The bug form requires version/commit, installation method, OS, Node/npm versions,
|
|
143
|
+
sanitized repository shape, secret-free command, expected/actual behavior,
|
|
144
|
+
completion state and exit code, minimal reproduction, and required privacy/security
|
|
145
|
+
acknowledgements. It does not request a full `.upgradelens/` directory.
|
|
146
|
+
|
|
147
|
+
The feature form requires problem/workflow, target user, workaround, outcome,
|
|
148
|
+
ecosystem/repository shape, trust and human-review implications, scope fit,
|
|
149
|
+
alternatives, and privacy acknowledgement.
|
|
150
|
+
|
|
151
|
+
Blank issues are disabled. Contact links are empty because there is no verified
|
|
152
|
+
private security route, external support channel, or enabled Discussions instance.
|
|
153
|
+
No labels or assignees that may not exist are referenced.
|
|
154
|
+
|
|
155
|
+
The pull request template covers problem/root cause, changes, validation,
|
|
156
|
+
trust/security/privacy impact, limitations, package guard, schema/docs/tests,
|
|
157
|
+
determinism, fail-closed behavior, human review, and unrelated-file exclusion.
|
|
158
|
+
|
|
159
|
+
## 10. Privacy and secret safeguards
|
|
160
|
+
|
|
161
|
+
The contributor guide, support policy, security policy, bug form, feature form, and
|
|
162
|
+
pull request template consistently prohibit or constrain:
|
|
163
|
+
|
|
164
|
+
- API keys, tokens, authorization values, cookies, and `.env` content;
|
|
165
|
+
- private repository source, internal identifiers, and machine-local paths;
|
|
166
|
+
- full private artifacts and raw provider requests/responses;
|
|
167
|
+
- personal data, exploit details, and sensitive conduct reports in public issues.
|
|
168
|
+
|
|
169
|
+
Reports request minimal sanitized fragments and synthetic or public fixtures instead
|
|
170
|
+
of proprietary repositories. No new document contains a credential-like value,
|
|
171
|
+
email address, local absolute path, or raw environment/provider data.
|
|
172
|
+
|
|
173
|
+
## 11. README integration
|
|
174
|
+
|
|
175
|
+
README received a small Community section linking to:
|
|
176
|
+
|
|
177
|
+
- Contributing
|
|
178
|
+
- Security
|
|
179
|
+
- Support
|
|
180
|
+
- Code of Conduct
|
|
181
|
+
|
|
182
|
+
All links are repository-relative and resolve. Product positioning and feature
|
|
183
|
+
sections were not rewritten. The existing validation sentence was refreshed from
|
|
184
|
+
the pre-OSS-02 count to the verified 626-pass baseline so the newly edited README
|
|
185
|
+
does not retain a stale test claim.
|
|
186
|
+
|
|
187
|
+
## 12. Package and tarball impact
|
|
188
|
+
|
|
189
|
+
The current `package.json.files` boundary intentionally excludes root community
|
|
190
|
+
policies and `.github/`. No package allowlist change was made merely to ship
|
|
191
|
+
repository-governance material.
|
|
192
|
+
|
|
193
|
+
README and LICENSE remain packaged. README changed content but not identity. The
|
|
194
|
+
required OSS-03 report is under published `docs/`, so the explained tarball changes
|
|
195
|
+
from 231 to 232 entries. The single entry addition is
|
|
196
|
+
`docs/reviews/oss-03-community-scaffolding.md`; no issue/PR template or root policy
|
|
197
|
+
enters npm.
|
|
198
|
+
|
|
199
|
+
## 13. Validation results
|
|
200
|
+
|
|
201
|
+
| Check | Result |
|
|
202
|
+
| --- | --- |
|
|
203
|
+
| GitHub Issue Forms YAML parse | Pass: 3 YAML files |
|
|
204
|
+
| Required form fields | Pass |
|
|
205
|
+
| Required privacy acknowledgements | Pass |
|
|
206
|
+
| Pull request template structure | Pass |
|
|
207
|
+
| Relative Markdown links | Pass |
|
|
208
|
+
| External policy/owner URLs | Pass: HTTP 200 |
|
|
209
|
+
| Markdown code fences | Balanced |
|
|
210
|
+
| Placeholder scan | Zero unresolved placeholders |
|
|
211
|
+
| Local absolute-path scan | Zero |
|
|
212
|
+
| Contact/credential scan | Only the maintainer-approved conduct email; zero credential values or unexpected contacts |
|
|
213
|
+
| Positioning/overclaim review | Pass; negative boundary statements reviewed |
|
|
214
|
+
| `git diff --check` | Pass |
|
|
215
|
+
| Package content guard | Pass |
|
|
216
|
+
| Final dry-run package | 232 explained files, 0 suspicious artifacts, 20 required assets |
|
|
217
|
+
| Product runtime/export/version | Unchanged: 0 runtime changes, 438 exports, `0.5.0` |
|
|
218
|
+
|
|
219
|
+
## 14. Blocked or skipped checks
|
|
220
|
+
|
|
221
|
+
No test security advisory was created and no conduct email was sent, per task
|
|
222
|
+
boundary. GitHub API independently verified Private Vulnerability Reporting enabled;
|
|
223
|
+
the anonymous reporter URL correctly required GitHub sign-in. The conduct mailbox
|
|
224
|
+
is recorded as maintainer-confirmed usable rather than SMTP-tested by this task.
|
|
225
|
+
|
|
226
|
+
The full canonical suite was not rerun because OSS-03 changes documentation,
|
|
227
|
+
repository templates, and one package-visible Markdown file only; no source, test,
|
|
228
|
+
schema, dependency, export, script, or package-policy behavior changed. Package
|
|
229
|
+
content was validated through the actual npm manifest and hardened guard.
|
|
230
|
+
|
|
231
|
+
No real provider was called.
|
|
232
|
+
|
|
233
|
+
## 15. Defects and remaining limitations
|
|
234
|
+
|
|
235
|
+
| Severity | Count | Finding |
|
|
236
|
+
| --- | ---: | --- |
|
|
237
|
+
| Blocker | 0 | None |
|
|
238
|
+
| High readiness | 0 open | The two original contact findings are resolved by OSS-03-FIX |
|
|
239
|
+
| Medium | 0 | None |
|
|
240
|
+
| Low | 1 | No dedicated Q&A/Discussions channel; support remains issues/search only |
|
|
241
|
+
|
|
242
|
+
The optional Discussions gap is accurately documented and does not create a false
|
|
243
|
+
support route.
|
|
244
|
+
|
|
245
|
+
## 16. Exact files changed
|
|
246
|
+
|
|
247
|
+
Task-owned files are exactly the nine created files and README update listed in
|
|
248
|
+
section 4. No package metadata, runtime, schema, dataset, source test, capture,
|
|
249
|
+
qualification record, or CI workflow was changed.
|
|
250
|
+
|
|
251
|
+
## 17. Pre-existing changes preserved
|
|
252
|
+
|
|
253
|
+
All pre-existing OSS-01/OSS-02 reports and package-guard work, historical validation
|
|
254
|
+
documentation changes, RR02/RR02-FIX-05 capture and manifest evidence, nine retained
|
|
255
|
+
numeric-suffix captures, ignored `.DS_Store`, qualification material, and unrelated
|
|
256
|
+
review output were preserved.
|
|
257
|
+
|
|
258
|
+
The safety baseline was branch `fix/public-preview-readiness` at commit
|
|
259
|
+
`8866ae88b56dff3b822a6db977174dbfe8cd599a`. No destructive Git command, cleanup,
|
|
260
|
+
commit, merge, tag, push, release, publish, provider call, target-repository change,
|
|
261
|
+
or qualification regeneration occurred.
|
|
262
|
+
|
|
263
|
+
## 18. Final verdict and next gate
|
|
264
|
+
|
|
265
|
+
**Verdict: `COMMUNITY_PRIVATE_REPORTING_READY`**
|
|
266
|
+
|
|
267
|
+
All required community documents and templates exist, contributor setup matches the
|
|
268
|
+
source, YAML and links validate, privacy warnings are mandatory, product/package
|
|
269
|
+
contracts do not regress, and no policy overclaims support. GitHub Private
|
|
270
|
+
Vulnerability Reporting is enabled and the conduct contact is maintainer-confirmed.
|
|
271
|
+
|
|
272
|
+
**Gate: `PROCEED_TO_OSS_04_PUBLIC_CI_AND_PACKAGE_METADATA`**
|
|
273
|
+
|
|
274
|
+
This gate permits the next readiness task. It does not authorize a release or npm
|
|
275
|
+
publish.
|
|
276
|
+
|
|
277
|
+
## 19. OSS-03-FIX private reporting addendum
|
|
278
|
+
|
|
279
|
+
### 19.1 Executive verdict
|
|
280
|
+
|
|
281
|
+
`COMMUNITY_PRIVATE_REPORTING_READY`. Both original High contact gaps are closed
|
|
282
|
+
without routing vulnerabilities through public issues or through the conduct email.
|
|
283
|
+
|
|
284
|
+
### 19.2 Previous contact gaps
|
|
285
|
+
|
|
286
|
+
Before:
|
|
287
|
+
|
|
288
|
+
- `PRIVATE_SECURITY_CHANNEL_REQUIRED`
|
|
289
|
+
- `CONDUCT_REPORTING_CHANNEL_REQUIRED`
|
|
290
|
+
|
|
291
|
+
After:
|
|
292
|
+
|
|
293
|
+
- GitHub Private Vulnerability Reporting configured and API-verified enabled.
|
|
294
|
+
- Conduct reporting configured at `upgradelens.conduct@gmail.com` and confirmed
|
|
295
|
+
usable by the maintainer.
|
|
296
|
+
|
|
297
|
+
### 19.3 Security channel configuration and verification
|
|
298
|
+
|
|
299
|
+
The reporter URL is
|
|
300
|
+
`https://github.com/thomasMinh1995/UpgradeLens/security/advisories/new`.
|
|
301
|
+
The GitHub API endpoint returned HTTP 200 with `enabled: true`. Anonymous access to
|
|
302
|
+
the reporter URL redirected to GitHub sign-in; no advisory was created.
|
|
303
|
+
|
|
304
|
+
Verification classification: `API_VERIFIED_PRIVATE_REPORTING`.
|
|
305
|
+
|
|
306
|
+
### 19.4 Conduct channel configuration
|
|
307
|
+
|
|
308
|
+
Private conduct reports use `upgradelens.conduct@gmail.com`. The address is a
|
|
309
|
+
maintainer-approved public community contact, not a secret and not a default
|
|
310
|
+
security-reporting address. Usability classification:
|
|
311
|
+
`MAINTAINER_VERIFIED_CONDUCT_REPORTING`.
|
|
312
|
+
|
|
313
|
+
### 19.5 Files updated
|
|
314
|
+
|
|
315
|
+
OSS-03-FIX updates only:
|
|
316
|
+
|
|
317
|
+
- `SECURITY.md`
|
|
318
|
+
- `CODE_OF_CONDUCT.md`
|
|
319
|
+
- `CONTRIBUTING.md`
|
|
320
|
+
- `SUPPORT.md`
|
|
321
|
+
- `.github/ISSUE_TEMPLATE/config.yml`
|
|
322
|
+
- `.github/ISSUE_TEMPLATE/bug_report.yml`
|
|
323
|
+
- `docs/reviews/oss-03-community-scaffolding.md`
|
|
324
|
+
|
|
325
|
+
### 19.6 Cross-document routing matrix
|
|
326
|
+
|
|
327
|
+
| Request | Route |
|
|
328
|
+
| --- | --- |
|
|
329
|
+
| Security vulnerability | GitHub Private Vulnerability Reporting |
|
|
330
|
+
| Conduct violation | `upgradelens.conduct@gmail.com` |
|
|
331
|
+
| Reproducible product bug | Public bug form with sanitized reproduction |
|
|
332
|
+
| Feature request | Public feature form |
|
|
333
|
+
| Provider billing/outage | Provider support unless UpgradeLens behavior is involved |
|
|
334
|
+
|
|
335
|
+
### 19.7 Privacy safeguards
|
|
336
|
+
|
|
337
|
+
Public forms continue to prohibit vulnerability detail, credentials, `.env`
|
|
338
|
+
content, private source, full private artifacts, and raw provider payloads. Neither
|
|
339
|
+
private route asks for passwords, OTP/2FA codes, recovery codes, authentication
|
|
340
|
+
cookies, or account setup details.
|
|
341
|
+
|
|
342
|
+
### 19.8 YAML, link, and placeholder validation
|
|
343
|
+
|
|
344
|
+
All three Issue Template YAML files parse; blank issues remain disabled; the single
|
|
345
|
+
contact link uses HTTPS and the canonical repository reporter URL; community
|
|
346
|
+
relative links resolve; Markdown fences balance; no unresolved contact placeholder,
|
|
347
|
+
local absolute path, or unexpected email remains.
|
|
348
|
+
|
|
349
|
+
Historical `PRIVATE_SECURITY_CHANNEL_REQUIRED` and
|
|
350
|
+
`CONDUCT_REPORTING_CHANNEL_REQUIRED` strings remain only in clearly labeled
|
|
351
|
+
Before/resolved review history.
|
|
352
|
+
|
|
353
|
+
### 19.9 Package impact
|
|
354
|
+
|
|
355
|
+
Root community policies and `.github/` remain outside the npm allowlist. The
|
|
356
|
+
package-visible OSS-03 report changes content but not path, so the tarball remains
|
|
357
|
+
232 explained files. Package version remains `0.5.0`.
|
|
358
|
+
|
|
359
|
+
### 19.10 Tests and checks
|
|
360
|
+
|
|
361
|
+
`git diff --check`, Issue Form YAML validation, link/contact/privacy scans,
|
|
362
|
+
`npm run check:package`, final `npm pack --dry-run --json`, and the focused
|
|
363
|
+
package-guard suite pass. The canonical suite is intentionally not rerun because no
|
|
364
|
+
source, schema, test, dependency, export, script, package policy, or runtime behavior
|
|
365
|
+
changed.
|
|
366
|
+
|
|
367
|
+
### 19.11 Remaining limitations
|
|
368
|
+
|
|
369
|
+
GitHub reporter UI was not exercised by creating an advisory, and the conduct
|
|
370
|
+
mailbox was not sent a test message. These are explicit non-goals, not open
|
|
371
|
+
Blocker/High findings. GitHub Discussions remains disabled as an optional Low
|
|
372
|
+
support limitation.
|
|
373
|
+
|
|
374
|
+
### 19.12 Final verdict and gate
|
|
375
|
+
|
|
376
|
+
**Verdict: `COMMUNITY_PRIVATE_REPORTING_READY`**
|
|
377
|
+
|
|
378
|
+
**Gate: `PROCEED_TO_OSS_04_PUBLIC_CI_AND_PACKAGE_METADATA`**
|