@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,273 @@
|
|
|
1
|
+
# VinGrade RC-02 Live Validation
|
|
2
|
+
|
|
3
|
+
Validation date: 2026-07-14 (Asia/Ho_Chi_Minh)
|
|
4
|
+
|
|
5
|
+
## 1. Environment
|
|
6
|
+
|
|
7
|
+
| Item | Value |
|
|
8
|
+
| --- | --- |
|
|
9
|
+
| VinGrade repository | `<VINGRADE_REPO>` |
|
|
10
|
+
| VinGrade branch | `feat/knowledege-rubric-criteria` |
|
|
11
|
+
| UpgradeLens repository | `<UPGRADELENS_REPO>` |
|
|
12
|
+
| UpgradeLens branch | `feat/mvp-02-knowledge-research` |
|
|
13
|
+
| UpgradeLens version | `0.1.1` |
|
|
14
|
+
| Node.js | `v26.0.0` |
|
|
15
|
+
| Platform | Darwin 25.5.0 arm64 |
|
|
16
|
+
| CLI under test | `node <UPGRADELENS_REPO>/bin/upgradelens.js` |
|
|
17
|
+
| Operating mode | Direct local CLI; clean online scoped HTTP runtime, cache-heavy online, offline, stdout, and custom output |
|
|
18
|
+
|
|
19
|
+
VinGrade had no tracked modifications. The following unrelated untracked state existed before validation and was not modified: `.agents/skills/`, `.aider.chat.history.md`, `.aider.input.history`, `.aider.tags.cache.v4/`, `FE/public/pitch/`, `PROJECT_DESCRIPTION.md`, `docs/architecture/legacy-architecture-audit.md`, `docs/architecture/prompt-management-audit.md`, `docs/architecture/teaching-intelligence-roadmap.md`, `docs/architecture/teaching-intelligence-systematic-review.md`, `docs/migration/`, `docs/reports/ai-quality-architecture-review.md`, `docs/reports/project-discovery-report.md`, `presentation/vingrade-pitch-speaker-notes.md`, and `skills-lock.json`.
|
|
20
|
+
|
|
21
|
+
UpgradeLens already contained the RC-02 working-tree implementation and tests. No UpgradeLens or VinGrade source file was changed during this validation.
|
|
22
|
+
|
|
23
|
+
## 2. Commands executed
|
|
24
|
+
|
|
25
|
+
Repository paths below are sanitized. The direct CLI was used throughout.
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
cd <VINGRADE_REPO>
|
|
29
|
+
git branch --show-current
|
|
30
|
+
git status --short
|
|
31
|
+
node --version
|
|
32
|
+
pwd
|
|
33
|
+
|
|
34
|
+
cd <UPGRADELENS_REPO>
|
|
35
|
+
git branch --show-current
|
|
36
|
+
git status --short
|
|
37
|
+
npm test
|
|
38
|
+
npm_config_cache="$TMPDIR/upgradelens-npm-cache" npm run check
|
|
39
|
+
git diff --check
|
|
40
|
+
node <UPGRADELENS_REPO>/bin/upgradelens.js --version
|
|
41
|
+
node <UPGRADELENS_REPO>/bin/upgradelens.js --help
|
|
42
|
+
|
|
43
|
+
cd <VINGRADE_REPO>
|
|
44
|
+
find .upgradelens -maxdepth 5 -type f 2>/dev/null | sort
|
|
45
|
+
rm -rf "$TMPDIR/vingrade-upgradelens-before-rc02"
|
|
46
|
+
if [ -d .upgradelens ]; then
|
|
47
|
+
cp -R .upgradelens "$TMPDIR/vingrade-upgradelens-before-rc02"
|
|
48
|
+
fi
|
|
49
|
+
rm -rf .upgradelens
|
|
50
|
+
node <UPGRADELENS_REPO>/bin/upgradelens.js discover .
|
|
51
|
+
|
|
52
|
+
/usr/bin/time -p node <UPGRADELENS_REPO>/bin/upgradelens.js research . \
|
|
53
|
+
> "$TMPDIR/vingrade-rc02-online.stdout" \
|
|
54
|
+
2> "$TMPDIR/vingrade-rc02-online.stderr"
|
|
55
|
+
pgrep -af "bin/upgradelens.js research"
|
|
56
|
+
lsof -nP -p <PID>
|
|
57
|
+
|
|
58
|
+
/usr/bin/time -p node <UPGRADELENS_REPO>/bin/upgradelens.js research . \
|
|
59
|
+
> "$TMPDIR/vingrade-rc02-second.stdout" \
|
|
60
|
+
2> "$TMPDIR/vingrade-rc02-second.stderr"
|
|
61
|
+
|
|
62
|
+
/usr/bin/time -p node <UPGRADELENS_REPO>/bin/upgradelens.js research . --offline \
|
|
63
|
+
> "$TMPDIR/vingrade-rc02-offline.stdout" \
|
|
64
|
+
2> "$TMPDIR/vingrade-rc02-offline.stderr"
|
|
65
|
+
|
|
66
|
+
rm -rf "$TMPDIR/vingrade-rc02-cache-backup"
|
|
67
|
+
mv .upgradelens/cache "$TMPDIR/vingrade-rc02-cache-backup"
|
|
68
|
+
node <UPGRADELENS_REPO>/bin/upgradelens.js research . --offline \
|
|
69
|
+
> "$TMPDIR/vingrade-rc02-offline-empty.stdout" \
|
|
70
|
+
2> "$TMPDIR/vingrade-rc02-offline-empty.stderr"
|
|
71
|
+
rm -rf .upgradelens/cache
|
|
72
|
+
mv "$TMPDIR/vingrade-rc02-cache-backup" .upgradelens/cache
|
|
73
|
+
|
|
74
|
+
node <UPGRADELENS_REPO>/bin/upgradelens.js research . --stdout \
|
|
75
|
+
> "$TMPDIR/vingrade-rc02-stdout.json" \
|
|
76
|
+
2> "$TMPDIR/vingrade-rc02-stdout.stderr"
|
|
77
|
+
|
|
78
|
+
mkdir -p artifacts
|
|
79
|
+
node <UPGRADELENS_REPO>/bin/upgradelens.js research . \
|
|
80
|
+
--output artifacts/vingrade-knowledge-rc02.json
|
|
81
|
+
node <UPGRADELENS_REPO>/bin/upgradelens.js research . \
|
|
82
|
+
--output artifacts/vingrade-knowledge-rc02.json
|
|
83
|
+
node <UPGRADELENS_REPO>/bin/upgradelens.js research . \
|
|
84
|
+
--output "$TMPDIR/vingrade-invalid-output.json"
|
|
85
|
+
rm -rf artifacts
|
|
86
|
+
rm -f "$TMPDIR/vingrade-invalid-output.json"
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
The first online command ran under a bounded observer. The observer detected the `Wrote:` completion line, then used `ps` and `lsof` to record exact UpgradeLens process and established-TCP counts immediately, after 5 seconds, after 15 seconds, and after 30 seconds. It was authorized to terminate only if the CLI was still alive after the final observation; no termination was needed.
|
|
90
|
+
|
|
91
|
+
Strict validation used UpgradeLens's existing `loadProjectManifestInput`, `createResearchPlan`, and `validateKnowledgeManifest` functions. Recursive `rg`/`jq` audits checked paths, URLs, private fields, runtime details, and ordering. A size-only `curl` request discarded the Vite response body to `/dev/null`.
|
|
92
|
+
|
|
93
|
+
## 3. Automated gate
|
|
94
|
+
|
|
95
|
+
The first sandboxed invocation had 121 passes and one intentional skip because local loopback listeners were unavailable. The gate was rerun with local-loopback access so the RC-02 real keep-alive lifecycle test executed.
|
|
96
|
+
|
|
97
|
+
| Gate | Result |
|
|
98
|
+
| --- | --- |
|
|
99
|
+
| `npm test` | 122 tests, 122 passed, 0 failed/skipped/cancelled/todo |
|
|
100
|
+
| `npm run check` | Passed; reran 122/122 tests and `npm pack --dry-run` |
|
|
101
|
+
| `git diff --check` | Passed with no output |
|
|
102
|
+
| Direct CLI version/help | `0.1.1`; `discover` and `research` documented |
|
|
103
|
+
|
|
104
|
+
The real-loopback automated test confirmed that the online CLI closes its scoped dispatcher after concurrent keep-alive requests. Other RC-02 tests confirmed one owned runtime per online command, idempotent close, cleanup on success/failure, no global mutation, and no runtime creation for offline/discovery/help/version.
|
|
105
|
+
|
|
106
|
+
## 4. Discovery result
|
|
107
|
+
|
|
108
|
+
Discovery exited 0 and wrote a strict-valid Project Manifest.
|
|
109
|
+
|
|
110
|
+
| Metric | Actual |
|
|
111
|
+
| --- | ---: |
|
|
112
|
+
| Project Manifest schema | `2.0.0` |
|
|
113
|
+
| Generator | `UpgradeLens 0.1.1` |
|
|
114
|
+
| Repository / branch | `C2-App-008` / `feat/knowledege-rubric-criteria` |
|
|
115
|
+
| Projects | 2 |
|
|
116
|
+
| Node / Python projects | 1 / 1 |
|
|
117
|
+
| Node declarations / unique / duplicates | 19 / 19 / 0 |
|
|
118
|
+
| Python declarations / unique / duplicates | 28 / 27 / 1 |
|
|
119
|
+
| Research occurrences / unique packages | 47 / 46 |
|
|
120
|
+
| Warnings | 1 |
|
|
121
|
+
|
|
122
|
+
The warning was `DUPLICATE_DEPENDENCY_DECLARATION` for `langchain-openai`. The Project Manifest preserves both declarations; the Research Plan contains one `pypi:langchain-openai` identity with two dependency occurrences.
|
|
123
|
+
|
|
124
|
+
`loadProjectManifestInput` passed Draft 2020-12 schema validation and runtime dependency invariants. Runtime validation confirmed canonical inventory ordering. All paths are repository-relative, and no absolute local path or `file://` URL appears. The exact Project Manifest digest is `sha256:34b956cc16adb5f96cd20129838241a7bd8737674d21ed3fe4126e88db636b74`.
|
|
125
|
+
|
|
126
|
+
## 5. First clean online run
|
|
127
|
+
|
|
128
|
+
The clean run started after removing all prior `.upgradelens/` content, so no old cache entry could hide lifecycle or payload behavior.
|
|
129
|
+
|
|
130
|
+
### Contract and summary
|
|
131
|
+
|
|
132
|
+
| Field | Actual |
|
|
133
|
+
| --- | --- |
|
|
134
|
+
| Knowledge Manifest schema / generator | `1.0.0` / `UpgradeLens 0.1.1` |
|
|
135
|
+
| Policy mode | `online` |
|
|
136
|
+
| Project Manifest digest | `sha256:34b956cc16adb5f96cd20129838241a7bd8737674d21ed3fe4126e88db636b74` |
|
|
137
|
+
| Research ID | `sha256:6a2723984b6619bef60a46a2bba19fe3867a7cdd91bcfe76cb69dc9b5910de74` |
|
|
138
|
+
|
|
139
|
+
| Metric | Actual |
|
|
140
|
+
| --- | ---: |
|
|
141
|
+
| Input occurrences / packages | 47 / 46 |
|
|
142
|
+
| Resolved / partial / not found | 45 / 0 / 0 |
|
|
143
|
+
| Invalid / unavailable | 0 / 1 |
|
|
144
|
+
| Sources / warnings | 184 / 1 |
|
|
145
|
+
| Cache hits / misses | 0 / 46 |
|
|
146
|
+
| Researched packages | 46 |
|
|
147
|
+
| Retries / partial failures | 0 / 1 |
|
|
148
|
+
|
|
149
|
+
Warnings grouped by code: `REGISTRY_RESPONSE_INVALID` = 1 for `npm:vite`.
|
|
150
|
+
|
|
151
|
+
### Timing
|
|
152
|
+
|
|
153
|
+
| Measurement | Actual |
|
|
154
|
+
| --- | ---: |
|
|
155
|
+
| Exit code | 0 |
|
|
156
|
+
| Manifest duration | 13,484 ms |
|
|
157
|
+
| Process `real` / `user` / `sys` | 14.17 / 13.90 / 0.44 seconds |
|
|
158
|
+
| Real minus manifest duration | 0.686 seconds |
|
|
159
|
+
| Manifest completion to process exit | 0.361 seconds |
|
|
160
|
+
| Manual termination | No |
|
|
161
|
+
| Shell prompt / wrapper wait | Returned normally, exit 0 |
|
|
162
|
+
|
|
163
|
+
## 6. HTTP lifecycle evidence
|
|
164
|
+
|
|
165
|
+
| Observation | UpgradeLens processes | Established TCP sockets |
|
|
166
|
+
| --- | ---: | ---: |
|
|
167
|
+
| Immediately after completion | 0 | 0 |
|
|
168
|
+
| Completion +5 seconds | 0 | 0 |
|
|
169
|
+
| Completion +15 seconds | 0 | 0 |
|
|
170
|
+
| Completion +30 seconds | 0 | 0 |
|
|
171
|
+
|
|
172
|
+
RC-02 fixes the previously reproduced VinGrade lifecycle behavior. The clean online command exited naturally approximately 0.361 seconds after manifest completion. No scoped Agent socket, child process, or UpgradeLens research process remained. No manual signal was sent.
|
|
173
|
+
|
|
174
|
+
Source inspection and tests show that the CLI constructs a command-scoped Undici `Agent`, passes it only as the request dispatcher, and closes it in CLI cleanup. No `setGlobalDispatcher`, global fetch mutation, or `process.exit()` workaround exists. This validates scoped ownership and absence of global dispatcher mutation; it does not claim any undocumented internal Undici root cause for the former RC-01 behavior.
|
|
175
|
+
|
|
176
|
+
## 7. Package spot checks
|
|
177
|
+
|
|
178
|
+
| Package | Status | Occurrences | Declared version(s) | Latest | Selection | Releases | Sources | Warnings |
|
|
179
|
+
| --- | --- | ---: | --- | --- | --- | ---: | ---: | --- |
|
|
180
|
+
| `npm:react` | resolved | 1 | `^19.2.6` | `19.2.7` | `dist-tag:latest` | 2,865 | 4 | none |
|
|
181
|
+
| `npm:react-dom` | resolved | 1 | `^19.2.6` | `19.2.7` | `dist-tag:latest` | 2,820 | 4 | none |
|
|
182
|
+
| `npm:vite` | unavailable | 1 | `^8.0.12` | n/a | n/a | 0 | 1 | `REGISTRY_RESPONSE_INVALID` |
|
|
183
|
+
| `npm:@vitejs/plugin-react` | resolved | 1 | `^6.0.1` | `6.0.3` | `dist-tag:latest` | 84 | 4 | none |
|
|
184
|
+
| `npm:@playwright/test` | resolved | 1 | `^1.61.1` | `1.61.1` | `dist-tag:latest` | 3,276 | 4 | none |
|
|
185
|
+
| `npm:eslint` | resolved | 1 | `^10.3.0` | `10.7.0` | `dist-tag:latest` | 424 | 4 | none |
|
|
186
|
+
| `npm:eslint-plugin-react-hooks` | resolved | 1 | `^7.1.1` | `7.1.1` | `dist-tag:latest` | 2,706 | 4 | none |
|
|
187
|
+
| `npm:posthog-js` | resolved | 1 | `^1.390.2` | `1.399.5` | `dist-tag:latest` | 1,246 | 4 | none |
|
|
188
|
+
| `npm:pdfjs-dist` | resolved | 1 | `^6.1.200` | `6.1.200` | `dist-tag:latest` | 1,563 | 4 | none |
|
|
189
|
+
| `pypi:fastapi` | resolved | 1 | `>=0.115.0` | `0.139.0` | `project-info-version` | 299 | 6 | none |
|
|
190
|
+
| `pypi:pydantic` | resolved | 1 | `>=2.10.0` | `2.13.4` | `project-info-version` | 203 | 5 | none |
|
|
191
|
+
| `pypi:sqlalchemy` | resolved | 1 | `>=2.0.0` | `2.0.51` | `project-info-version` | 325 | 3 | none |
|
|
192
|
+
| `pypi:ruff` | resolved | 1 | `>=0.8.0` | `0.15.21` | `project-info-version` | 414 | 4 | none |
|
|
193
|
+
| `pypi:langchain-openai` | resolved | 2 | unpinned; `>=0.3.0` | `1.3.5` | `project-info-version` | 132 | 6 | none |
|
|
194
|
+
|
|
195
|
+
All resolved npm packages use the registry `dist-tag:latest`; all resolved PyPI packages use `project-info-version`. UpgradeLens generated factual registry data only—no SemVer recommendation, PEP 440 recommendation, or maximum-version substitution.
|
|
196
|
+
|
|
197
|
+
Exactly one `pypi:langchain-openai` package record contains the two ordered occurrences and one registry source identity.
|
|
198
|
+
|
|
199
|
+
### Vite limitation
|
|
200
|
+
|
|
201
|
+
A size-only live request returned HTTP 200 JSON with 38,902,327 bytes. This exceeds the intentional 16 MiB npm response policy. Combined with the sole `REGISTRY_RESPONSE_INVALID` warning and absence of a cache entry, this confirms the known response-too-large path. Vite is classified as a **known payload-policy limitation**, not an RC-02 lifecycle, transport, or external-registry failure. The limit was not changed.
|
|
202
|
+
|
|
203
|
+
## 8. Cache and offline behavior
|
|
204
|
+
|
|
205
|
+
| Run | Exit | Real / manifest duration | Hits / misses | Resolved / unavailable | Warnings | Exit behavior |
|
|
206
|
+
| --- | ---: | --- | ---: | ---: | ---: | --- |
|
|
207
|
+
| Second online | 0 | 11.06 s / 10,299 ms | 45 / 1 | 45 / 1 | 1 | Natural |
|
|
208
|
+
| Offline fresh cache | 0 | 5.49 s / 4,872 ms | 45 / 1 | 45 / 1 | 1 | Natural |
|
|
209
|
+
| Offline empty cache | 0 | 0.35 s / 19 ms | 0 / 46 | 0 / 46 | 46 | Natural |
|
|
210
|
+
|
|
211
|
+
The populated cache contains 45 valid entries. The online cache-heavy miss and warning are Vite only. The offline fresh-cache warning is one `OFFLINE_CACHE_MISS` for Vite. The empty-cache run produced 46 `OFFLINE_CACHE_MISS` warnings and no network fallback. Both offline commands ran without network access; automated RC-02 coverage separately confirms offline mode does not create the CLI HTTP runtime. The populated cache was restored after the empty-cache test.
|
|
212
|
+
|
|
213
|
+
## 9. Determinism
|
|
214
|
+
|
|
215
|
+
```text
|
|
216
|
+
firstResearchId sha256:6a2723984b6619bef60a46a2bba19fe3867a7cdd91bcfe76cb69dc9b5910de74
|
|
217
|
+
secondResearchId sha256:6a2723984b6619bef60a46a2bba19fe3867a7cdd91bcfe76cb69dc9b5910de74
|
|
218
|
+
equal true
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
The Project Manifest digest, policy, source facts, warnings, and canonical ordering were unchanged. The scoped HTTP runtime implementation does not appear in or affect the research ID.
|
|
222
|
+
|
|
223
|
+
## 10. stdout and custom output
|
|
224
|
+
|
|
225
|
+
- `--stdout` exited 0 naturally in 5.87 seconds and emitted 8,565,466 bytes of JSON only. JSON parsing, Knowledge Manifest schema validation, and runtime invariants passed. No progress, Agent-close, dispatcher-cleanup, or other message contaminated stdout.
|
|
226
|
+
- The repository-relative custom output exited 0 naturally and validated. Repeating the command changed the target inode (`17879684` to `17879906`), left only the final manifest, and left no temporary file, confirming atomic replacement.
|
|
227
|
+
- Absolute output rejection exited 1 before writing the `$TMPDIR/vingrade-invalid-output.json` acceptance target. No final or partial file remained. The known stack-trace UX was observed only on stderr and was not changed.
|
|
228
|
+
- The temporary `artifacts/` directory was removed.
|
|
229
|
+
|
|
230
|
+
## 11. Privacy and portability
|
|
231
|
+
|
|
232
|
+
Recursive audits of the Project Manifest and first/second/custom Knowledge Manifests found:
|
|
233
|
+
|
|
234
|
+
| Prohibited value | Hits |
|
|
235
|
+
| --- | ---: |
|
|
236
|
+
| User-home or other absolute local paths | 0 |
|
|
237
|
+
| `file://` or non-HTTPS public source URLs | 0 |
|
|
238
|
+
| Cache keys, cache filenames, or Knowledge Store paths | 0 |
|
|
239
|
+
| ETag or Last-Modified values | 0 |
|
|
240
|
+
| Authorization, Cookie, credentials, or query tokens | 0 |
|
|
241
|
+
| Raw registry bodies or HTTP headers | 0 |
|
|
242
|
+
| Stack traces | 0 |
|
|
243
|
+
| Undici Agent or dispatcher configuration | 0 |
|
|
244
|
+
| Payload-limit constants | 0 |
|
|
245
|
+
|
|
246
|
+
All artifact, repository, project, and manifest paths are portable repository-relative paths. All public source URLs are HTTPS and have no query strings. CLI runtime internals do not enter the public artifact.
|
|
247
|
+
|
|
248
|
+
## 12. Acceptance checklist
|
|
249
|
+
|
|
250
|
+
- [x] UpgradeLens automated gate passes.
|
|
251
|
+
- [x] VinGrade discovery passes.
|
|
252
|
+
- [x] First clean online process exits naturally.
|
|
253
|
+
- [x] Exit code is 0.
|
|
254
|
+
- [x] No manual termination.
|
|
255
|
+
- [x] Post-completion delay is under a few seconds (0.361 seconds).
|
|
256
|
+
- [x] No UpgradeLens-owned HTTPS sockets remain.
|
|
257
|
+
- [x] Knowledge Manifest schema passes.
|
|
258
|
+
- [x] Runtime invariants pass.
|
|
259
|
+
- [x] Cache-heavy online run exits naturally.
|
|
260
|
+
- [x] Offline runs exit naturally and create no HTTP runtime/network fallback.
|
|
261
|
+
- [x] stdout remains JSON-only.
|
|
262
|
+
- [x] Research ID remains deterministic.
|
|
263
|
+
- [x] Privacy and portability checks pass.
|
|
264
|
+
- [x] No global dispatcher mutation is observed.
|
|
265
|
+
- [x] No `process.exit()` workaround is used.
|
|
266
|
+
|
|
267
|
+
## 13. Final verdict
|
|
268
|
+
|
|
269
|
+
**PASS WITH KNOWN LIMITATIONS**
|
|
270
|
+
|
|
271
|
+
RC-02 fixes the real VinGrade CLI lifecycle blocker. The first clean online process exited 0 without intervention approximately 0.361 seconds after manifest completion, and no UpgradeLens process or established socket remained at any observation point. The cache-heavy online, offline, stdout, and custom-output commands also exited naturally; schema, runtime invariants, determinism, privacy, and portability passed.
|
|
272
|
+
|
|
273
|
+
The sole known limitation is Vite: its current 38,902,327-byte full npm packument exceeds the intentional 16 MiB safety policy and remains unavailable with `REGISTRY_RESPONSE_INVALID`. This is a known payload-policy limitation, not an RC-02 lifecycle failure. No source code was changed, nothing was published or committed, and MVP-03 was not started.
|