@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,205 @@
|
|
|
1
|
+
# OpenRouter One-Dependency Enriched Evidence Validation
|
|
2
|
+
|
|
3
|
+
**IMPLEMENTED — NOT YET EXECUTED**
|
|
4
|
+
|
|
5
|
+
## 1. Purpose
|
|
6
|
+
|
|
7
|
+
This procedure validates one real dependency with its enriched release/changelog evidence through the existing OpenAI-compatible runtime and Version Analysis path. It is a bounded manual transport and integration check, not a model benchmark, qualification, or production certification.
|
|
8
|
+
|
|
9
|
+
The intended path is:
|
|
10
|
+
|
|
11
|
+
```text
|
|
12
|
+
one real dependency
|
|
13
|
+
→ enriched evidence
|
|
14
|
+
→ exact OpenRouter model slug
|
|
15
|
+
→ structured output
|
|
16
|
+
→ JSON Schema/Ajv validation
|
|
17
|
+
→ Trust Layer
|
|
18
|
+
→ version-analysis.json
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## 2. Prerequisites
|
|
22
|
+
|
|
23
|
+
- An OpenRouter API key and sufficient credit/quota for the exact selected model.
|
|
24
|
+
- A repository in which `discover` and `research` have already completed.
|
|
25
|
+
- An enriched Knowledge Evidence Bundle produced by the current UpgradeLens research flow.
|
|
26
|
+
- One exact OpenRouter model slug chosen by the maintainer.
|
|
27
|
+
- A Node.js version supported by UpgradeLens.
|
|
28
|
+
- The current UpgradeLens binary, or an existing local `npm link` installation.
|
|
29
|
+
|
|
30
|
+
## 3. Local `.env`
|
|
31
|
+
|
|
32
|
+
From the UpgradeLens checkout, create an ignored local file:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
cp .env.example .env
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Then replace the placeholders locally:
|
|
39
|
+
|
|
40
|
+
```dotenv
|
|
41
|
+
UPGRADELENS_AI_MODEL=<exact-model-slug>
|
|
42
|
+
UPGRADELENS_AI_AUTHORIZATION=Bearer <real-key>
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Do not send the key to Codex, chat, logs, or issue reports. Never commit `.env`.
|
|
46
|
+
|
|
47
|
+
UpgradeLens does not load `.env` automatically and does not search parent directories for runtime configuration. Node `--env-file` should not be assumed to interpolate `${OPENROUTER_API_KEY}` inside `.env`. Put the complete local value directly in that ignored file:
|
|
48
|
+
|
|
49
|
+
```dotenv
|
|
50
|
+
UPGRADELENS_AI_AUTHORIZATION=Bearer <REAL_OPENROUTER_KEY>
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## 4. Configurations Maintainer Must Add
|
|
54
|
+
|
|
55
|
+
The manual run requires exactly these runtime settings:
|
|
56
|
+
|
|
57
|
+
```text
|
|
58
|
+
UPGRADELENS_AI_PROVIDER=openai-compatible
|
|
59
|
+
UPGRADELENS_AI_ENDPOINT=https://openrouter.ai/api/v1/chat/completions
|
|
60
|
+
UPGRADELENS_AI_MODEL=<exact-model-slug>
|
|
61
|
+
UPGRADELENS_AI_AUTHORIZATION=Bearer <real-openrouter-key>
|
|
62
|
+
UPGRADELENS_AI_TIMEOUT_MS=180000
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
- `UPGRADELENS_AI_PROVIDER` remains `openai-compatible`; OpenRouter is not hardcoded into the AI core.
|
|
66
|
+
- `UPGRADELENS_AI_ENDPOINT` is the OpenRouter Chat Completions endpoint.
|
|
67
|
+
- `UPGRADELENS_AI_MODEL` is one exact model slug selected by the maintainer. Do not use `openrouter/auto` or `openrouter/free`.
|
|
68
|
+
- `UPGRADELENS_AI_AUTHORIZATION` is `Bearer` followed by the real local OpenRouter key.
|
|
69
|
+
- `UPGRADELENS_AI_TIMEOUT_MS` is the bounded runtime deadline; `180000` is the suggested validation value.
|
|
70
|
+
|
|
71
|
+
No `OPENAI_API_KEY`, `ANTHROPIC_API_KEY`, or `GOOGLE_API_KEY` is required by this procedure.
|
|
72
|
+
|
|
73
|
+
## 5. Loading Environment
|
|
74
|
+
|
|
75
|
+
### Option A — Node env file
|
|
76
|
+
|
|
77
|
+
Use the local ignored `.env` without relying on any automatic application loader:
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
node --env-file=.env /path/to/UpgradeLens/bin/upgradelens.js \
|
|
81
|
+
analyze-version . \
|
|
82
|
+
--package pypi:langsmith
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Replace `/path/to/UpgradeLens` with the maintainer's local checkout path.
|
|
86
|
+
|
|
87
|
+
### Option B — Shell exports
|
|
88
|
+
|
|
89
|
+
If the OpenRouter key is already present in a private shell variable, export the five UpgradeLens settings explicitly:
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
export UPGRADELENS_AI_PROVIDER="openai-compatible"
|
|
93
|
+
export UPGRADELENS_AI_ENDPOINT="https://openrouter.ai/api/v1/chat/completions"
|
|
94
|
+
export UPGRADELENS_AI_MODEL="<exact-model-slug>"
|
|
95
|
+
export UPGRADELENS_AI_AUTHORIZATION="Bearer ${OPENROUTER_API_KEY}"
|
|
96
|
+
export UPGRADELENS_AI_TIMEOUT_MS="180000"
|
|
97
|
+
|
|
98
|
+
upgradelens analyze-version . --package pypi:langsmith
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
The placeholders above are documentation only; never paste a real key into a committed file or shared command transcript.
|
|
102
|
+
|
|
103
|
+
## 6. Preparing Enriched Evidence
|
|
104
|
+
|
|
105
|
+
The maintainer should prepare the target repository before loading the cloud runtime configuration:
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
upgradelens discover .
|
|
109
|
+
upgradelens research .
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
Confirm that these artifacts exist without printing their full contents:
|
|
113
|
+
|
|
114
|
+
```text
|
|
115
|
+
.upgradelens/project-manifest.json
|
|
116
|
+
.upgradelens/knowledge-manifest.json
|
|
117
|
+
.upgradelens/knowledge-evidence-bundle.json
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
The `analyze-version` command reads these artifacts but does not modify them.
|
|
121
|
+
|
|
122
|
+
## 7. Recommended First Dependency
|
|
123
|
+
|
|
124
|
+
The recommended initial selector is:
|
|
125
|
+
|
|
126
|
+
```text
|
|
127
|
+
pypi:langsmith
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
KR-10 found an exact baseline, a target, nearby release notes, and real enriched context for this package. The package is not hardcoded in UpgradeLens; another exact canonical ID can be supplied with `--package`.
|
|
131
|
+
|
|
132
|
+
The selector is exact and case-sensitive. Bare names, wildcard/regex selectors, multiple package values, and automatic package choice are not supported. If one package ID maps to multiple dependency occurrences, the command stops before creating the runtime so the run cannot exceed one dependency call.
|
|
133
|
+
|
|
134
|
+
## 8. Manual Validation Command
|
|
135
|
+
|
|
136
|
+
With the ignored `.env` populated locally:
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
node --env-file=.env /path/to/UpgradeLens/bin/upgradelens.js \
|
|
140
|
+
analyze-version . \
|
|
141
|
+
--package pypi:langsmith
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
When UpgradeLens is already linked, the equivalent command is:
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
upgradelens analyze-version . --package pypi:langsmith
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
## 9. Expected Checks
|
|
151
|
+
|
|
152
|
+
After the maintainer runs the command, verify all of the following rather than assuming success:
|
|
153
|
+
|
|
154
|
+
- Exactly one runtime call occurred.
|
|
155
|
+
- The selected result has status `analyzed`.
|
|
156
|
+
- The candidate passed structured JSON Schema/Ajv validation.
|
|
157
|
+
- The Trust Layer passed.
|
|
158
|
+
- Every evidence reference belongs to the enriched Evidence Bundle.
|
|
159
|
+
- The output contains no invented URL, API, migration step, or evidence reference.
|
|
160
|
+
- The risk assessment has evidence support.
|
|
161
|
+
- The human-review decision follows the current policy.
|
|
162
|
+
- `.upgradelens/version-analysis.json` is valid.
|
|
163
|
+
- No retry or fallback occurred.
|
|
164
|
+
|
|
165
|
+
These are post-run checks, not claims that the validation has already passed.
|
|
166
|
+
|
|
167
|
+
## 10. Security
|
|
168
|
+
|
|
169
|
+
- Do not log the key or include it in errors, artifacts, fixtures, documentation, or chat.
|
|
170
|
+
- Do not store the Authorization header in `version-analysis.json` or another report.
|
|
171
|
+
- Do not commit `.env`; only `.env.example` is intended for version control.
|
|
172
|
+
- Do not persist the raw prompt, full evidence payload, or raw provider response in a report.
|
|
173
|
+
- Do not use an automatic model router for this validation.
|
|
174
|
+
- Enriched evidence is sent to a cloud service. The maintainer must explicitly accept this disclosure and use only repositories/evidence permitted to leave the local environment.
|
|
175
|
+
|
|
176
|
+
## 11. Interpretation
|
|
177
|
+
|
|
178
|
+
One successful request demonstrates only this combined path:
|
|
179
|
+
|
|
180
|
+
```text
|
|
181
|
+
OpenRouter transport
|
|
182
|
+
+ exact selected model
|
|
183
|
+
+ enriched evidence
|
|
184
|
+
+ structured-output/trust path
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
It does not prove that:
|
|
188
|
+
|
|
189
|
+
- the model is `CERTIFIED`;
|
|
190
|
+
- the upstream provider route is reproducible;
|
|
191
|
+
- this is the best model;
|
|
192
|
+
- the model is ready for MVP-04 or MVP-05;
|
|
193
|
+
- benchmark quality gates pass.
|
|
194
|
+
|
|
195
|
+
An exact model slug prevents model-level automatic selection, but OpenRouter may still route that model through multiple upstream providers. This setup does not add `provider.only`, `allow_fallbacks: false`, or other OpenRouter-specific request fields because the current adapter has no generic safe request-extra contract. Provider pinning and fallback control belong to a separate gateway-conformance task. This run is therefore not a reproducible locked-provider benchmark.
|
|
196
|
+
|
|
197
|
+
## 12. Status
|
|
198
|
+
|
|
199
|
+
```text
|
|
200
|
+
Execution status: NOT RUN
|
|
201
|
+
Qualification status: EXPERIMENTAL
|
|
202
|
+
Production certification: NONE
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
Tests and live OpenRouter validation were intentionally deferred to the maintainer.
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
# OSS-02 Package Guard Hardening Architecture
|
|
2
|
+
|
|
3
|
+
## Decision
|
|
4
|
+
|
|
5
|
+
UpgradeLens treats the entries read from the actual gzip tarball produced by
|
|
6
|
+
`npm pack --json` as the package authority. The guard remains a repository release
|
|
7
|
+
check, not a consumer lifecycle hook or a general source-tree scanner.
|
|
8
|
+
|
|
9
|
+
## 1. Current boundary
|
|
10
|
+
|
|
11
|
+
The existing guard already invokes `npm pack --json`, reads the resulting `.tgz`,
|
|
12
|
+
and validates tar entry paths. It does not rely only on a working-tree walk.
|
|
13
|
+
However, its pure validation layer currently checks only capture exclusions and 20
|
|
14
|
+
required paths. It does not reject copy/backup names, invalid or duplicate manifest
|
|
15
|
+
paths, or packaged untracked implementation files.
|
|
16
|
+
|
|
17
|
+
## 2. Manifest production and recursion safety
|
|
18
|
+
|
|
19
|
+
`inspectNpmPackage` remains the manifest producer:
|
|
20
|
+
|
|
21
|
+
1. create isolated temporary pack and npm-cache directories;
|
|
22
|
+
2. run `npm pack --json --ignore-scripts`;
|
|
23
|
+
3. read the actual tarball entries;
|
|
24
|
+
4. correlate those entries with optional Git state;
|
|
25
|
+
5. run the pure validator;
|
|
26
|
+
6. delete only the task-owned temporary directory.
|
|
27
|
+
|
|
28
|
+
`--ignore-scripts` makes manifest production independent of package lifecycle
|
|
29
|
+
scripts. The current `package.json` has no `prepack`, `prepare`, `prepublishOnly`, or
|
|
30
|
+
install lifecycle hook, and `check:package` is not invoked by npm lifecycle. Thus
|
|
31
|
+
there is no `check:package → npm pack → prepack → check:package` recursion. Tests
|
|
32
|
+
call the pure validator directly, while one isolated integration test exercises
|
|
33
|
+
actual npm inclusion.
|
|
34
|
+
|
|
35
|
+
## 3. Protected implementation areas
|
|
36
|
+
|
|
37
|
+
Strict filename and optional untracked-file policy applies to actual packaged files
|
|
38
|
+
under:
|
|
39
|
+
|
|
40
|
+
- `package/bin/`: executable entry points;
|
|
41
|
+
- `package/src/`: runtime implementation and public exports;
|
|
42
|
+
- `package/schemas/`: public data contracts;
|
|
43
|
+
- `package/eval/datasets/`: published evaluation cases;
|
|
44
|
+
- `package/eval/migration-planning/`: published versioned evaluation datasets;
|
|
45
|
+
- `package/eval/schemas/`: published evaluation contracts.
|
|
46
|
+
|
|
47
|
+
`scripts/` and `test/` are repository-only under the current `files` allowlist, so
|
|
48
|
+
they cannot be checked as package entries. Their accidental inclusion would first
|
|
49
|
+
require an explicit package-boundary change. Documentation is still checked by the
|
|
50
|
+
existing capture and general forbidden-entry rules, but is excluded from the
|
|
51
|
+
copy-name grammar because legitimate historical names such as the TS-FIX-01
|
|
52
|
+
duplicate-occurrence architecture document must remain valid.
|
|
53
|
+
|
|
54
|
+
## 4. Suspicious filename grammar
|
|
55
|
+
|
|
56
|
+
Within protected areas, a basename is suspicious when it has:
|
|
57
|
+
|
|
58
|
+
- a whitespace-delimited numeric copy suffix immediately before its extension,
|
|
59
|
+
including multi-extension files: `runtime 2.js`, `schema 3.schema.json`;
|
|
60
|
+
- a parenthesized numeric suffix: `runtime (2).js`;
|
|
61
|
+
- a terminal copy label delimited by whitespace, hyphen, or underscore:
|
|
62
|
+
`runtime copy.js`, `runtime-copy.js`, `runtime_duplicate.js`;
|
|
63
|
+
- a backup/editor suffix: `~`, `.bak`, `.orig`, `.save`, `.tmp`, `.swp`, `.swo`.
|
|
64
|
+
|
|
65
|
+
The numeric rule requires a copy delimiter and terminal copy position. It therefore
|
|
66
|
+
accepts `sha256.js`, `oauth2.js`, `v2-runtime.js`, `schema-v2.json`,
|
|
67
|
+
`mp-r02-policy.js`, `python3.md`, and `fixture-2fa.json`.
|
|
68
|
+
|
|
69
|
+
## 5. Portable path policy
|
|
70
|
+
|
|
71
|
+
The pure validator first rejects absolute paths, drive-letter paths, NUL bytes,
|
|
72
|
+
empty/dot segments, parent traversal, and paths outside the npm `package/` root.
|
|
73
|
+
Backslashes are normalized to `/` only after the original path has passed the
|
|
74
|
+
absolute/traversal checks. It then detects duplicate normalized entries before
|
|
75
|
+
deduplication and sorts diagnostics by stable reason code and portable path.
|
|
76
|
+
|
|
77
|
+
## 6. Git-state policy
|
|
78
|
+
|
|
79
|
+
The release command asks Git for tracked entries and untracked non-ignored entries.
|
|
80
|
+
In strict release mode, an actual packaged untracked regular file under a protected
|
|
81
|
+
area fails with `UNEXPECTED_PACKAGED_UNTRACKED_IMPLEMENTATION_FILE`.
|
|
82
|
+
|
|
83
|
+
Git absence or a source archive without `.git` is represented explicitly as
|
|
84
|
+
`GIT_METADATA_UNAVAILABLE`; it does not fail package-content validation by itself.
|
|
85
|
+
Suspicious filename, required-asset, forbidden-entry, invalid-path, and duplicate
|
|
86
|
+
entry rules remain authoritative without Git. Git command errors other than
|
|
87
|
+
repository absence are surfaced as operational errors, not silently treated as a
|
|
88
|
+
clean tracked state. There is no generated-file allowlist because the current
|
|
89
|
+
package has no repository-owned generated public implementation path.
|
|
90
|
+
|
|
91
|
+
## 7. Diagnostics and exit contract
|
|
92
|
+
|
|
93
|
+
The validator returns a frozen structured result with normalized entries, summary,
|
|
94
|
+
Git state, and violations. Every violation has a stable `code` and relative portable
|
|
95
|
+
`path`. Policy failures render:
|
|
96
|
+
|
|
97
|
+
```text
|
|
98
|
+
Package guard failed.
|
|
99
|
+
|
|
100
|
+
REASON_CODE
|
|
101
|
+
- relative/path
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
Reasons and paths are sorted, output is bounded, totals are retained in the
|
|
105
|
+
structured result, file contents are never printed, and the script exits non-zero.
|
|
106
|
+
Pass output reports package entry count, zero suspicious artifacts, and the single
|
|
107
|
+
authoritative required-asset count.
|
|
108
|
+
|
|
109
|
+
## 8. Isolated adversarial tests
|
|
110
|
+
|
|
111
|
+
Pure unit tests use in-memory manifest entries. The npm-boundary integration test
|
|
112
|
+
creates an isolated temporary package containing an untracked `src/runtime 2.js`,
|
|
113
|
+
runs npm pack with lifecycle scripts disabled, proves npm includes the file, and
|
|
114
|
+
passes those actual tar entries to the validator. Temporary fixtures and npm caches
|
|
115
|
+
live outside the repository and are removed by the test. Mutation checks compare
|
|
116
|
+
fixture bytes before and after validation.
|
|
117
|
+
|
|
118
|
+
## 9. Manifest determinism layer
|
|
119
|
+
|
|
120
|
+
The validator sorts normalized entries and diagnostics, detects duplicate normalized
|
|
121
|
+
paths, and produces byte-identical structured/rendered results for reversed input.
|
|
122
|
+
Release validation may repeat `npm pack` and compare actual entry inventories.
|
|
123
|
+
Neither a file count nor a tarball digest is a permanent business invariant.
|
|
124
|
+
|
|
125
|
+
## 10. Explicit scope boundary
|
|
126
|
+
|
|
127
|
+
OSS-02 preserves the existing required assets, capture exclusion, `.env`, local
|
|
128
|
+
artifact, credential/authorization-file, qualification-input/record, bin, and export
|
|
129
|
+
target checks. It adds structural package hygiene only. It does not inspect arbitrary
|
|
130
|
+
file content, detect malware, scan secrets generally, alter product behavior, pin a
|
|
131
|
+
manifest snapshot, delete findings, or run on consumer installation.
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
# OSS-04 Public CI and Package Metadata Architecture
|
|
2
|
+
|
|
3
|
+
## Status and scope
|
|
4
|
+
|
|
5
|
+
This decision defines read-only public continuous integration and npm/GitHub
|
|
6
|
+
metadata for UpgradeLens `0.5.0`. It does not change runtime, schema, evaluation,
|
|
7
|
+
upgrade-decision, or Migration Checklist policy. It also does not publish a package,
|
|
8
|
+
create a release, or mutate repository state.
|
|
9
|
+
|
|
10
|
+
## Workflow triggers
|
|
11
|
+
|
|
12
|
+
CI runs for every `pull_request`, pushes to `main` and `develop`, and manual
|
|
13
|
+
`workflow_dispatch` requests. Both long-lived branches exist locally and on the
|
|
14
|
+
canonical remote. Pull requests are the primary review gate; direct pushes are
|
|
15
|
+
covered so the protected branch state is independently validated. There is no
|
|
16
|
+
schedule because OSS-04 has no time-based check or dependency-update policy.
|
|
17
|
+
|
|
18
|
+
`pull_request_target` is prohibited. Fork code therefore runs only in the ordinary
|
|
19
|
+
pull-request context with a read-only token and no repository secrets.
|
|
20
|
+
|
|
21
|
+
## Supported Node matrix
|
|
22
|
+
|
|
23
|
+
The package declares `node >=20`, so CI does not narrow the engine contract. The
|
|
24
|
+
mandatory compatibility matrix is:
|
|
25
|
+
|
|
26
|
+
- Node 20: the declared minimum, retained as a compatibility floor even though its
|
|
27
|
+
upstream support window ended on 2026-04-30;
|
|
28
|
+
- Node 22: the newer maintenance LTS line, supported through 2027-04-30;
|
|
29
|
+
- Node 24: the current active LTS line, supported through 2028-04-30.
|
|
30
|
+
|
|
31
|
+
The dates come from the official
|
|
32
|
+
[Node.js release schedule](https://github.com/nodejs/Release/blob/main/schedule.json).
|
|
33
|
+
Node 26 is Current until October 2026, not LTS at this decision date, so it is not a
|
|
34
|
+
mandatory preview gate. The Node 24 package-smoke job is the primary release-line
|
|
35
|
+
check. Node 20 remains visible rather than being silently removed; changing the
|
|
36
|
+
minimum engine is a separate compatibility and release-policy decision.
|
|
37
|
+
|
|
38
|
+
## Action supply-chain policy
|
|
39
|
+
|
|
40
|
+
Only GitHub-maintained `actions/checkout` and `actions/setup-node` are used. Each is
|
|
41
|
+
pinned to the full commit currently referenced by its supported `v6` release line,
|
|
42
|
+
with the major version retained in a comment:
|
|
43
|
+
|
|
44
|
+
- `actions/checkout`: `df4cb1c069e1874edd31b4311f1884172cec0e10`;
|
|
45
|
+
- `actions/setup-node`: `249970729cb0ef3589644e2896645e5dc5ba9c38`.
|
|
46
|
+
|
|
47
|
+
Full SHA pinning makes a reviewed workflow revision immutable. The trade-off is
|
|
48
|
+
that action security and runtime updates require an explicit pull request instead
|
|
49
|
+
of arriving through a moving major tag. No third-party action is needed.
|
|
50
|
+
|
|
51
|
+
Checkout disables credential persistence because no later step performs an
|
|
52
|
+
authenticated Git operation. Setup Node uses the committed lockfile as the explicit
|
|
53
|
+
npm cache dependency.
|
|
54
|
+
|
|
55
|
+
## Permissions, fork safety, and provider isolation
|
|
56
|
+
|
|
57
|
+
Workflow permissions are exactly `contents: read`. There is no write, package,
|
|
58
|
+
identity-token, security-event, issue, or pull-request permission. Jobs do not read
|
|
59
|
+
`secrets`, call a write API, interpolate pull-request-controlled fields into shell
|
|
60
|
+
commands, upload artifacts, or retain credentials.
|
|
61
|
+
|
|
62
|
+
The test job sets `CI=true` and shadows supported UpgradeLens provider variables
|
|
63
|
+
with empty values. This prevents a runner or repository environment from supplying
|
|
64
|
+
an inherited endpoint, model, authorization value, timeout, or debug mode. Tests
|
|
65
|
+
continue to inject their own deterministic fake environments where required.
|
|
66
|
+
Neither CI job needs OpenAI, OpenRouter, Anthropic, Ollama, a local qualification
|
|
67
|
+
record, private repository access, or any real-provider credential.
|
|
68
|
+
|
|
69
|
+
## Install, test, and package-smoke stages
|
|
70
|
+
|
|
71
|
+
The matrix job performs:
|
|
72
|
+
|
|
73
|
+
1. read-only checkout;
|
|
74
|
+
2. Node setup with npm cache;
|
|
75
|
+
3. deterministic `npm ci`;
|
|
76
|
+
4. the canonical `npm test`;
|
|
77
|
+
5. `npm run check:package`, which creates and validates an actual tarball with
|
|
78
|
+
lifecycle scripts disabled.
|
|
79
|
+
|
|
80
|
+
No lint, typecheck, or build command is invented because the repository defines
|
|
81
|
+
none. Local matrix replay found that Node 20's default test-runner concurrency can
|
|
82
|
+
starve one real keep-alive lifecycle test past its unchanged three-second natural
|
|
83
|
+
exit budget. The same test passes alone, and the complete Node 20 suite passes when
|
|
84
|
+
the canonical npm test script receives `--test-concurrency=2`. CI applies that
|
|
85
|
+
bounded runner concurrency only on Node 20; it does not skip the test, increase its
|
|
86
|
+
timeout, or alter product behavior. Node 22 and Node 24 use plain `npm test`.
|
|
87
|
+
|
|
88
|
+
The Node 24 package-smoke job performs:
|
|
89
|
+
|
|
90
|
+
1. the same checkout, setup, and deterministic install;
|
|
91
|
+
2. `npm pack --dry-run --json --ignore-scripts`;
|
|
92
|
+
3. a repository-owned Node script that creates an actual tarball in an isolated
|
|
93
|
+
cache/output directory;
|
|
94
|
+
4. actual-manifest package-guard validation and tar extraction;
|
|
95
|
+
5. a clean, lifecycle-disabled install from that tarball;
|
|
96
|
+
6. installed CLI `--version` and `--help`;
|
|
97
|
+
7. ESM package import and the existing 438-public-export contract;
|
|
98
|
+
8. cleanup of all task-owned temporary state in `finally`.
|
|
99
|
+
|
|
100
|
+
The package smoke does not call the product analysis workflow, a provider, a
|
|
101
|
+
publisher, or a deployment target. No tarball is uploaded as an Actions artifact;
|
|
102
|
+
logs contain only bounded verification summaries, so artifact retention is zero.
|
|
103
|
+
|
|
104
|
+
## Lifecycle and side-effect boundary
|
|
105
|
+
|
|
106
|
+
`package.json` has no `prepack`, `prepare`, `prepublishOnly`, `preinstall`,
|
|
107
|
+
`install`, or `postinstall` hook. The package guard calls
|
|
108
|
+
`npm pack --json --ignore-scripts`, so `check:package` cannot recurse through an npm
|
|
109
|
+
lifecycle. Consumer installation in the smoke also uses `--ignore-scripts`.
|
|
110
|
+
|
|
111
|
+
The workflow contains no `npm publish`, Git tag, release creation, commit, push,
|
|
112
|
+
deployment, PR comment, or generated-file writeback. It cannot publish because it
|
|
113
|
+
has neither a publishing command nor write/OIDC credentials.
|
|
114
|
+
|
|
115
|
+
## Concurrency, cancellation, and timeout
|
|
116
|
+
|
|
117
|
+
The concurrency group uses the workflow name and stable Git ref. A newer commit on
|
|
118
|
+
the same branch or pull-request ref cancels the older run. Different branches and
|
|
119
|
+
pull requests remain independent.
|
|
120
|
+
|
|
121
|
+
Each job has a 20-minute timeout. This allows deterministic install and the
|
|
122
|
+
canonical suite reasonable runner variance while bounding dependency, listener, or
|
|
123
|
+
subprocess hangs. The package smoke has the same finite ceiling.
|
|
124
|
+
|
|
125
|
+
## Package metadata ownership and lockfile policy
|
|
126
|
+
|
|
127
|
+
`package.json` owns the public npm description, repository, homepage, issue URL,
|
|
128
|
+
keywords, version, engine, executable, export, license, and package-content
|
|
129
|
+
boundary. OSS-04 updates only stale positioning and missing public discovery
|
|
130
|
+
metadata.
|
|
131
|
+
|
|
132
|
+
`package-lock.json` mirrors dependency-tree and root-package fields that npm records.
|
|
133
|
+
Description, homepage, bugs, and keywords are not forced into the lockfile. A
|
|
134
|
+
lockfile-only npm consistency check must produce no dependency, resolved, integrity,
|
|
135
|
+
or version drift.
|
|
136
|
+
|
|
137
|
+
## Hosted acceptance
|
|
138
|
+
|
|
139
|
+
Static validation and local command replay can prove the workflow contract but
|
|
140
|
+
cannot prove a hosted run. After a maintainer commits and pushes the change, every
|
|
141
|
+
Node matrix job and the Node 24 package-smoke job must pass at the recorded commit
|
|
142
|
+
before branch protection or the next qualification gate treats CI as hosted proof.
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# npm package content policy
|
|
2
|
+
|
|
3
|
+
DepVerdict treats the tarball produced by `npm pack` as the authoritative
|
|
4
|
+
public package boundary. Repository evidence can remain tracked without
|
|
5
|
+
becoming npm consumer content.
|
|
6
|
+
|
|
7
|
+
## Included content
|
|
8
|
+
|
|
9
|
+
`package.json.files` explicitly includes the executable, public runtime source,
|
|
10
|
+
schemas, evaluation datasets, user-facing documentation, license, and README.
|
|
11
|
+
The package guard additionally requires critical assets such as:
|
|
12
|
+
|
|
13
|
+
- `bin/depverdict.js`, the bounded `bin/upgradelens.js` compatibility wrapper,
|
|
14
|
+
and the public runtime entry points;
|
|
15
|
+
- the current architecture overview, identity-migration decision,
|
|
16
|
+
UpgradeLens-to-DepVerdict guide, preview release draft, and migration report;
|
|
17
|
+
- Migration Planning qualification and extractive-candidate schemas;
|
|
18
|
+
- Migration Planning v1 and v2 golden datasets;
|
|
19
|
+
- CLI progress, qualification-resolution, and package-policy documentation.
|
|
20
|
+
|
|
21
|
+
The guard reads actual gzip tar entries from a fresh
|
|
22
|
+
`npm pack --json --ignore-scripts`; it does not infer package contents from the
|
|
23
|
+
working tree. Lifecycle scripts are disabled for manifest production so a future
|
|
24
|
+
`prepack` hook cannot recurse into the guard.
|
|
25
|
+
|
|
26
|
+
## Repository-only CLI capture evidence
|
|
27
|
+
|
|
28
|
+
CLI transcripts, screenshots, environment summaries, and manifests use the
|
|
29
|
+
direct-child convention:
|
|
30
|
+
|
|
31
|
+
```text
|
|
32
|
+
docs/*-cli-captures/
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
They are retained in Git for release review but excluded by the path-specific
|
|
36
|
+
`package.json.files` rule:
|
|
37
|
+
|
|
38
|
+
```text
|
|
39
|
+
!docs/*-cli-captures
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
The rule intentionally does not exclude all documentation. User-facing
|
|
43
|
+
Markdown remains package-visible.
|
|
44
|
+
|
|
45
|
+
Capture helper programs under `scripts/` or `tools/` are also repository-only.
|
|
46
|
+
Those directories are outside the package allowlist. The guard recognizes
|
|
47
|
+
known release capture trees, the future direct-child naming convention, and
|
|
48
|
+
capture-helper path patterns as forbidden tarball entries.
|
|
49
|
+
|
|
50
|
+
## Validation
|
|
51
|
+
|
|
52
|
+
Run:
|
|
53
|
+
|
|
54
|
+
```text
|
|
55
|
+
npm run check:package
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
The check fails when an actual tarball:
|
|
59
|
+
|
|
60
|
+
- contains a capture, environment, credential-file, local-machine, or private
|
|
61
|
+
qualification artifact;
|
|
62
|
+
- omits any required public asset;
|
|
63
|
+
- contains an invalid, traversing, absolute, or duplicate normalized entry;
|
|
64
|
+
- contains numeric-copy, parenthesized-copy, copy/duplicate-label, or backup
|
|
65
|
+
filenames in packaged runtime, executable, schema, or evaluation areas; or
|
|
66
|
+
- contains a protected implementation file that is not tracked by Git during a
|
|
67
|
+
strict release check.
|
|
68
|
+
|
|
69
|
+
Git correlation is supplemental. In a source archive without Git metadata, the
|
|
70
|
+
structural tarball rules still run and Git absence does not fail by itself. The
|
|
71
|
+
filename grammar is copy-suffix-specific: legitimate names such as `sha256.js`,
|
|
72
|
+
`oauth2.js`, `v2-runtime.js`, and `schema-v2.json` remain valid. Documentation is
|
|
73
|
+
outside strict copy-name matching so intentional historical document identities are
|
|
74
|
+
preserved.
|
|
75
|
+
|
|
76
|
+
`npm run check` runs the repository tests and this package check. Focused guard
|
|
77
|
+
tests also verify stable path normalization, the future capture convention,
|
|
78
|
+
missing-required-asset failures, invalid paths, deterministic diagnostics,
|
|
79
|
+
tracked/untracked policy, valid numeric-name false positives, and an isolated npm
|
|
80
|
+
tarball that contains an untracked numeric-copy artifact.
|
|
81
|
+
|
|
82
|
+
The guard reports findings and exits non-zero; it never deletes or rewrites them.
|
|
83
|
+
Investigate ownership and content before cleanup.
|
|
84
|
+
|
|
85
|
+
Package validation for a release should inspect the real tar entries, perform
|
|
86
|
+
an isolated install of the produced tarball, and smoke-test the packaged
|
|
87
|
+
version, help, public import, and default analysis command. Generated tarballs,
|
|
88
|
+
installation directories, caches, and raw provider data are never committed.
|
|
89
|
+
|
|
90
|
+
## Privacy and compatibility
|
|
91
|
+
|
|
92
|
+
Capture evidence must be sanitized before staging: no credentials,
|
|
93
|
+
authorization material, private endpoints, raw provider payloads, hidden
|
|
94
|
+
reasoning, or machine-specific absolute paths. Exclusion from npm is a package
|
|
95
|
+
size and privacy boundary, not a substitute for repository privacy review.
|
|
96
|
+
|
|
97
|
+
This policy changes only package composition. It does not alter qualification,
|
|
98
|
+
progress, impact, evidence, migration-planning, or provider semantics.
|