@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,33 @@
|
|
|
1
|
+
# RR02-FIX-03 — npm Capture Evidence Exclusion and Package Content Guard
|
|
2
|
+
|
|
3
|
+
## Historical decision
|
|
4
|
+
|
|
5
|
+
Reported verdict: **`READY_TO_RESUME_RR02_RERUN`**.
|
|
6
|
+
|
|
7
|
+
Commit `e0c05b6` added an actual-tarball package-content guard, guard tests,
|
|
8
|
+
and `npm run check:package` wiring. The guard correctly recognizes known and
|
|
9
|
+
future `docs/*-cli-captures` paths, capture helpers, and required public
|
|
10
|
+
assets.
|
|
11
|
+
|
|
12
|
+
That verdict did not survive validation against committed HEAD. The stopped
|
|
13
|
+
RR02-RERUN proved that the commit omitted:
|
|
14
|
+
|
|
15
|
+
- the effective `!docs/*-cli-captures` package exclusion;
|
|
16
|
+
- `docs/migration-planning-qualification-resolution.md`;
|
|
17
|
+
- `docs/package-content-policy.md`;
|
|
18
|
+
- the remediation reports needed by rerun preflight.
|
|
19
|
+
|
|
20
|
+
The clean committed tarball therefore failed its own guard. Creating the
|
|
21
|
+
stopped-run manifest also made that manifest package-eligible, directly
|
|
22
|
+
demonstrating that the missing exclusion was not a theoretical defect.
|
|
23
|
+
|
|
24
|
+
RR02-FIX-03A exists to complete and validate the intended remediation in one
|
|
25
|
+
scoped commit. This report preserves the original historical verdict while
|
|
26
|
+
recording why it was superseded by `NO_GO_PACKAGE_OR_REGRESSION`.
|
|
27
|
+
|
|
28
|
+
## Evidence status
|
|
29
|
+
|
|
30
|
+
The original FIX-03 capture output was not present at RR02-FIX-03A baseline.
|
|
31
|
+
It is not fabricated. The committed guard implementation, stopped rerun
|
|
32
|
+
report/manifest, and FIX-03A clean package evidence provide the authoritative
|
|
33
|
+
reconciliation.
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
# RR02-FIX-03A — Complete Package Exclusion and Validation Evidence Commit
|
|
2
|
+
|
|
3
|
+
## 1. Root Cause
|
|
4
|
+
|
|
5
|
+
RR02-FIX-03 committed the actual-tarball guard and npm wiring but did not
|
|
6
|
+
commit the matching `package.json.files` exclusion, two assets required by the
|
|
7
|
+
guard, or its release-history reports. The implementation was validated from
|
|
8
|
+
a dirty snapshot rather than the authoritative committed snapshot.
|
|
9
|
+
|
|
10
|
+
Consequently, clean HEAD `e0c05b62536b76315c9d19dbe38a48f98b19b3c8`
|
|
11
|
+
failed its own package guard. Adding the stopped-run manifest made that
|
|
12
|
+
repository-only evidence package-eligible and proved that exclusion was not
|
|
13
|
+
effective.
|
|
14
|
+
|
|
15
|
+
## 2. Baseline HEAD and Three-state Inventory
|
|
16
|
+
|
|
17
|
+
- Branch: `feat/mvp-05-evidence-migration-checklist`
|
|
18
|
+
- Baseline HEAD: `e0c05b62536b76315c9d19dbe38a48f98b19b3c8`
|
|
19
|
+
- Subject: `fix: package content guard`
|
|
20
|
+
- Index: empty; no pre-existing staged user changes
|
|
21
|
+
- Tracked modifications: none
|
|
22
|
+
- Untracked task evidence: stopped RR02-RERUN report and empty manifest
|
|
23
|
+
- Unrelated user changes: none
|
|
24
|
+
|
|
25
|
+
| Required item | Working tree | Git index | HEAD | Action |
|
|
26
|
+
| --- | --- | --- | --- | --- |
|
|
27
|
+
| package capture exclusion | `MISSING` | `MISSING` | `MISSING` | add exact negation |
|
|
28
|
+
| actual-tarball guard | `PRESENT_MATCHING` | `MISSING` | `PRESENT_MATCHING` | retain and add FIX-03A exact prefix |
|
|
29
|
+
| guard tests/wiring | `PRESENT_MATCHING` | `MISSING` | `PRESENT_MATCHING` | retain and update exact-tree assertion |
|
|
30
|
+
| qualification resolution doc | `MISSING` | `MISSING` | `MISSING` | restore from current implementation |
|
|
31
|
+
| package content policy | `MISSING` | `MISSING` | `MISSING` | restore from actual package contract |
|
|
32
|
+
| FIX-01 report/evidence | `MISSING` | `MISSING` | `MISSING` | restore report; do not fabricate captures |
|
|
33
|
+
| FIX-02 report/evidence | `MISSING` | `MISSING` | `MISSING` | restore report; retain tracked progress contract |
|
|
34
|
+
| FIX-03 report/evidence | `MISSING` | `MISSING` | `MISSING` | restore reconciled historical report |
|
|
35
|
+
| stopped RR02-RERUN report/manifest | `UNTRACKED` | `MISSING` | `MISSING` | preserve and commit |
|
|
36
|
+
|
|
37
|
+
Historical binary capture trees were not in the working tree, index, commits,
|
|
38
|
+
or local report paths at baseline. They were not recreated from memory. The
|
|
39
|
+
restored reports explicitly preserve their original verdicts and this evidence
|
|
40
|
+
limitation.
|
|
41
|
+
|
|
42
|
+
## 3. Implementation Summary
|
|
43
|
+
|
|
44
|
+
- Added path-specific `!docs/*-cli-captures` npm exclusion.
|
|
45
|
+
- Extended the guard's reviewed exact-prefix inventory through FIX-03A while
|
|
46
|
+
retaining its future naming-convention rule.
|
|
47
|
+
- Added qualification-resolution and package-content user documentation that
|
|
48
|
+
matches the current runtime.
|
|
49
|
+
- Restored the RR-02, FIX-01, FIX-02, and FIX-03 release decision chain.
|
|
50
|
+
- Preserved the stopped RR02-RERUN report and manifest.
|
|
51
|
+
- Added three sanitized clean-install CLI capture bundles for version, help,
|
|
52
|
+
and default offline analysis.
|
|
53
|
+
- Changed no `src/**` production file, schema, dataset, qualification record,
|
|
54
|
+
progress semantics, migration behavior, or version.
|
|
55
|
+
|
|
56
|
+
## 4. Scoped Commit Inventory
|
|
57
|
+
|
|
58
|
+
| Category | Files staged | Files committed | Validation |
|
|
59
|
+
| --- | ---: | ---: | --- |
|
|
60
|
+
| Package config/guard | 3 | 3 | guard tests and actual tarball |
|
|
61
|
+
| Required user docs | 2 | 2 | required-path assertions |
|
|
62
|
+
| Remediation reports | 5 | 5 | historical verdict review |
|
|
63
|
+
| CLI capture evidence | 20 | 20 | manifest/privacy/PNG validation |
|
|
64
|
+
| Validation report | 1 | 1 | staged scope and Markdown review |
|
|
65
|
+
| Unrelated files | 0 | 0 | three-state status review |
|
|
66
|
+
|
|
67
|
+
The reviewed total is 31 files. The capture category consists of the stopped
|
|
68
|
+
manifest plus 19 FIX-03A capture files.
|
|
69
|
+
|
|
70
|
+
## 5. Package Exclusion and Required Assets
|
|
71
|
+
|
|
72
|
+
The package includes user-facing `docs` and then excludes only direct-child
|
|
73
|
+
`docs/*-cli-captures`. Actual tar inspection finds zero capture paths and zero
|
|
74
|
+
capture helpers while retaining:
|
|
75
|
+
|
|
76
|
+
- `docs/cli-progress.md`;
|
|
77
|
+
- `docs/migration-planning-qualification-resolution.md`;
|
|
78
|
+
- `docs/package-content-policy.md`;
|
|
79
|
+
- both Migration Planning datasets;
|
|
80
|
+
- the qualification-record and extractive-candidate schemas;
|
|
81
|
+
- executable and public runtime entry points.
|
|
82
|
+
|
|
83
|
+
The guard still fails on an injected forbidden capture path and on a missing
|
|
84
|
+
required asset. Required docs were not removed from the guard to obtain a
|
|
85
|
+
pass.
|
|
86
|
+
|
|
87
|
+
## 6. Working-tree Validation
|
|
88
|
+
|
|
89
|
+
| Gate | Result |
|
|
90
|
+
| --- | --- |
|
|
91
|
+
| Package guard focused tests | 7 passed, 0 failed |
|
|
92
|
+
| Actual-tarball package guard | passed; 0 captures; 15 required assets |
|
|
93
|
+
| Qualification/progress/orchestration | 27 passed, 0 failed |
|
|
94
|
+
| MP regression set | 107 passed, 0 failed |
|
|
95
|
+
| Full suite, serial | 537 passed, 0 failed, 1 sandbox-only skip |
|
|
96
|
+
| Isolated package install | passed; 12 packages installed offline |
|
|
97
|
+
| Packaged public import | passed |
|
|
98
|
+
| Captured packaged CLI | version/help/default analyze exited 0 |
|
|
99
|
+
| Default analyze | 7/7 stages; no Migration Checklist |
|
|
100
|
+
| Capture manifest | 3/3 entries complete |
|
|
101
|
+
| Secret/absolute-path/ANSI scan | passed |
|
|
102
|
+
| PNG metadata | 3 files; no metadata |
|
|
103
|
+
|
|
104
|
+
The default concurrent `npm test` mode was run twice and each run exposed the
|
|
105
|
+
same existing resource-sensitive timeout: the HTTP lifecycle child was killed
|
|
106
|
+
at approximately three seconds while 536 tests passed and one sandbox test was
|
|
107
|
+
skipped. The exact failing test passed alone and the complete repository suite
|
|
108
|
+
passed with `--test-concurrency=1`. No production or test timeout was changed
|
|
109
|
+
in this packaging-only task.
|
|
110
|
+
|
|
111
|
+
## 7. Staged-snapshot Validation
|
|
112
|
+
|
|
113
|
+
The exact Git index was exported with `git checkout-index` into an isolated
|
|
114
|
+
temporary directory. It did not read unstaged repository files. The staged
|
|
115
|
+
snapshot passed focused guard tests, actual-tarball checking, package entry
|
|
116
|
+
assertions, isolated install, packaged public import and smoke equivalence,
|
|
117
|
+
focused qualification/progress regressions, the full serial suite, privacy
|
|
118
|
+
checks, and whitespace checks.
|
|
119
|
+
|
|
120
|
+
Capture files exist in the staged snapshot and remain absent from its tarball.
|
|
121
|
+
|
|
122
|
+
## 8. Commit Result
|
|
123
|
+
|
|
124
|
+
Subject: `fix: complete package evidence exclusion`
|
|
125
|
+
|
|
126
|
+
The authoritative SHA is the Git commit containing this report. A file cannot
|
|
127
|
+
contain the cryptographic SHA of the commit that contains that same file
|
|
128
|
+
without changing the commit object; the exact SHA is therefore recorded in
|
|
129
|
+
the post-commit task handoff. No amend or second bookkeeping commit is used.
|
|
130
|
+
|
|
131
|
+
## 9. Post-commit HEAD Validation
|
|
132
|
+
|
|
133
|
+
Post-commit validation is performed after this report becomes immutable in the
|
|
134
|
+
single authorized commit. The handoff records the exact commit SHA, final
|
|
135
|
+
tarball sizes and digests, clean-snapshot checks, and final worktree status.
|
|
136
|
+
|
|
137
|
+
The committed tree is required to match the already validated index byte for
|
|
138
|
+
byte. A clean archive of that HEAD must pass the guard, fresh pack, entry
|
|
139
|
+
assertions, isolated install, package smoke equivalence, focused regressions,
|
|
140
|
+
full serial suite, final dry run, privacy scan, and scope checks before the
|
|
141
|
+
task verdict can be released.
|
|
142
|
+
|
|
143
|
+
## 10. CLI Capture Evidence
|
|
144
|
+
|
|
145
|
+
`docs/rr02-fix-03a-cli-captures/manifest.json` contains one entry per direct
|
|
146
|
+
UpgradeLens CLI invocation used for package smoke:
|
|
147
|
+
|
|
148
|
+
1. packaged `--version`;
|
|
149
|
+
2. packaged `--help`;
|
|
150
|
+
3. packaged default `analyze <fixture> --offline --progress plain`.
|
|
151
|
+
|
|
152
|
+
Each bundle contains command, constrained environment, raw and clean
|
|
153
|
+
transcripts, metadata, exit code, and final-screen PNG. All three invocations
|
|
154
|
+
used the clean-installed tarball, exited zero, made zero provider requests,
|
|
155
|
+
and contain no private path. The public import smoke is an application API
|
|
156
|
+
check, not a CLI invocation.
|
|
157
|
+
|
|
158
|
+
## 11. Before/After Tarball Comparison
|
|
159
|
+
|
|
160
|
+
| Metric | Failing baseline HEAD | Completed working tree before this report |
|
|
161
|
+
| --- | ---: | ---: |
|
|
162
|
+
| Files | 197 | 204 |
|
|
163
|
+
| Compressed bytes | 471,310 | 478,775 |
|
|
164
|
+
| Unpacked bytes | 1,881,500 | 1,903,779 |
|
|
165
|
+
| npm SHA-1 | `76eadf38bf7c50ebd9c4a90397789fb7075f1336` | `f9e6ee764cd47dc71e86a57fa66c29375b35250f` |
|
|
166
|
+
| SHA-256 | `04e737d90630674f7a6633b196c1d6a00a33ebd7876a25410301902a0590db70` | `f3f18ef80ec196e8dec38e3358feddf028e9a2bdae14d5971f7da7b5716c06c9` |
|
|
167
|
+
| Required docs missing | 2 | 0 |
|
|
168
|
+
| Capture entries | exclusion ineffective | 0 |
|
|
169
|
+
|
|
170
|
+
Adding this package-visible completion report changes final package byte
|
|
171
|
+
metrics without changing the content-policy result. Final committed metrics
|
|
172
|
+
are recorded after the commit in the task handoff.
|
|
173
|
+
|
|
174
|
+
## 12. Regression and Privacy Results
|
|
175
|
+
|
|
176
|
+
No real provider, registry network, requalification, VinGrade mutation, raw
|
|
177
|
+
provider payload, credential, authorization material, private endpoint, or
|
|
178
|
+
hidden reasoning was used. Reports and captures passed secret-pattern,
|
|
179
|
+
machine-path, ANSI/control, relative-link, and PNG metadata scans.
|
|
180
|
+
|
|
181
|
+
`git diff --check`, staged `git diff --cached --check`, forbidden-path scans,
|
|
182
|
+
and generated-artifact checks cover Markdown whitespace, tarballs,
|
|
183
|
+
`node_modules`, caches, and temporary directories.
|
|
184
|
+
|
|
185
|
+
## 13. Remaining Worktree State
|
|
186
|
+
|
|
187
|
+
The expected post-commit state is clean because both baseline untracked files
|
|
188
|
+
are intentionally included in the reviewed scope and there were no unrelated
|
|
189
|
+
changes. Final `git status --short`, index status, and untracked inventory are
|
|
190
|
+
reported from post-commit HEAD rather than predicted here.
|
|
191
|
+
|
|
192
|
+
## 14. Compatibility and Scope Confirmation
|
|
193
|
+
|
|
194
|
+
The remediation is package-boundary and documentation-only. It preserves the
|
|
195
|
+
public runtime version and exports, Node requirement, CLI defaults, sequential
|
|
196
|
+
pipeline, qualification precedence, fail-closed behavior, progress contract,
|
|
197
|
+
Impact/Evidence logic, Extractive Contract, and Migration Checklist
|
|
198
|
+
experimental status.
|
|
199
|
+
|
|
200
|
+
No AI call, provider call, internet research, source migration, version bump,
|
|
201
|
+
push, tag, publish, or release is part of this task.
|
|
202
|
+
|
|
203
|
+
## 15. Remaining Risks
|
|
204
|
+
|
|
205
|
+
- Historical RR-02/FIX-01/FIX-02/FIX-03 screenshots were never committed and
|
|
206
|
+
cannot be recovered faithfully; the reports disclose this rather than
|
|
207
|
+
manufacturing evidence.
|
|
208
|
+
- The concurrent full-suite lifecycle test has a three-second child timeout
|
|
209
|
+
that is resource-sensitive under full parallel load. It passes in isolation
|
|
210
|
+
and the entire suite passes serially. Any timeout/concurrency redesign is a
|
|
211
|
+
separate test-infrastructure task.
|
|
212
|
+
- Final commit SHA and post-commit tarball digest are temporal results and must
|
|
213
|
+
be retained with this report's release handoff.
|
|
214
|
+
|
|
215
|
+
## 16. Next Decision
|
|
216
|
+
|
|
217
|
+
Verdict, contingent on the recorded post-commit clean-HEAD gates:
|
|
218
|
+
**`READY_TO_RESUME_RR02_RERUN_FROM_COMMITTED_HEAD`**.
|
|
219
|
+
|
|
220
|
+
Resume RR02-RERUN at RERUN-001 from the new commit, build a fresh tarball,
|
|
221
|
+
recheck qualification identity without requalification when it has not
|
|
222
|
+
drifted, capture every new product invocation, and keep Migration Checklist
|
|
223
|
+
experimental. Do not reuse the FIX-03A validation tarball.
|
|
@@ -0,0 +1,393 @@
|
|
|
1
|
+
# RR02-FIX-04 — Event-loop-safe Heartbeat for CPU-bound Discovery and Usage
|
|
2
|
+
|
|
3
|
+
## 1. Root Cause
|
|
4
|
+
|
|
5
|
+
The progress runtime already scheduled an unref'd five-second heartbeat, but
|
|
6
|
+
Project Discovery and Repository Usage Discovery could execute long sequential
|
|
7
|
+
scan/parse chains without a macrotask boundary. Promise continuations and
|
|
8
|
+
synchronous parsing did not guarantee that the Node.js timer phase could run.
|
|
9
|
+
|
|
10
|
+
```text
|
|
11
|
+
stage adapter
|
|
12
|
+
↓
|
|
13
|
+
recursive directory traversal
|
|
14
|
+
↓
|
|
15
|
+
file selection
|
|
16
|
+
↓
|
|
17
|
+
read one file
|
|
18
|
+
↓
|
|
19
|
+
synchronous parse/analyze
|
|
20
|
+
↓
|
|
21
|
+
aggregate deterministic records
|
|
22
|
+
↓
|
|
23
|
+
sort / validate / atomic write
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
The stage adapter checked cancellation only before and after the complete
|
|
27
|
+
runtime. A due heartbeat and the first `SIGINT` could therefore remain pending
|
|
28
|
+
until the scan returned.
|
|
29
|
+
|
|
30
|
+
The progress timer, renderer, lifecycle version, heartbeat interval, stage
|
|
31
|
+
order, and business runtimes were not the root cause.
|
|
32
|
+
|
|
33
|
+
## 2. Pre-fix Starvation Evidence
|
|
34
|
+
|
|
35
|
+
RR02-RERUN recorded a packaged Repository Usage Discovery stage that remained
|
|
36
|
+
quiet from 0.0 seconds until its 8.4-second completion activity. No `WAITING`
|
|
37
|
+
or `STAGE_HEARTBEAT` occurred.
|
|
38
|
+
|
|
39
|
+
A controlled pre-fix pipeline reproduction executed 24 synchronous per-file
|
|
40
|
+
CPU units with a real ten-millisecond heartbeat timer and no I/O boundary. It
|
|
41
|
+
exited 1 with:
|
|
42
|
+
|
|
43
|
+
```text
|
|
44
|
+
["RUN_STARTED","STAGE_SCHEDULED","STAGE_STARTED","STAGE_ACTIVITY",
|
|
45
|
+
"STAGE_COMPLETED","RUN_COMPLETED"]
|
|
46
|
+
PRE_FIX_STARVATION_REPRODUCED: heartbeat timer did not run before terminal event
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
This reproduction used the actual Node.js event loop. It did not use a fake
|
|
50
|
+
clock to make a timer callback run while work remained synchronous.
|
|
51
|
+
|
|
52
|
+
## 3. Implementation Summary
|
|
53
|
+
|
|
54
|
+
The remediation adds one internal operation-local cooperative scheduler:
|
|
55
|
+
|
|
56
|
+
- production yield: `setImmediate`;
|
|
57
|
+
- deterministic hybrid policy: 64 completed units or 50 milliseconds since
|
|
58
|
+
the prior yield, whichever occurs first;
|
|
59
|
+
- injected monotonic clock and yield implementation for tests;
|
|
60
|
+
- abort checks before every boundary and after every actual yield;
|
|
61
|
+
- immutable metrics snapshot for controlled test/benchmark observation;
|
|
62
|
+
- no global mutable state and no dependency;
|
|
63
|
+
- no public package export.
|
|
64
|
+
|
|
65
|
+
Project Discovery and Repository Usage Discovery create the scheduler and pass
|
|
66
|
+
it through their traversal and processing loops. The CLI stage adapters now
|
|
67
|
+
pass their existing `AbortSignal` into both runtimes.
|
|
68
|
+
|
|
69
|
+
No scanner emits or renders heartbeat text. Heartbeats remain owned by the
|
|
70
|
+
existing orchestration progress runtime.
|
|
71
|
+
|
|
72
|
+
## 4. Cooperative Scheduling Contract
|
|
73
|
+
|
|
74
|
+
A scheduler boundary means one unit is completely processed. The scheduler:
|
|
75
|
+
|
|
76
|
+
1. checks the caller signal;
|
|
77
|
+
2. counts the completed unit;
|
|
78
|
+
3. returns immediately when neither policy limit is due;
|
|
79
|
+
4. otherwise awaits one `setImmediate`;
|
|
80
|
+
5. resets its local budget;
|
|
81
|
+
6. checks the caller signal again.
|
|
82
|
+
|
|
83
|
+
`enabled: false` retains abort checks but performs no yield. Different batch
|
|
84
|
+
sizes and enabled/disabled modes were used to prove exact output equivalence.
|
|
85
|
+
|
|
86
|
+
The 50-millisecond value is a boundary budget, not a preemptive deadline. A
|
|
87
|
+
single synchronous unit can exceed it and is allowed to finish atomically
|
|
88
|
+
before yielding.
|
|
89
|
+
|
|
90
|
+
The implementation does not use `setTimeout` sleeps, `process.nextTick`,
|
|
91
|
+
microtask-only yields, `Atomics.wait`, Worker Threads, child processes, scanner
|
|
92
|
+
parallelism, or direct scanner heartbeats.
|
|
93
|
+
|
|
94
|
+
## 5. Yield Boundaries and Cancellation
|
|
95
|
+
|
|
96
|
+
Safe yield/check boundaries:
|
|
97
|
+
|
|
98
|
+
- after one directory entry is fully handled;
|
|
99
|
+
- after one manifest group is inspected;
|
|
100
|
+
- after one pnpm workspace input is handled;
|
|
101
|
+
- after one workspace relationship unit is complete;
|
|
102
|
+
- after one Usage dependency scope is indexed;
|
|
103
|
+
- after one source file is skipped, read, parsed/analyzed, and aggregated.
|
|
104
|
+
|
|
105
|
+
No yield occurs:
|
|
106
|
+
|
|
107
|
+
- inside Babel parser state;
|
|
108
|
+
- between usage record construction and aggregation;
|
|
109
|
+
- inside a sort comparator;
|
|
110
|
+
- during schema/invariant validation;
|
|
111
|
+
- after an atomic artifact writer begins publication.
|
|
112
|
+
|
|
113
|
+
On cancellation, the boundary throws `AbortError` with
|
|
114
|
+
`code=ANALYSIS_CANCELLED`. The existing pipeline emits one cancelled current
|
|
115
|
+
stage, skips later stages, disposes its heartbeat timer, emits no success
|
|
116
|
+
summary, and returns 130. The stage writer is never reached, so no partial
|
|
117
|
+
Usage Index is published.
|
|
118
|
+
|
|
119
|
+
The packaged cancellation capture delivered `SIGINT` after the Usage start
|
|
120
|
+
event, emitted `STAGE CANCELLED id=usageDiscovery` at 0.1 seconds, returned
|
|
121
|
+
130, and left `usage-index.json` absent.
|
|
122
|
+
|
|
123
|
+
## 6. Determinism and Artifact Equivalence
|
|
124
|
+
|
|
125
|
+
The representative fixture contained 501 project manifests and 4,000
|
|
126
|
+
JavaScript source files. All clocks were fixed and lineage digests used the
|
|
127
|
+
exact serialized upstream bytes.
|
|
128
|
+
|
|
129
|
+
| Artifact | Yield disabled hash/result | Yield enabled hash/result | Equivalent |
|
|
130
|
+
| --- | --- | --- | --- |
|
|
131
|
+
| Project Manifest | `sha256:eb2aadff4190362c89c6201a98c5feafcb0197383e3d24802ab7af019945dece` | `sha256:eb2aadff4190362c89c6201a98c5feafcb0197383e3d24802ab7af019945dece` | Yes, exact JSON bytes |
|
|
132
|
+
| Usage Index | `sha256:200df004f8c8872b3fc8727691f9f852d562fdbe143ffa0743d32e76d94c1e4b` | `sha256:200df004f8c8872b3fc8727691f9f852d562fdbe143ffa0743d32e76d94c1e4b` | Yes, exact JSON bytes |
|
|
133
|
+
| Repository Impact | `sha256:6daf4e107005d6054d5fd993b81972d42cc1181c1ca636824412d5bfc3eded12` | `sha256:6daf4e107005d6054d5fd993b81972d42cc1181c1ca636824412d5bfc3eded12` | Yes, exact JSON bytes |
|
|
134
|
+
| Impact Evidence | `sha256:ae5ab31daa5efa5b47c5d6c958fc2e7c214e71deb5cdda2470151168001f8cb7` | `sha256:ae5ab31daa5efa5b47c5d6c958fc2e7c214e71deb5cdda2470151168001f8cb7` | Yes, exact JSON bytes |
|
|
135
|
+
|
|
136
|
+
Different batch sizes of 1, 5, and 7 also produced byte-identical Discovery
|
|
137
|
+
and Usage artifacts. Existing exclusion, symlink, maximum-depth, analyzer,
|
|
138
|
+
warning, stable ordering, ID, digest, and lineage tests pass.
|
|
139
|
+
|
|
140
|
+
No provider, network, or filesystem scan scope was added. Discovery and Usage
|
|
141
|
+
provider call counts remain zero.
|
|
142
|
+
|
|
143
|
+
## 7. Heartbeat Evidence
|
|
144
|
+
|
|
145
|
+
The fresh packaged CLI used the production five-second quiet threshold.
|
|
146
|
+
|
|
147
|
+
TTY auto mode:
|
|
148
|
+
|
|
149
|
+
```text
|
|
150
|
+
↳ Repository Usage Discovery — Scanning supported source files [0.0s]
|
|
151
|
+
… Repository Usage Discovery — Scanning supported source files [5.0s]
|
|
152
|
+
… Repository Usage Discovery — Scanning supported source files [10.0s]
|
|
153
|
+
… Repository Usage Discovery — Scanning supported source files [15.0s]
|
|
154
|
+
↳ Repository Usage Discovery — Writing Repository Usage Index [19.4s]
|
|
155
|
+
✓ Repository Usage Discovery completed [19.4s]
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
Plain/non-TTY mode:
|
|
159
|
+
|
|
160
|
+
```text
|
|
161
|
+
[5.0s] STAGE HEARTBEAT id=usageDiscovery detail="Scanning supported source files"
|
|
162
|
+
[10.0s] STAGE HEARTBEAT id=usageDiscovery detail="Scanning supported source files"
|
|
163
|
+
[15.0s] STAGE HEARTBEAT id=usageDiscovery detail="Scanning supported source files"
|
|
164
|
+
[17.1s] STAGE COMPLETE id=usageDiscovery label="Repository Usage Discovery"
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
No Usage heartbeat occurred after terminal state. The short 0.7-second default
|
|
168
|
+
run emitted no heartbeat noise and did not schedule Migration Checklist.
|
|
169
|
+
|
|
170
|
+
| Scenario | Duration | Yield count | Max quiet interval | Heartbeats | Cancellation latency | Artifact equivalent | Capture |
|
|
171
|
+
| --- | ---: | ---: | ---: | ---: | ---: | --- | --- |
|
|
172
|
+
| Controlled Discovery, 501 manifests | 88.465 ms median | 102 | 50 ms boundary budget | N/A | N/A | Yes | Test/benchmark |
|
|
173
|
+
| Controlled Usage, 4,000 files | 541.933 ms median | 141 | 50 ms boundary budget | 0, below threshold | N/A | Yes | Test/benchmark |
|
|
174
|
+
| Packaged TTY Usage | 19.4 s | Not persisted by design | 5.0 s observed | 3 | N/A | Same validated artifact contract | [capture](rr02-fix-04-cli-captures/001-packaged-default-tty-long-heartbeat/03-heartbeat.png) |
|
|
175
|
+
| Packaged plain Usage | 17.1 s | Not persisted by design | 5.0 s observed | 3 | N/A | Same validated artifact contract | [capture](rr02-fix-04-cli-captures/002-packaged-plain-nontty-long-heartbeat/03-heartbeat.png) |
|
|
176
|
+
| Packaged Usage cancellation | 0.1 s in stage | Not persisted by design | 0.1 s | 0 | Approximately 0.1 s | No partial artifact | [capture](rr02-fix-04-cli-captures/003-packaged-usage-cancellation/final-screen.png) |
|
|
177
|
+
| Packaged short default | 0.7 s total | Not persisted by design | Below threshold | 0 | N/A | Yes | [capture](rr02-fix-04-cli-captures/004-packaged-default-short-no-heartbeat/final-screen.png) |
|
|
178
|
+
|
|
179
|
+
## 8. Performance Before/After
|
|
180
|
+
|
|
181
|
+
Five alternating enabled/disabled samples were measured after warm-up. Medians
|
|
182
|
+
avoid the filesystem-cache bias seen when disabled mode always ran first.
|
|
183
|
+
|
|
184
|
+
| Runtime | Yield disabled median | Yield enabled median | Relative overhead | Units | Yields |
|
|
185
|
+
| --- | ---: | ---: | ---: | ---: | ---: |
|
|
186
|
+
| Project Discovery | 86.700 ms | 88.465 ms | +2.04% | 6,506 | 102 |
|
|
187
|
+
| Repository Usage Discovery | 541.499 ms | 541.933 ms | +0.08% | 9,004 | 141 |
|
|
188
|
+
|
|
189
|
+
The policy therefore has bounded low overhead on the representative fixture.
|
|
190
|
+
No zero-overhead claim is made.
|
|
191
|
+
|
|
192
|
+
The supported source sample in this repository parsed 169 files in 169.498 ms.
|
|
193
|
+
The slowest individual synchronous parse was 14.656 ms. No real supported
|
|
194
|
+
single-file fixture approached the five-second threshold.
|
|
195
|
+
|
|
196
|
+
## 9. Files Changed
|
|
197
|
+
|
|
198
|
+
Production/runtime:
|
|
199
|
+
|
|
200
|
+
- `src/cooperative-scheduler.js`;
|
|
201
|
+
- `src/files.js`;
|
|
202
|
+
- `src/discovery.js`;
|
|
203
|
+
- `src/usage/source-files.js`;
|
|
204
|
+
- `src/usage/runtime.js`;
|
|
205
|
+
- `src/cli.js`.
|
|
206
|
+
|
|
207
|
+
Tests and documentation:
|
|
208
|
+
|
|
209
|
+
- `test/cooperative-scheduling.test.js`;
|
|
210
|
+
- `docs/cli-progress.md`;
|
|
211
|
+
- this completion report;
|
|
212
|
+
- `docs/rr02-fix-04-cli-captures/**`.
|
|
213
|
+
|
|
214
|
+
The dirty RR02-RERUN report and capture evidence already present at task start
|
|
215
|
+
remain historical evidence. FIX-04 did not revise its verdict.
|
|
216
|
+
|
|
217
|
+
## 10. Regression Coverage
|
|
218
|
+
|
|
219
|
+
Final focused results:
|
|
220
|
+
|
|
221
|
+
- scheduler, Discovery, Usage, progress, orchestration, Impact, and Evidence:
|
|
222
|
+
56 passed, 0 failed;
|
|
223
|
+
- cooperative scheduling file alone: 8 passed, 0 failed;
|
|
224
|
+
- qualification/progress/orchestration: 27 passed, 0 failed;
|
|
225
|
+
- MP-01 through MP-05 group: 107 passed, 0 failed;
|
|
226
|
+
- Extractive Contract experiment/production: 21 passed, 0 failed;
|
|
227
|
+
- duplicate occurrence reconciliation cases passed inside the MP context
|
|
228
|
+
regression;
|
|
229
|
+
- package content guard: passed.
|
|
230
|
+
|
|
231
|
+
Coverage includes a real Node event-loop test, deterministic injected
|
|
232
|
+
scheduler, abort before/after yield, scheduler error propagation, every-file
|
|
233
|
+
processing, enabled/disabled/different-batch equivalence, cancellation without
|
|
234
|
+
partial output, no duplicate terminal event, no post-terminal heartbeat,
|
|
235
|
+
callback isolation, downstream hash equality, and unchanged default stage
|
|
236
|
+
selection.
|
|
237
|
+
|
|
238
|
+
## 11. Packaged CLI Capture Evidence
|
|
239
|
+
|
|
240
|
+
A fresh worktree tarball, not an RR02-FIX-03, RR02-FIX-03A, or RR02-RERUN
|
|
241
|
+
tarball, was installed and used for all product scenarios.
|
|
242
|
+
|
|
243
|
+
Capture manifest:
|
|
244
|
+
|
|
245
|
+
`docs/rr02-fix-04-cli-captures/manifest.json`
|
|
246
|
+
|
|
247
|
+
The manifest represents five scenarios and 13 screenshots:
|
|
248
|
+
|
|
249
|
+
1. exact replay of the initial no-dependency calibration after write-first
|
|
250
|
+
capture was enabled;
|
|
251
|
+
2. default TTY auto long heartbeat;
|
|
252
|
+
3. plain/non-TTY long heartbeat;
|
|
253
|
+
4. Usage cancellation;
|
|
254
|
+
5. short default/no-noise analysis.
|
|
255
|
+
|
|
256
|
+
The initial calibration process completed before the first harness version
|
|
257
|
+
persisted its in-memory transcript. No transcript was fabricated. Its exact
|
|
258
|
+
command and workload were replayed with write-first capture; the replay
|
|
259
|
+
observed a 9.3-second Usage stage and a correct five-second heartbeat. The two
|
|
260
|
+
separate long proof scenarios remain the acceptance evidence.
|
|
261
|
+
|
|
262
|
+
Every persisted entry has command, environment, raw/clean transcript,
|
|
263
|
+
metadata, final screen, and exit code. Both long runs additionally have
|
|
264
|
+
`01-start.png`, `02-before-heartbeat.png`, `03-heartbeat.png`, and
|
|
265
|
+
`04-final.png`.
|
|
266
|
+
|
|
267
|
+
## 12. Package and Privacy Validation
|
|
268
|
+
|
|
269
|
+
Fresh tarball:
|
|
270
|
+
|
|
271
|
+
- identity: `upgradelens@0.4.0`;
|
|
272
|
+
- files: 206;
|
|
273
|
+
- compressed size: 485,962 bytes;
|
|
274
|
+
- unpacked size: 1,924,523 bytes;
|
|
275
|
+
- npm SHA-1: `18cbe2f81b50bd9ac5b6e65d55475d90a62ed1de`;
|
|
276
|
+
- SHA-256:
|
|
277
|
+
`56dc6da33a18392b8dfe6e5409db4e92cb85f4cac49a15cc50d50ff8166fdfa6`;
|
|
278
|
+
- cooperative scheduler source present;
|
|
279
|
+
- capture evidence entries: 0;
|
|
280
|
+
- required assets: 15/15;
|
|
281
|
+
- clean offline install: 12 exact local packages installed;
|
|
282
|
+
- packaged public import: passed;
|
|
283
|
+
- `npm pack --dry-run --json`: passed.
|
|
284
|
+
|
|
285
|
+
After this completion report was added, the final worktree dry-run contained
|
|
286
|
+
207 files, remained at zero capture-evidence entries, retained 15/15 required
|
|
287
|
+
assets, and passed. The installed validation tarball identity above remains
|
|
288
|
+
the 206-file artifact actually exercised by the packaged CLI captures.
|
|
289
|
+
|
|
290
|
+
The first isolated-cache install attempt correctly failed `ENOTCACHED`.
|
|
291
|
+
Validation then packed the already-installed exact dependency versions into
|
|
292
|
+
local tarballs and completed a fresh install with `--offline`; no registry or
|
|
293
|
+
provider request was made.
|
|
294
|
+
|
|
295
|
+
Capture validation:
|
|
296
|
+
|
|
297
|
+
- manifest: 5 entries;
|
|
298
|
+
- raw transcripts: 5;
|
|
299
|
+
- clean transcripts: 5;
|
|
300
|
+
- screenshots: 13;
|
|
301
|
+
- missing final screens: 0;
|
|
302
|
+
- deterministic final-screen replay: passed;
|
|
303
|
+
- plain/non-TTY ANSI and cursor scan: passed;
|
|
304
|
+
- clean transcript control-character scan: passed;
|
|
305
|
+
- private path, endpoint, credential, and secret scan: passed;
|
|
306
|
+
- PNG metadata scan: 13 passed;
|
|
307
|
+
- real-provider requests: 0.
|
|
308
|
+
|
|
309
|
+
## 13. Canonical/Serial Test Results
|
|
310
|
+
|
|
311
|
+
The first canonical parallel `npm run check` run produced:
|
|
312
|
+
|
|
313
|
+
- 546 total;
|
|
314
|
+
- 544 passed;
|
|
315
|
+
- 1 failed;
|
|
316
|
+
- 1 sandbox-only skip.
|
|
317
|
+
|
|
318
|
+
The failure was the existing `http-lifecycle-cli.test.js` child-process
|
|
319
|
+
deadline: the harness sent `SIGKILL`. No FIX-04 test failed. Lifecycle timeout
|
|
320
|
+
and test infrastructure were not changed.
|
|
321
|
+
|
|
322
|
+
A second canonical parallel `npm run check`, run with the machine idle,
|
|
323
|
+
produced:
|
|
324
|
+
|
|
325
|
+
- 546 total;
|
|
326
|
+
- 545 passed;
|
|
327
|
+
- 0 failed;
|
|
328
|
+
- 1 sandbox-only skip;
|
|
329
|
+
- package guard passed.
|
|
330
|
+
|
|
331
|
+
The separate serial suite produced:
|
|
332
|
+
|
|
333
|
+
- 546 total;
|
|
334
|
+
- 545 passed;
|
|
335
|
+
- 0 failed;
|
|
336
|
+
- 1 sandbox-only skip.
|
|
337
|
+
|
|
338
|
+
The serial pass is not used as a silent replacement for the first parallel
|
|
339
|
+
failure. Both parallel results and the serial result are retained. The skip is
|
|
340
|
+
the known local-loopback sandbox limitation.
|
|
341
|
+
|
|
342
|
+
## 14. Compatibility and Scope Confirmation
|
|
343
|
+
|
|
344
|
+
- lifecycle contract remains `1.0.0`;
|
|
345
|
+
- production heartbeat interval remains 5,000 ms;
|
|
346
|
+
- stage order and stop/cancel semantics are unchanged;
|
|
347
|
+
- no provider retry, timeout, identity, qualification, dataset, comparator,
|
|
348
|
+
policy, threshold, schema, or Extractive Contract behavior changed;
|
|
349
|
+
- no scanner parallelism, Worker Thread, child-process heartbeat, network
|
|
350
|
+
call, provider call, or dependency was added;
|
|
351
|
+
- Project Manifest, Usage Index, Impact, Evidence, warnings, ordering, IDs,
|
|
352
|
+
digests, and lineage remain deterministic;
|
|
353
|
+
- package version remains `0.4.0`;
|
|
354
|
+
- Migration Checklist remains experimental, opt-in, and absent from default
|
|
355
|
+
analysis;
|
|
356
|
+
- the Medium 80-column plain-detail truncation was not changed because it is
|
|
357
|
+
outside the narrow heartbeat remediation;
|
|
358
|
+
- no commit, push, tag, publish, or release was performed.
|
|
359
|
+
|
|
360
|
+
## 15. Remaining Risks
|
|
361
|
+
|
|
362
|
+
1. Babel parsing remains synchronous within one file. Cancellation and a due
|
|
363
|
+
heartbeat can run only after that parse completes. Current supported-source
|
|
364
|
+
evidence has a 14.656-ms maximum, so there is no demonstrated single-file
|
|
365
|
+
blocker.
|
|
366
|
+
2. The 50-ms scheduler budget is evaluated at safe completed-unit boundaries;
|
|
367
|
+
it is not preemptive.
|
|
368
|
+
3. The HTTP lifecycle child timeout remains load-sensitive in parallel runs.
|
|
369
|
+
It passed the canonical rerun and serial run, but the first canonical
|
|
370
|
+
failure remains technical debt. FIX-04 intentionally did not change it.
|
|
371
|
+
4. Plain progress detail may still truncate at an 80-column TTY. This remains
|
|
372
|
+
a non-blocking Medium follow-up.
|
|
373
|
+
|
|
374
|
+
## 16. Next Decision
|
|
375
|
+
|
|
376
|
+
**Verdict:
|
|
377
|
+
`READY_TO_RESUME_RR02_RERUN_FROM_RERUN_001`.**
|
|
378
|
+
|
|
379
|
+
The packaged heartbeat defect is fixed, cancellation is responsive at safe
|
|
380
|
+
boundaries, artifacts are exact-hash equivalent, performance overhead is
|
|
381
|
+
bounded, the canonical rerun and serial suite pass, and capture/package/privacy
|
|
382
|
+
gates pass.
|
|
383
|
+
|
|
384
|
+
RR02-RERUN must:
|
|
385
|
+
|
|
386
|
+
- create a new fresh tarball rather than reuse the FIX-04 tarball;
|
|
387
|
+
- restart from `RERUN-001`;
|
|
388
|
+
- inspect qualification identity again without reconstructing it from prose;
|
|
389
|
+
- require the persisted real-provider record for qualification scenarios;
|
|
390
|
+
- capture every new CLI invocation;
|
|
391
|
+
- keep Migration Checklist experimental.
|
|
392
|
+
|
|
393
|
+
FIX-04 does not start that rerun.
|