@thomasminh1995/depverdict 0.6.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (252) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +518 -0
  3. package/bin/depverdict.js +7 -0
  4. package/bin/upgradelens.js +7 -0
  5. package/docs/GR-01-Semantic-Grounding-Failure-Analysis.md +309 -0
  6. package/docs/GR-02-Versioned-Action-Evaluation-Criteria.md +187 -0
  7. package/docs/GR-03-Extractive-Contract-Safety-Experiment.md +242 -0
  8. package/docs/GR-04-Versioned-Production-Extractive-Contract.md +154 -0
  9. package/docs/IA-01-Repository-Usage-Discovery.md +122 -0
  10. package/docs/IA-02-Repository-Impact-Analysis.md +118 -0
  11. package/docs/IA-03-Repository-Impact-Evidence.md +160 -0
  12. package/docs/IA-04-CLI-Orchestration.md +235 -0
  13. package/docs/IA-05-Real-Provider-Validation.md +235 -0
  14. package/docs/IA-05-VinGrade-Validation.md +339 -0
  15. package/docs/MVP-01.md +48 -0
  16. package/docs/MVP-02-Architecture.md +536 -0
  17. package/docs/MVP-02-CLI-HTTP-Runtime.md +50 -0
  18. package/docs/MVP-02-HTTP-Lifecycle.md +37 -0
  19. package/docs/MVP-02-Knowledge-Manifest-Generation.md +75 -0
  20. package/docs/MVP-02-Knowledge-Manifest.md +279 -0
  21. package/docs/MVP-02-Knowledge-Research-Orchestration.md +62 -0
  22. package/docs/MVP-02-Knowledge-Store.md +87 -0
  23. package/docs/MVP-02-PyPI-Registry-Adapter.md +97 -0
  24. package/docs/MVP-02-Research-Planning.md +196 -0
  25. package/docs/MVP-02-Source-Provenance.md +81 -0
  26. package/docs/MVP-02-npm-Registry-Adapter.md +99 -0
  27. package/docs/RR-01-End-to-End-and-Real-Provider-Validation.md +393 -0
  28. package/docs/RR-01-RERUN-Extractive-Contract-Validation.md +566 -0
  29. package/docs/RR-02-Full-Product-Workflow-and-Developer-CLI-UX-Review.md +35 -0
  30. package/docs/RR02-FIX-01-Persistent-Qualification-Resolution.md +32 -0
  31. package/docs/RR02-FIX-02-Stage-aware-CLI-Progress-and-Heartbeat.md +28 -0
  32. package/docs/RR02-FIX-03-npm-Capture-Evidence-Exclusion.md +33 -0
  33. package/docs/RR02-FIX-03A-Complete-Package-Exclusion-and-Evidence-Commit.md +223 -0
  34. package/docs/RR02-FIX-04-Event-loop-safe-Heartbeat.md +393 -0
  35. package/docs/RR02-FIX-05-Materialize-Persisted-Qualification.md +207 -0
  36. package/docs/RR02-RERUN-CLI-Qualification-Progress-UX-and-Package-Validation.md +342 -0
  37. package/docs/VinGrade-MVP-02-Validation.md +480 -0
  38. package/docs/VinGrade-RC02-Live-Validation.md +273 -0
  39. package/docs/ai-capability-discovery.md +573 -0
  40. package/docs/ai-engineering-production-readiness.md +390 -0
  41. package/docs/ai-engineering-review.md +251 -0
  42. package/docs/ai-runtime-governance-discovery.md +754 -0
  43. package/docs/architecture-overview.md +78 -0
  44. package/docs/cli-progress.md +111 -0
  45. package/docs/decisions/diff-01-brand-distribution-identity.md +450 -0
  46. package/docs/decisions/diff-02-identity-compatibility-contract.md +274 -0
  47. package/docs/decisions/diff-03-repository-docs-community-migration.md +165 -0
  48. package/docs/decisions/diff-04-release-evidence-gap-acceptance.md +110 -0
  49. package/docs/discovery/mvp-05-ai-migration-planning-discovery.md +350 -0
  50. package/docs/gateway-runtime-discovery.md +614 -0
  51. package/docs/live-ai-validation.md +299 -0
  52. package/docs/migration-planning-qualification-resolution.md +99 -0
  53. package/docs/migrations/upgradelens-to-depverdict.md +97 -0
  54. package/docs/mp-r03-deterministic-upgrade-decision-architecture.md +135 -0
  55. package/docs/mp-r04-evidence-bounded-migration-handoff-architecture.md +116 -0
  56. package/docs/mp-r05-product-completion-and-decision-first-cli-architecture.md +162 -0
  57. package/docs/mvp-05-deterministic-context-runtime.md +127 -0
  58. package/docs/mvp-05-migration-checklist-contract.md +166 -0
  59. package/docs/mvp-05-migration-checklist-orchestration.md +105 -0
  60. package/docs/mvp-05-migration-evaluation-and-qualification.md +135 -0
  61. package/docs/mvp-05-provider-neutral-generator.md +79 -0
  62. package/docs/ollama-local-smoke-validation.md +156 -0
  63. package/docs/openai-compatible-runtime-discovery.md +789 -0
  64. package/docs/openrouter-one-dependency-validation.md +205 -0
  65. package/docs/oss-02-package-guard-hardening-architecture.md +131 -0
  66. package/docs/oss-04-public-ci-package-metadata-architecture.md +142 -0
  67. package/docs/package-content-policy.md +98 -0
  68. package/docs/releases/v0.5.0-technical-preview.md +114 -0
  69. package/docs/releases/v0.6.0-alpha.1-depverdict-preview.md +101 -0
  70. package/docs/reviews/diff-02-identity-contract-compatibility.md +413 -0
  71. package/docs/reviews/diff-03-repository-docs-community-migration.md +364 -0
  72. package/docs/reviews/diff-04-depverdict-distribution-identity-readiness-rereview.md +453 -0
  73. package/docs/reviews/diff-04-fix-post-rename-identity-release-remediation.md +310 -0
  74. package/docs/reviews/diff-05-final-preview-distribution-qualification.md +561 -0
  75. package/docs/reviews/mvp-05-final-product-value-workflow-rereview.md +471 -0
  76. package/docs/reviews/mvp-05-product-workflow-review.md +605 -0
  77. package/docs/reviews/oss-01-duplicate-artifact-investigation-cleanup.md +411 -0
  78. package/docs/reviews/oss-02-package-guard-hardening.md +303 -0
  79. package/docs/reviews/oss-03-community-scaffolding.md +378 -0
  80. package/docs/reviews/oss-04-public-ci-package-metadata.md +439 -0
  81. package/docs/reviews/oss-05-technical-preview-qualification.md +482 -0
  82. package/docs/reviews/upgradelens-vs-upgradedepdetective-source-comparison.md +355 -0
  83. package/docs/reviews/v0.5.0-pre-release-smoke.md +263 -0
  84. package/docs/reviews/v0.5.0-version-bump-release-verification.md +306 -0
  85. package/docs/runtime-contract-discovery.md +521 -0
  86. package/docs/structured-output-compatibility-report.md +100 -0
  87. package/docs/ts-fix-01-exact-duplicate-occurrence-target-selection-architecture.md +111 -0
  88. package/docs/version-analysis-architecture.md +827 -0
  89. package/eval/README.md +86 -0
  90. package/eval/datasets/generic/declared-constraint.json +59 -0
  91. package/eval/datasets/generic/evidence-conflict.json +73 -0
  92. package/eval/datasets/generic/major-breaking-release.json +66 -0
  93. package/eval/datasets/generic/missing-evidence.json +46 -0
  94. package/eval/datasets/generic/patch-release-low.json +59 -0
  95. package/eval/datasets/node/axios-patch-low.json +59 -0
  96. package/eval/datasets/node/react-major-breaking.json +66 -0
  97. package/eval/datasets/node/react-minor-compatibility.json +66 -0
  98. package/eval/datasets/python/fastapi-deprecation.json +66 -0
  99. package/eval/datasets/python/pydantic-major-breaking.json +66 -0
  100. package/eval/migration-planning/golden-dataset-v2.json +306 -0
  101. package/eval/migration-planning/golden-dataset.json +214 -0
  102. package/eval/schemas/expected-result.schema.json +88 -0
  103. package/eval/schemas/golden-case.schema.json +181 -0
  104. package/package.json +57 -0
  105. package/schemas/ai-scorecard.schema.json +132 -0
  106. package/schemas/benchmark-report.schema.json +189 -0
  107. package/schemas/benchmark.schema.json +55 -0
  108. package/schemas/capability-profile.schema.json +44 -0
  109. package/schemas/conformance-report.schema.json +150 -0
  110. package/schemas/deployment-profile.schema.json +64 -0
  111. package/schemas/evaluation-report.schema.json +158 -0
  112. package/schemas/knowledge-evidence-bundle.schema.json +150 -0
  113. package/schemas/knowledge-manifest.schema.json +548 -0
  114. package/schemas/metrics.schema.json +178 -0
  115. package/schemas/migration-checklist-extractive-candidate.schema.json +42 -0
  116. package/schemas/migration-checklist.schema.json +706 -0
  117. package/schemas/migration-evaluation-dataset-v2.schema.json +208 -0
  118. package/schemas/migration-evaluation-dataset.schema.json +204 -0
  119. package/schemas/migration-planning-qualification-record.schema.json +234 -0
  120. package/schemas/project-manifest.schema.json +308 -0
  121. package/schemas/qualification-record.schema.json +56 -0
  122. package/schemas/repository-impact-evidence.schema.json +232 -0
  123. package/schemas/repository-impact.schema.json +202 -0
  124. package/schemas/upgrade-decision.schema.json +273 -0
  125. package/schemas/usage-index.schema.json +179 -0
  126. package/schemas/version-analysis.schema.json +449 -0
  127. package/src/ai-runtime-debug.js +325 -0
  128. package/src/ai-runtime-error.js +42 -0
  129. package/src/ai-runtime.js +174 -0
  130. package/src/ai-scorecard.js +204 -0
  131. package/src/ai-version-analysis.js +484 -0
  132. package/src/artifact-root-compatibility.js +91 -0
  133. package/src/benchmark-report.js +111 -0
  134. package/src/benchmark-runner.js +191 -0
  135. package/src/canonical-json.js +69 -0
  136. package/src/cli.js +1299 -0
  137. package/src/conformance-report.js +158 -0
  138. package/src/conformance-runner.js +253 -0
  139. package/src/constants.js +73 -0
  140. package/src/cooperative-scheduler.js +79 -0
  141. package/src/dependencies.js +44 -0
  142. package/src/dependency-ai-context.js +625 -0
  143. package/src/detectors.js +253 -0
  144. package/src/discovery.js +234 -0
  145. package/src/ecosystem-version-adapter.js +294 -0
  146. package/src/environment-compatibility.js +77 -0
  147. package/src/evaluation-comparator.js +158 -0
  148. package/src/evaluation-report.js +76 -0
  149. package/src/evaluation-runner.js +248 -0
  150. package/src/evidence-source-adapter.js +472 -0
  151. package/src/files.js +89 -0
  152. package/src/governance-diagnostics.js +64 -0
  153. package/src/governance-loader.js +63 -0
  154. package/src/governance-metadata.js +346 -0
  155. package/src/governance-validator.js +360 -0
  156. package/src/http/bounded-fetch.js +278 -0
  157. package/src/http/cli-http-runtime.js +44 -0
  158. package/src/impact/input-loader.js +157 -0
  159. package/src/impact/matcher.js +40 -0
  160. package/src/impact/repository-impact.js +199 -0
  161. package/src/impact/runtime.js +24 -0
  162. package/src/impact/status.js +62 -0
  163. package/src/impact/writer.js +30 -0
  164. package/src/impact-evidence/input-loader.js +202 -0
  165. package/src/impact-evidence/repository-impact-evidence.js +234 -0
  166. package/src/impact-evidence/runtime.js +16 -0
  167. package/src/impact-evidence/writer.js +30 -0
  168. package/src/index.js +563 -0
  169. package/src/installed-version-baseline.js +196 -0
  170. package/src/knowledge-cache.js +324 -0
  171. package/src/knowledge-evidence-bundle.js +101 -0
  172. package/src/knowledge-evidence-producer.js +233 -0
  173. package/src/knowledge-manifest-builder.js +188 -0
  174. package/src/knowledge-manifest-writer.js +32 -0
  175. package/src/knowledge-manifest.js +255 -0
  176. package/src/knowledge-research.js +615 -0
  177. package/src/metrics-engine.js +205 -0
  178. package/src/migration-checklist/ai-candidate.js +320 -0
  179. package/src/migration-checklist/assembler.js +37 -0
  180. package/src/migration-checklist/context-runtime.js +828 -0
  181. package/src/migration-checklist/evaluation/action-criteria.js +244 -0
  182. package/src/migration-checklist/evaluation/comparator-v2.js +332 -0
  183. package/src/migration-checklist/evaluation/comparator.js +279 -0
  184. package/src/migration-checklist/evaluation/dataset-v2.js +227 -0
  185. package/src/migration-checklist/evaluation/dataset.js +336 -0
  186. package/src/migration-checklist/evaluation/extractive-fixtures-v2.js +148 -0
  187. package/src/migration-checklist/evaluation/metrics-v2.js +226 -0
  188. package/src/migration-checklist/evaluation/metrics.js +158 -0
  189. package/src/migration-checklist/evaluation/qualification-v2.js +321 -0
  190. package/src/migration-checklist/evaluation/qualification.js +239 -0
  191. package/src/migration-checklist/evaluation/runner-v2.js +294 -0
  192. package/src/migration-checklist/evaluation/runner.js +194 -0
  193. package/src/migration-checklist/evaluation/scorecard-v2.js +106 -0
  194. package/src/migration-checklist/evaluation/scorecard.js +86 -0
  195. package/src/migration-checklist/extractive-candidate.js +166 -0
  196. package/src/migration-checklist/extractive-prompt.js +62 -0
  197. package/src/migration-checklist/generator.js +702 -0
  198. package/src/migration-checklist/grounding-policy.js +117 -0
  199. package/src/migration-checklist/input-loader.js +613 -0
  200. package/src/migration-checklist/migration-checklist.js +635 -0
  201. package/src/migration-checklist/presentation.js +292 -0
  202. package/src/migration-checklist/progress.js +96 -0
  203. package/src/migration-checklist/prompt.js +83 -0
  204. package/src/migration-checklist/qualification-guard.js +462 -0
  205. package/src/migration-checklist/qualification-resolution.js +122 -0
  206. package/src/migration-checklist/qualification-store.js +225 -0
  207. package/src/migration-checklist/runtime.js +205 -0
  208. package/src/migration-checklist/verification.js +134 -0
  209. package/src/migration-checklist/writer.js +35 -0
  210. package/src/openai-compatible-provider.js +451 -0
  211. package/src/orchestration/failure-log.js +32 -0
  212. package/src/orchestration/pipeline.js +200 -0
  213. package/src/orchestration/progress-events.js +337 -0
  214. package/src/orchestration/progress-reporter.js +131 -0
  215. package/src/orchestration/text-writer.js +22 -0
  216. package/src/portable.js +13 -0
  217. package/src/product-completion.js +249 -0
  218. package/src/project-manifest-input.js +90 -0
  219. package/src/project-manifest.js +141 -0
  220. package/src/python-requirements.js +137 -0
  221. package/src/registry/npm-packument.js +256 -0
  222. package/src/registry/npm-registry-adapter.js +262 -0
  223. package/src/registry/pypi-project.js +300 -0
  224. package/src/registry/pypi-registry-adapter.js +235 -0
  225. package/src/registry/sanitize-registry-body.js +51 -0
  226. package/src/renderers/console.js +160 -0
  227. package/src/renderers/impact-presentation.js +278 -0
  228. package/src/renderers/markdown.js +172 -0
  229. package/src/research-plan.js +455 -0
  230. package/src/runtime-conformance.js +275 -0
  231. package/src/source-provenance.js +393 -0
  232. package/src/source-url.js +62 -0
  233. package/src/structured-output-schema.js +66 -0
  234. package/src/target-selector.js +306 -0
  235. package/src/upgrade-decision/input-loader.js +107 -0
  236. package/src/upgrade-decision/presentation.js +43 -0
  237. package/src/upgrade-decision/runtime.js +21 -0
  238. package/src/upgrade-decision/upgrade-decision.js +626 -0
  239. package/src/upgrade-decision/writer.js +30 -0
  240. package/src/usage/analyzer-registry.js +63 -0
  241. package/src/usage/coverage.js +116 -0
  242. package/src/usage/input-loader.js +139 -0
  243. package/src/usage/js/analyzer.js +240 -0
  244. package/src/usage/js/parser.js +21 -0
  245. package/src/usage/runtime.js +187 -0
  246. package/src/usage/scope.js +44 -0
  247. package/src/usage/source-files.js +50 -0
  248. package/src/usage/usage-index.js +217 -0
  249. package/src/usage/writer.js +31 -0
  250. package/src/version-analysis-loader.js +203 -0
  251. package/src/version-analysis-manifest.js +314 -0
  252. package/src/version-analysis-writer.js +30 -0
@@ -0,0 +1,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`**