@shrkcrft/inspector 0.1.0-alpha.2
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 +15 -0
- package/dist/acceptance-replay.d.ts +63 -0
- package/dist/acceptance-replay.d.ts.map +1 -0
- package/dist/acceptance-replay.js +240 -0
- package/dist/action-hint-diagnostics.d.ts +32 -0
- package/dist/action-hint-diagnostics.d.ts.map +1 -0
- package/dist/action-hint-diagnostics.js +133 -0
- package/dist/adoption-check.d.ts +28 -0
- package/dist/adoption-check.d.ts.map +1 -0
- package/dist/adoption-check.js +181 -0
- package/dist/adoption-checkpoint.d.ts +97 -0
- package/dist/adoption-checkpoint.d.ts.map +1 -0
- package/dist/adoption-checkpoint.js +209 -0
- package/dist/adoption-merge-preview.d.ts +28 -0
- package/dist/adoption-merge-preview.d.ts.map +1 -0
- package/dist/adoption-merge-preview.js +254 -0
- package/dist/adoption-report-renderer.d.ts +33 -0
- package/dist/adoption-report-renderer.d.ts.map +1 -0
- package/dist/adoption-report-renderer.js +257 -0
- package/dist/adoption-state.d.ts +100 -0
- package/dist/adoption-state.d.ts.map +1 -0
- package/dist/adoption-state.js +296 -0
- package/dist/adoption-three-way.d.ts +46 -0
- package/dist/adoption-three-way.d.ts.map +1 -0
- package/dist/adoption-three-way.js +181 -0
- package/dist/agent-brief.d.ts +77 -0
- package/dist/agent-brief.d.ts.map +1 -0
- package/dist/agent-brief.js +490 -0
- package/dist/agent-contract-gate.d.ts +108 -0
- package/dist/agent-contract-gate.d.ts.map +1 -0
- package/dist/agent-contract-gate.js +412 -0
- package/dist/agent-contract-templates.d.ts +63 -0
- package/dist/agent-contract-templates.d.ts.map +1 -0
- package/dist/agent-contract-templates.js +346 -0
- package/dist/agent-contract.d.ts +65 -0
- package/dist/agent-contract.d.ts.map +1 -0
- package/dist/agent-contract.js +555 -0
- package/dist/agent-handoff.d.ts +123 -0
- package/dist/agent-handoff.d.ts.map +1 -0
- package/dist/agent-handoff.js +470 -0
- package/dist/agent-instructions.d.ts +2 -0
- package/dist/agent-instructions.d.ts.map +1 -0
- package/dist/agent-instructions.js +21 -0
- package/dist/agent-orchestration.d.ts +61 -0
- package/dist/agent-orchestration.d.ts.map +1 -0
- package/dist/agent-orchestration.js +285 -0
- package/dist/agent-task-prep.d.ts +31 -0
- package/dist/agent-task-prep.d.ts.map +1 -0
- package/dist/agent-task-prep.js +73 -0
- package/dist/ai-readiness.d.ts +30 -0
- package/dist/ai-readiness.d.ts.map +1 -0
- package/dist/ai-readiness.js +279 -0
- package/dist/api-report.d.ts +51 -0
- package/dist/api-report.d.ts.map +1 -0
- package/dist/api-report.js +254 -0
- package/dist/apply-dispatch-trace.d.ts +93 -0
- package/dist/apply-dispatch-trace.d.ts.map +1 -0
- package/dist/apply-dispatch-trace.js +283 -0
- package/dist/apply-gate-result.d.ts +52 -0
- package/dist/apply-gate-result.d.ts.map +1 -0
- package/dist/apply-gate-result.js +44 -0
- package/dist/architecture-map.d.ts +118 -0
- package/dist/architecture-map.d.ts.map +1 -0
- package/dist/architecture-map.js +543 -0
- package/dist/area-explore.d.ts +75 -0
- package/dist/area-explore.d.ts.map +1 -0
- package/dist/area-explore.js +438 -0
- package/dist/area-map.d.ts +43 -0
- package/dist/area-map.d.ts.map +1 -0
- package/dist/area-map.js +197 -0
- package/dist/asset-provenance.d.ts +123 -0
- package/dist/asset-provenance.d.ts.map +1 -0
- package/dist/asset-provenance.js +209 -0
- package/dist/barrel-operations.d.ts +45 -0
- package/dist/barrel-operations.d.ts.map +1 -0
- package/dist/barrel-operations.js +159 -0
- package/dist/boundaries-changed-only.d.ts +62 -0
- package/dist/boundaries-changed-only.d.ts.map +1 -0
- package/dist/boundaries-changed-only.js +97 -0
- package/dist/boundary-suggestions.d.ts +20 -0
- package/dist/boundary-suggestions.d.ts.map +1 -0
- package/dist/boundary-suggestions.js +51 -0
- package/dist/bundle-diff.d.ts +98 -0
- package/dist/bundle-diff.d.ts.map +1 -0
- package/dist/bundle-diff.js +531 -0
- package/dist/bundle-replay.d.ts +68 -0
- package/dist/bundle-replay.d.ts.map +1 -0
- package/dist/bundle-replay.js +273 -0
- package/dist/bundle-validate-html.d.ts +11 -0
- package/dist/bundle-validate-html.d.ts.map +1 -0
- package/dist/bundle-validate-html.js +60 -0
- package/dist/change-intent.d.ts +36 -0
- package/dist/change-intent.d.ts.map +1 -0
- package/dist/change-intent.js +259 -0
- package/dist/changed-preflight.d.ts +59 -0
- package/dist/changed-preflight.d.ts.map +1 -0
- package/dist/changed-preflight.js +358 -0
- package/dist/changed-scope.d.ts +112 -0
- package/dist/changed-scope.d.ts.map +1 -0
- package/dist/changed-scope.js +172 -0
- package/dist/changes-summary.d.ts +87 -0
- package/dist/changes-summary.d.ts.map +1 -0
- package/dist/changes-summary.js +323 -0
- package/dist/check-result-v1.d.ts +90 -0
- package/dist/check-result-v1.d.ts.map +1 -0
- package/dist/check-result-v1.js +335 -0
- package/dist/ci-integrity-report.d.ts +38 -0
- package/dist/ci-integrity-report.d.ts.map +1 -0
- package/dist/ci-integrity-report.js +324 -0
- package/dist/ci-permissions-fix.d.ts +38 -0
- package/dist/ci-permissions-fix.d.ts.map +1 -0
- package/dist/ci-permissions-fix.js +201 -0
- package/dist/ci-permissions.d.ts +51 -0
- package/dist/ci-permissions.d.ts.map +1 -0
- package/dist/ci-permissions.js +431 -0
- package/dist/ci-predict.d.ts +42 -0
- package/dist/ci-predict.d.ts.map +1 -0
- package/dist/ci-predict.js +300 -0
- package/dist/ci-scaffold.d.ts +47 -0
- package/dist/ci-scaffold.d.ts.map +1 -0
- package/dist/ci-scaffold.js +638 -0
- package/dist/codemod-assist.d.ts +97 -0
- package/dist/codemod-assist.d.ts.map +1 -0
- package/dist/codemod-assist.js +261 -0
- package/dist/command-recommender.d.ts +25 -0
- package/dist/command-recommender.d.ts.map +1 -0
- package/dist/command-recommender.js +145 -0
- package/dist/command-suggester.d.ts +61 -0
- package/dist/command-suggester.d.ts.map +1 -0
- package/dist/command-suggester.js +159 -0
- package/dist/command-taxonomy.d.ts +38 -0
- package/dist/command-taxonomy.d.ts.map +1 -0
- package/dist/command-taxonomy.js +164 -0
- package/dist/compliance-evidence.d.ts +58 -0
- package/dist/compliance-evidence.d.ts.map +1 -0
- package/dist/compliance-evidence.js +260 -0
- package/dist/compliance-profiles.d.ts +42 -0
- package/dist/compliance-profiles.d.ts.map +1 -0
- package/dist/compliance-profiles.js +171 -0
- package/dist/construct-adoption-diff.d.ts +55 -0
- package/dist/construct-adoption-diff.d.ts.map +1 -0
- package/dist/construct-adoption-diff.js +331 -0
- package/dist/construct-adoption.d.ts +71 -0
- package/dist/construct-adoption.d.ts.map +1 -0
- package/dist/construct-adoption.js +331 -0
- package/dist/construct-inference.d.ts +44 -0
- package/dist/construct-inference.d.ts.map +1 -0
- package/dist/construct-inference.js +391 -0
- package/dist/construct-registry.d.ts +32 -0
- package/dist/construct-registry.d.ts.map +1 -0
- package/dist/construct-registry.js +198 -0
- package/dist/contract-file-rule.d.ts +37 -0
- package/dist/contract-file-rule.d.ts.map +1 -0
- package/dist/contract-file-rule.js +99 -0
- package/dist/contract-template-registry.d.ts +28 -0
- package/dist/contract-template-registry.d.ts.map +1 -0
- package/dist/contract-template-registry.js +161 -0
- package/dist/contradictions.d.ts +52 -0
- package/dist/contradictions.d.ts.map +1 -0
- package/dist/contradictions.js +391 -0
- package/dist/convention-registry.d.ts +44 -0
- package/dist/convention-registry.d.ts.map +1 -0
- package/dist/convention-registry.js +195 -0
- package/dist/coverage-report.d.ts +25 -0
- package/dist/coverage-report.d.ts.map +1 -0
- package/dist/coverage-report.js +190 -0
- package/dist/custom-checks.d.ts +146 -0
- package/dist/custom-checks.d.ts.map +1 -0
- package/dist/custom-checks.js +260 -0
- package/dist/dashboard/dashboard-data.d.ts +59 -0
- package/dist/dashboard/dashboard-data.d.ts.map +1 -0
- package/dist/dashboard/dashboard-data.js +653 -0
- package/dist/dashboard-export.d.ts +67 -0
- package/dist/dashboard-export.d.ts.map +1 -0
- package/dist/dashboard-export.js +203 -0
- package/dist/decision-records.d.ts +47 -0
- package/dist/decision-records.d.ts.map +1 -0
- package/dist/decision-records.js +255 -0
- package/dist/demo-package.d.ts +49 -0
- package/dist/demo-package.d.ts.map +1 -0
- package/dist/demo-package.js +305 -0
- package/dist/demo-script.d.ts +25 -0
- package/dist/demo-script.d.ts.map +1 -0
- package/dist/demo-script.js +198 -0
- package/dist/demo-workflow.d.ts +28 -0
- package/dist/demo-workflow.d.ts.map +1 -0
- package/dist/demo-workflow.js +178 -0
- package/dist/dev-cycle.d.ts +41 -0
- package/dist/dev-cycle.d.ts.map +1 -0
- package/dist/dev-cycle.js +94 -0
- package/dist/dev-session-html.d.ts +13 -0
- package/dist/dev-session-html.d.ts.map +1 -0
- package/dist/dev-session-html.js +223 -0
- package/dist/dev-session-report.d.ts +11 -0
- package/dist/dev-session-report.d.ts.map +1 -0
- package/dist/dev-session-report.js +206 -0
- package/dist/dev-session.d.ts +257 -0
- package/dist/dev-session.d.ts.map +1 -0
- package/dist/dev-session.js +568 -0
- package/dist/diagnostics-suggest.d.ts +17 -0
- package/dist/diagnostics-suggest.d.ts.map +1 -0
- package/dist/diagnostics-suggest.js +69 -0
- package/dist/docs-check.d.ts +40 -0
- package/dist/docs-check.d.ts.map +1 -0
- package/dist/docs-check.js +221 -0
- package/dist/doctor-acknowledgements.d.ts +69 -0
- package/dist/doctor-acknowledgements.d.ts.map +1 -0
- package/dist/doctor-acknowledgements.js +150 -0
- package/dist/doctor-result.d.ts +51 -0
- package/dist/doctor-result.d.ts.map +1 -0
- package/dist/doctor-result.js +7 -0
- package/dist/doctor-suppressions.d.ts +91 -0
- package/dist/doctor-suppressions.d.ts.map +1 -0
- package/dist/doctor-suppressions.js +238 -0
- package/dist/drift-baseline.d.ts +29 -0
- package/dist/drift-baseline.d.ts.map +1 -0
- package/dist/drift-baseline.js +80 -0
- package/dist/drift.d.ts +38 -0
- package/dist/drift.d.ts.map +1 -0
- package/dist/drift.js +107 -0
- package/dist/entrypoint-matrix.d.ts +61 -0
- package/dist/entrypoint-matrix.d.ts.map +1 -0
- package/dist/entrypoint-matrix.js +221 -0
- package/dist/examples-check.d.ts +36 -0
- package/dist/examples-check.d.ts.map +1 -0
- package/dist/examples-check.js +168 -0
- package/dist/execution-graph.d.ts +98 -0
- package/dist/execution-graph.d.ts.map +1 -0
- package/dist/execution-graph.js +484 -0
- package/dist/export-bundle.d.ts +10 -0
- package/dist/export-bundle.d.ts.map +1 -0
- package/dist/export-bundle.js +90 -0
- package/dist/failure-diagnostics.d.ts +63 -0
- package/dist/failure-diagnostics.d.ts.map +1 -0
- package/dist/failure-diagnostics.js +243 -0
- package/dist/feature-bundle.d.ts +111 -0
- package/dist/feature-bundle.d.ts.map +1 -0
- package/dist/feature-bundle.js +211 -0
- package/dist/feedback-actions-v2.d.ts +65 -0
- package/dist/feedback-actions-v2.d.ts.map +1 -0
- package/dist/feedback-actions-v2.js +183 -0
- package/dist/feedback-ingestion.d.ts +96 -0
- package/dist/feedback-ingestion.d.ts.map +1 -0
- package/dist/feedback-ingestion.js +400 -0
- package/dist/fix-preview.d.ts +82 -0
- package/dist/fix-preview.d.ts.map +1 -0
- package/dist/fix-preview.js +365 -0
- package/dist/fuzzy-impact.d.ts +50 -0
- package/dist/fuzzy-impact.d.ts.map +1 -0
- package/dist/fuzzy-impact.js +446 -0
- package/dist/generated-code.d.ts +97 -0
- package/dist/generated-code.d.ts.map +1 -0
- package/dist/generated-code.js +395 -0
- package/dist/git-helpers.d.ts +26 -0
- package/dist/git-helpers.d.ts.map +1 -0
- package/dist/git-helpers.js +110 -0
- package/dist/golden-output.d.ts +33 -0
- package/dist/golden-output.d.ts.map +1 -0
- package/dist/golden-output.js +92 -0
- package/dist/grounding/build-grounding.d.ts +53 -0
- package/dist/grounding/build-grounding.d.ts.map +1 -0
- package/dist/grounding/build-grounding.js +51 -0
- package/dist/grounding/nx-projects.d.ts +29 -0
- package/dist/grounding/nx-projects.d.ts.map +1 -0
- package/dist/grounding/nx-projects.js +109 -0
- package/dist/grounding/validate-extracted-plan.d.ts +20 -0
- package/dist/grounding/validate-extracted-plan.d.ts.map +1 -0
- package/dist/grounding/validate-extracted-plan.js +127 -0
- package/dist/healing-plan.d.ts +33 -0
- package/dist/healing-plan.d.ts.map +1 -0
- package/dist/healing-plan.js +346 -0
- package/dist/helper-registry.d.ts +90 -0
- package/dist/helper-registry.d.ts.map +1 -0
- package/dist/helper-registry.js +529 -0
- package/dist/impact-analysis.d.ts +150 -0
- package/dist/impact-analysis.d.ts.map +1 -0
- package/dist/impact-analysis.js +697 -0
- package/dist/impact-graph-render.d.ts +51 -0
- package/dist/impact-graph-render.d.ts.map +1 -0
- package/dist/impact-graph-render.js +139 -0
- package/dist/impact-graph.d.ts +17 -0
- package/dist/impact-graph.d.ts.map +1 -0
- package/dist/impact-graph.js +119 -0
- package/dist/impact-render.d.ts +22 -0
- package/dist/impact-render.d.ts.map +1 -0
- package/dist/impact-render.js +413 -0
- package/dist/import-graph-analysis.d.ts +28 -0
- package/dist/import-graph-analysis.d.ts.map +1 -0
- package/dist/import-graph-analysis.js +193 -0
- package/dist/import-hygiene.d.ts +93 -0
- package/dist/import-hygiene.d.ts.map +1 -0
- package/dist/import-hygiene.js +366 -0
- package/dist/index.d.ts +223 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +233 -0
- package/dist/ingest-adoption.d.ts +50 -0
- package/dist/ingest-adoption.d.ts.map +1 -0
- package/dist/ingest-adoption.js +183 -0
- package/dist/ingest-apply.d.ts +80 -0
- package/dist/ingest-apply.d.ts.map +1 -0
- package/dist/ingest-apply.js +227 -0
- package/dist/ingest-body-extractor.d.ts +28 -0
- package/dist/ingest-body-extractor.d.ts.map +1 -0
- package/dist/ingest-body-extractor.js +129 -0
- package/dist/ingest-drafts.d.ts +16 -0
- package/dist/ingest-drafts.d.ts.map +1 -0
- package/dist/ingest-drafts.js +482 -0
- package/dist/inspector-cache.d.ts +41 -0
- package/dist/inspector-cache.d.ts.map +1 -0
- package/dist/inspector-cache.js +104 -0
- package/dist/install-smoke.d.ts +44 -0
- package/dist/install-smoke.d.ts.map +1 -0
- package/dist/install-smoke.js +31 -0
- package/dist/knowledge-authoring.d.ts +151 -0
- package/dist/knowledge-authoring.d.ts.map +1 -0
- package/dist/knowledge-authoring.js +586 -0
- package/dist/knowledge-graph.d.ts +76 -0
- package/dist/knowledge-graph.d.ts.map +1 -0
- package/dist/knowledge-graph.js +336 -0
- package/dist/knowledge-lint.d.ts +97 -0
- package/dist/knowledge-lint.d.ts.map +1 -0
- package/dist/knowledge-lint.js +302 -0
- package/dist/knowledge-rename.d.ts +38 -0
- package/dist/knowledge-rename.d.ts.map +1 -0
- package/dist/knowledge-rename.js +88 -0
- package/dist/knowledge-stale.d.ts +124 -0
- package/dist/knowledge-stale.d.ts.map +1 -0
- package/dist/knowledge-stale.js +892 -0
- package/dist/languages/command-inference.d.ts +27 -0
- package/dist/languages/command-inference.d.ts.map +1 -0
- package/dist/languages/command-inference.js +214 -0
- package/dist/languages/dependency-scan.d.ts +33 -0
- package/dist/languages/dependency-scan.d.ts.map +1 -0
- package/dist/languages/dependency-scan.js +343 -0
- package/dist/languages/index.d.ts +14 -0
- package/dist/languages/index.d.ts.map +1 -0
- package/dist/languages/index.js +13 -0
- package/dist/languages/language-boundaries.d.ts +30 -0
- package/dist/languages/language-boundaries.d.ts.map +1 -0
- package/dist/languages/language-boundaries.js +176 -0
- package/dist/languages/language-cache.d.ts +54 -0
- package/dist/languages/language-cache.d.ts.map +1 -0
- package/dist/languages/language-cache.js +236 -0
- package/dist/languages/language-detection.d.ts +30 -0
- package/dist/languages/language-detection.d.ts.map +1 -0
- package/dist/languages/language-detection.js +584 -0
- package/dist/languages/language-id.d.ts +15 -0
- package/dist/languages/language-id.d.ts.map +1 -0
- package/dist/languages/language-id.js +15 -0
- package/dist/languages/language-runner.d.ts +90 -0
- package/dist/languages/language-runner.d.ts.map +1 -0
- package/dist/languages/language-runner.js +346 -0
- package/dist/languages/polyglot-boundary.d.ts +80 -0
- package/dist/languages/polyglot-boundary.d.ts.map +1 -0
- package/dist/languages/polyglot-boundary.js +373 -0
- package/dist/languages/polyglot-ci.d.ts +25 -0
- package/dist/languages/polyglot-ci.d.ts.map +1 -0
- package/dist/languages/polyglot-ci.js +278 -0
- package/dist/languages/test-impact.d.ts +19 -0
- package/dist/languages/test-impact.d.ts.map +1 -0
- package/dist/languages/test-impact.js +157 -0
- package/dist/loader-diagnostics.d.ts +40 -0
- package/dist/loader-diagnostics.d.ts.map +1 -0
- package/dist/loader-diagnostics.js +49 -0
- package/dist/memory-diff.d.ts +60 -0
- package/dist/memory-diff.d.ts.map +1 -0
- package/dist/memory-diff.js +302 -0
- package/dist/migration-profile-registry.d.ts +26 -0
- package/dist/migration-profile-registry.d.ts.map +1 -0
- package/dist/migration-profile-registry.js +135 -0
- package/dist/migration-readiness.d.ts +101 -0
- package/dist/migration-readiness.d.ts.map +1 -0
- package/dist/migration-readiness.js +253 -0
- package/dist/monorepo-onboarding.d.ts +51 -0
- package/dist/monorepo-onboarding.d.ts.map +1 -0
- package/dist/monorepo-onboarding.js +235 -0
- package/dist/onboarding-adoption-diff.d.ts +53 -0
- package/dist/onboarding-adoption-diff.d.ts.map +1 -0
- package/dist/onboarding-adoption-diff.js +285 -0
- package/dist/onboarding-adoption.d.ts +136 -0
- package/dist/onboarding-adoption.d.ts.map +1 -0
- package/dist/onboarding-adoption.js +702 -0
- package/dist/onboarding-agent-import.d.ts +40 -0
- package/dist/onboarding-agent-import.d.ts.map +1 -0
- package/dist/onboarding-agent-import.js +114 -0
- package/dist/onboarding-diff.d.ts +39 -0
- package/dist/onboarding-diff.d.ts.map +1 -0
- package/dist/onboarding-diff.js +240 -0
- package/dist/onboarding-drafts.d.ts +28 -0
- package/dist/onboarding-drafts.d.ts.map +1 -0
- package/dist/onboarding-drafts.js +234 -0
- package/dist/onboarding-report.d.ts +8 -0
- package/dist/onboarding-report.d.ts.map +1 -0
- package/dist/onboarding-report.js +239 -0
- package/dist/onboarding.d.ts +134 -0
- package/dist/onboarding.d.ts.map +1 -0
- package/dist/onboarding.js +729 -0
- package/dist/ownership.d.ts +38 -0
- package/dist/ownership.d.ts.map +1 -0
- package/dist/ownership.js +102 -0
- package/dist/pack-author-ux.d.ts +58 -0
- package/dist/pack-author-ux.d.ts.map +1 -0
- package/dist/pack-author-ux.js +219 -0
- package/dist/pack-author.d.ts +94 -0
- package/dist/pack-author.d.ts.map +1 -0
- package/dist/pack-author.js +208 -0
- package/dist/pack-compatibility.d.ts +21 -0
- package/dist/pack-compatibility.d.ts.map +1 -0
- package/dist/pack-compatibility.js +114 -0
- package/dist/pack-contributions-inventory.d.ts +121 -0
- package/dist/pack-contributions-inventory.d.ts.map +1 -0
- package/dist/pack-contributions-inventory.js +732 -0
- package/dist/pack-docs.d.ts +11 -0
- package/dist/pack-docs.d.ts.map +1 -0
- package/dist/pack-docs.js +101 -0
- package/dist/pack-doctor.d.ts +50 -0
- package/dist/pack-doctor.d.ts.map +1 -0
- package/dist/pack-doctor.js +302 -0
- package/dist/pack-helper-registry.d.ts +29 -0
- package/dist/pack-helper-registry.d.ts.map +1 -0
- package/dist/pack-helper-registry.js +144 -0
- package/dist/pack-pending.d.ts +68 -0
- package/dist/pack-pending.d.ts.map +1 -0
- package/dist/pack-pending.js +189 -0
- package/dist/pack-quality-score.d.ts +44 -0
- package/dist/pack-quality-score.d.ts.map +1 -0
- package/dist/pack-quality-score.js +155 -0
- package/dist/pack-release-check.d.ts +24 -0
- package/dist/pack-release-check.d.ts.map +1 -0
- package/dist/pack-release-check.js +258 -0
- package/dist/pack-signature-status.d.ts +72 -0
- package/dist/pack-signature-status.d.ts.map +1 -0
- package/dist/pack-signature-status.js +222 -0
- package/dist/pack-symbol-compat.d.ts +60 -0
- package/dist/pack-symbol-compat.d.ts.map +1 -0
- package/dist/pack-symbol-compat.js +371 -0
- package/dist/pack-test-runner.d.ts +59 -0
- package/dist/pack-test-runner.d.ts.map +1 -0
- package/dist/pack-test-runner.js +211 -0
- package/dist/pipeline-command-dictionary.d.ts +2 -0
- package/dist/pipeline-command-dictionary.d.ts.map +1 -0
- package/dist/pipeline-command-dictionary.js +20 -0
- package/dist/pipeline-lint.d.ts +30 -0
- package/dist/pipeline-lint.d.ts.map +1 -0
- package/dist/pipeline-lint.js +134 -0
- package/dist/plan-dependency-graph.d.ts +25 -0
- package/dist/plan-dependency-graph.d.ts.map +1 -0
- package/dist/plan-dependency-graph.js +195 -0
- package/dist/plan-review.d.ts +64 -0
- package/dist/plan-review.d.ts.map +1 -0
- package/dist/plan-review.js +242 -0
- package/dist/plan-simulation.d.ts +108 -0
- package/dist/plan-simulation.d.ts.map +1 -0
- package/dist/plan-simulation.js +767 -0
- package/dist/playbook-registry.d.ts +25 -0
- package/dist/playbook-registry.d.ts.map +1 -0
- package/dist/playbook-registry.js +148 -0
- package/dist/playbook-script.d.ts +60 -0
- package/dist/playbook-script.d.ts.map +1 -0
- package/dist/playbook-script.js +161 -0
- package/dist/plugin-lifecycle-profile-registry.d.ts +52 -0
- package/dist/plugin-lifecycle-profile-registry.d.ts.map +1 -0
- package/dist/plugin-lifecycle-profile-registry.js +202 -0
- package/dist/plugin-lifecycle.d.ts +132 -0
- package/dist/plugin-lifecycle.d.ts.map +1 -0
- package/dist/plugin-lifecycle.js +477 -0
- package/dist/policy-engine.d.ts +101 -0
- package/dist/policy-engine.d.ts.map +1 -0
- package/dist/policy-engine.js +321 -0
- package/dist/policy-override-audit.d.ts +18 -0
- package/dist/policy-override-audit.d.ts.map +1 -0
- package/dist/policy-override-audit.js +54 -0
- package/dist/policy-overrides.d.ts +35 -0
- package/dist/policy-overrides.d.ts.map +1 -0
- package/dist/policy-overrides.js +84 -0
- package/dist/policy-test.d.ts +83 -0
- package/dist/policy-test.d.ts.map +1 -0
- package/dist/policy-test.js +342 -0
- package/dist/pr-summary.d.ts +34 -0
- package/dist/pr-summary.d.ts.map +1 -0
- package/dist/pr-summary.js +220 -0
- package/dist/product-coherence.d.ts +21 -0
- package/dist/product-coherence.d.ts.map +1 -0
- package/dist/product-coherence.js +158 -0
- package/dist/profile-registry.d.ts +42 -0
- package/dist/profile-registry.d.ts.map +1 -0
- package/dist/profile-registry.js +104 -0
- package/dist/project-coupling-audit.d.ts +64 -0
- package/dist/project-coupling-audit.d.ts.map +1 -0
- package/dist/project-coupling-audit.js +282 -0
- package/dist/project-overview.d.ts +14 -0
- package/dist/project-overview.d.ts.map +1 -0
- package/dist/project-overview.js +27 -0
- package/dist/propose-knowledge.d.ts +64 -0
- package/dist/propose-knowledge.d.ts.map +1 -0
- package/dist/propose-knowledge.js +367 -0
- package/dist/quality-baseline.d.ts +123 -0
- package/dist/quality-baseline.d.ts.map +1 -0
- package/dist/quality-baseline.js +433 -0
- package/dist/quality-html.d.ts +7 -0
- package/dist/quality-html.d.ts.map +1 -0
- package/dist/quality-html.js +64 -0
- package/dist/quality-report.d.ts +49 -0
- package/dist/quality-report.d.ts.map +1 -0
- package/dist/quality-report.js +296 -0
- package/dist/query-resolver.d.ts +38 -0
- package/dist/query-resolver.d.ts.map +1 -0
- package/dist/query-resolver.js +163 -0
- package/dist/ranker-explainability.d.ts +91 -0
- package/dist/ranker-explainability.d.ts.map +1 -0
- package/dist/ranker-explainability.js +550 -0
- package/dist/reference-lookup.d.ts +8 -0
- package/dist/reference-lookup.d.ts.map +1 -0
- package/dist/reference-lookup.js +18 -0
- package/dist/registration-hint-registry.d.ts +55 -0
- package/dist/registration-hint-registry.d.ts.map +1 -0
- package/dist/registration-hint-registry.js +327 -0
- package/dist/registry-lifecycle.d.ts +47 -0
- package/dist/registry-lifecycle.d.ts.map +1 -0
- package/dist/registry-lifecycle.js +214 -0
- package/dist/release-readiness.d.ts +64 -0
- package/dist/release-readiness.d.ts.map +1 -0
- package/dist/release-readiness.js +456 -0
- package/dist/release-smoke.d.ts +138 -0
- package/dist/release-smoke.d.ts.map +1 -0
- package/dist/release-smoke.js +459 -0
- package/dist/release-train.d.ts +33 -0
- package/dist/release-train.d.ts.map +1 -0
- package/dist/release-train.js +104 -0
- package/dist/repo-memory.d.ts +95 -0
- package/dist/repo-memory.d.ts.map +1 -0
- package/dist/repo-memory.js +614 -0
- package/dist/report-site.d.ts +92 -0
- package/dist/report-site.d.ts.map +1 -0
- package/dist/report-site.js +658 -0
- package/dist/reposet.d.ts +56 -0
- package/dist/reposet.d.ts.map +1 -0
- package/dist/reposet.js +160 -0
- package/dist/repository-intelligence.d.ts +145 -0
- package/dist/repository-intelligence.d.ts.map +1 -0
- package/dist/repository-intelligence.js +729 -0
- package/dist/repository-knowledge-model.d.ts +218 -0
- package/dist/repository-knowledge-model.d.ts.map +1 -0
- package/dist/repository-knowledge-model.js +939 -0
- package/dist/repository-map.d.ts +72 -0
- package/dist/repository-map.d.ts.map +1 -0
- package/dist/repository-map.js +332 -0
- package/dist/repository-stats.d.ts +66 -0
- package/dist/repository-stats.d.ts.map +1 -0
- package/dist/repository-stats.js +329 -0
- package/dist/review-comment-renderer.d.ts +59 -0
- package/dist/review-comment-renderer.d.ts.map +1 -0
- package/dist/review-comment-renderer.js +181 -0
- package/dist/review-comment-v2.d.ts +9 -0
- package/dist/review-comment-v2.d.ts.map +1 -0
- package/dist/review-comment-v2.js +178 -0
- package/dist/review-html.d.ts +13 -0
- package/dist/review-html.d.ts.map +1 -0
- package/dist/review-html.js +79 -0
- package/dist/review-packet-v2.d.ts +29 -0
- package/dist/review-packet-v2.d.ts.map +1 -0
- package/dist/review-packet-v2.js +71 -0
- package/dist/review-packet-v3.d.ts +22 -0
- package/dist/review-packet-v3.d.ts.map +1 -0
- package/dist/review-packet-v3.js +181 -0
- package/dist/review-packet.d.ts +49 -0
- package/dist/review-packet.d.ts.map +1 -0
- package/dist/review-packet.js +129 -0
- package/dist/risk-signals.d.ts +28 -0
- package/dist/risk-signals.d.ts.map +1 -0
- package/dist/risk-signals.js +68 -0
- package/dist/role-views.d.ts +50 -0
- package/dist/role-views.d.ts.map +1 -0
- package/dist/role-views.js +334 -0
- package/dist/rounds.d.ts +52 -0
- package/dist/rounds.d.ts.map +1 -0
- package/dist/rounds.js +172 -0
- package/dist/rule-drift.d.ts +42 -0
- package/dist/rule-drift.d.ts.map +1 -0
- package/dist/rule-drift.js +148 -0
- package/dist/rule-quality.d.ts +73 -0
- package/dist/rule-quality.d.ts.map +1 -0
- package/dist/rule-quality.js +356 -0
- package/dist/rule-scaffold.d.ts +71 -0
- package/dist/rule-scaffold.d.ts.map +1 -0
- package/dist/rule-scaffold.js +258 -0
- package/dist/safety-audit-deep.d.ts +38 -0
- package/dist/safety-audit-deep.d.ts.map +1 -0
- package/dist/safety-audit-deep.js +162 -0
- package/dist/safety-audit.d.ts +91 -0
- package/dist/safety-audit.d.ts.map +1 -0
- package/dist/safety-audit.js +138 -0
- package/dist/safety-html.d.ts +7 -0
- package/dist/safety-html.d.ts.map +1 -0
- package/dist/safety-html.js +70 -0
- package/dist/scaffold-coverage.d.ts +46 -0
- package/dist/scaffold-coverage.d.ts.map +1 -0
- package/dist/scaffold-coverage.js +273 -0
- package/dist/scaffold-patterns.d.ts +38 -0
- package/dist/scaffold-patterns.d.ts.map +1 -0
- package/dist/scaffold-patterns.js +282 -0
- package/dist/schema-inventory.d.ts +55 -0
- package/dist/schema-inventory.d.ts.map +1 -0
- package/dist/schema-inventory.js +301 -0
- package/dist/search-index.d.ts +75 -0
- package/dist/search-index.d.ts.map +1 -0
- package/dist/search-index.js +531 -0
- package/dist/search-tuning-explain.d.ts +68 -0
- package/dist/search-tuning-explain.d.ts.map +1 -0
- package/dist/search-tuning-explain.js +207 -0
- package/dist/search-tuning-registry.d.ts +54 -0
- package/dist/search-tuning-registry.d.ts.map +1 -0
- package/dist/search-tuning-registry.js +303 -0
- package/dist/self-audit.d.ts +59 -0
- package/dist/self-audit.d.ts.map +1 -0
- package/dist/self-audit.js +192 -0
- package/dist/self-config-doctor-v2.d.ts +57 -0
- package/dist/self-config-doctor-v2.d.ts.map +1 -0
- package/dist/self-config-doctor-v2.js +653 -0
- package/dist/self-config-doctor.d.ts +47 -0
- package/dist/self-config-doctor.d.ts.map +1 -0
- package/dist/self-config-doctor.js +432 -0
- package/dist/sharkcraft-inspector.d.ts +73 -0
- package/dist/sharkcraft-inspector.d.ts.map +1 -0
- package/dist/sharkcraft-inspector.js +745 -0
- package/dist/spec/spec-cross-validate.d.ts +17 -0
- package/dist/spec/spec-cross-validate.d.ts.map +1 -0
- package/dist/spec/spec-cross-validate.js +53 -0
- package/dist/spec/spec-discovery.d.ts +27 -0
- package/dist/spec/spec-discovery.d.ts.map +1 -0
- package/dist/spec/spec-discovery.js +78 -0
- package/dist/spec/spec-review.d.ts +36 -0
- package/dist/spec/spec-review.d.ts.map +1 -0
- package/dist/spec/spec-review.js +37 -0
- package/dist/stability-map.d.ts +62 -0
- package/dist/stability-map.d.ts.map +1 -0
- package/dist/stability-map.js +404 -0
- package/dist/start-here.d.ts +49 -0
- package/dist/start-here.d.ts.map +1 -0
- package/dist/start-here.js +259 -0
- package/dist/surface-profile-detect.d.ts +42 -0
- package/dist/surface-profile-detect.d.ts.map +1 -0
- package/dist/surface-profile-detect.js +76 -0
- package/dist/symbol-index.d.ts +108 -0
- package/dist/symbol-index.d.ts.map +1 -0
- package/dist/symbol-index.js +483 -0
- package/dist/task-decompose.d.ts +38 -0
- package/dist/task-decompose.d.ts.map +1 -0
- package/dist/task-decompose.js +154 -0
- package/dist/task-packet.d.ts +104 -0
- package/dist/task-packet.d.ts.map +1 -0
- package/dist/task-packet.js +156 -0
- package/dist/task-ranker.d.ts +51 -0
- package/dist/task-ranker.d.ts.map +1 -0
- package/dist/task-ranker.js +410 -0
- package/dist/task-risk.d.ts +84 -0
- package/dist/task-risk.d.ts.map +1 -0
- package/dist/task-risk.js +731 -0
- package/dist/task-routing-hint-registry.d.ts +36 -0
- package/dist/task-routing-hint-registry.d.ts.map +1 -0
- package/dist/task-routing-hint-registry.js +186 -0
- package/dist/template-authoring.d.ts +113 -0
- package/dist/template-authoring.d.ts.map +1 -0
- package/dist/template-authoring.js +521 -0
- package/dist/template-body-inference-v2.d.ts +19 -0
- package/dist/template-body-inference-v2.d.ts.map +1 -0
- package/dist/template-body-inference-v2.js +468 -0
- package/dist/template-body-inference.d.ts +59 -0
- package/dist/template-body-inference.d.ts.map +1 -0
- package/dist/template-body-inference.js +277 -0
- package/dist/template-drift.d.ts +39 -0
- package/dist/template-drift.d.ts.map +1 -0
- package/dist/template-drift.js +353 -0
- package/dist/template-lint.d.ts +31 -0
- package/dist/template-lint.d.ts.map +1 -0
- package/dist/template-lint.js +113 -0
- package/dist/test-definitions.d.ts +41 -0
- package/dist/test-definitions.d.ts.map +1 -0
- package/dist/test-definitions.js +6 -0
- package/dist/test-impact.d.ts +30 -0
- package/dist/test-impact.d.ts.map +1 -0
- package/dist/test-impact.js +173 -0
- package/dist/test-runner.d.ts +87 -0
- package/dist/test-runner.d.ts.map +1 -0
- package/dist/test-runner.js +560 -0
- package/dist/uncertainty-report.d.ts +46 -0
- package/dist/uncertainty-report.d.ts.map +1 -0
- package/dist/uncertainty-report.js +108 -0
- package/dist/uncertainty.d.ts +38 -0
- package/dist/uncertainty.d.ts.map +1 -0
- package/dist/uncertainty.js +115 -0
- package/dist/universal-search.d.ts +64 -0
- package/dist/universal-search.d.ts.map +1 -0
- package/dist/universal-search.js +347 -0
- package/dist/upgrade-advisor.d.ts +22 -0
- package/dist/upgrade-advisor.d.ts.map +1 -0
- package/dist/upgrade-advisor.js +109 -0
- package/dist/why-file.d.ts +75 -0
- package/dist/why-file.d.ts.map +1 -0
- package/dist/why-file.js +202 -0
- package/dist/workflow-simulation.d.ts +46 -0
- package/dist/workflow-simulation.d.ts.map +1 -0
- package/dist/workflow-simulation.js +154 -0
- package/package.json +66 -0
|
@@ -0,0 +1,456 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Aggregated release-readiness gate. Composes the existing read-only audits
|
|
3
|
+
* into one verdict so reviewers can answer "is this safe to tag?" without
|
|
4
|
+
* remembering every individual command.
|
|
5
|
+
*
|
|
6
|
+
* Pure read-only: never writes, never publishes, never invokes shells.
|
|
7
|
+
*/
|
|
8
|
+
import { existsSync, readFileSync, readdirSync, statSync } from 'node:fs';
|
|
9
|
+
import * as nodePath from 'node:path';
|
|
10
|
+
import { buildCoverageReport } from "./coverage-report.js";
|
|
11
|
+
import { runDoctor } from "./sharkcraft-inspector.js";
|
|
12
|
+
import { buildPackDoctorReport, runPackReleaseChecksForReport, mergePackReleaseChecks } from "./pack-doctor.js";
|
|
13
|
+
import { buildDocsCheck } from "./docs-check.js";
|
|
14
|
+
import { buildExamplesCheck } from "./examples-check.js";
|
|
15
|
+
import { buildPackSignatureStatusReport } from "./pack-signature-status.js";
|
|
16
|
+
/** Max age in days for a preflight summary file before it's flagged stale. */
|
|
17
|
+
export const PREFLIGHT_STALE_AFTER_DAYS = 7;
|
|
18
|
+
export const RELEASE_READINESS_SCHEMA = 'sharkcraft.release-readiness/v1';
|
|
19
|
+
export var ReleaseReadinessSeverity;
|
|
20
|
+
(function (ReleaseReadinessSeverity) {
|
|
21
|
+
ReleaseReadinessSeverity["Info"] = "info";
|
|
22
|
+
ReleaseReadinessSeverity["Warning"] = "warning";
|
|
23
|
+
ReleaseReadinessSeverity["Error"] = "error";
|
|
24
|
+
})(ReleaseReadinessSeverity || (ReleaseReadinessSeverity = {}));
|
|
25
|
+
/** Auto-discover the newest preflight summary file. */
|
|
26
|
+
export function findNewestPreflightSummary(projectRoot) {
|
|
27
|
+
const candidates = [];
|
|
28
|
+
const knownDirs = [
|
|
29
|
+
nodePath.join(projectRoot, '.sharkcraft', 'reports'),
|
|
30
|
+
nodePath.join(projectRoot, '.sharkcraft', 'release'),
|
|
31
|
+
projectRoot,
|
|
32
|
+
];
|
|
33
|
+
for (const dir of knownDirs) {
|
|
34
|
+
if (!existsSync(dir))
|
|
35
|
+
continue;
|
|
36
|
+
let entries;
|
|
37
|
+
try {
|
|
38
|
+
entries = readdirSync(dir);
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
for (const e of entries) {
|
|
44
|
+
if (!/preflight/i.test(e) || !e.endsWith('.json'))
|
|
45
|
+
continue;
|
|
46
|
+
candidates.push(nodePath.join(dir, e));
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
if (candidates.length === 0)
|
|
50
|
+
return null;
|
|
51
|
+
let best = null;
|
|
52
|
+
for (const file of candidates) {
|
|
53
|
+
let mtime = 0;
|
|
54
|
+
try {
|
|
55
|
+
mtime = statSync(file).mtimeMs;
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
if (!best || mtime > best.mtime)
|
|
61
|
+
best = { file, mtime };
|
|
62
|
+
}
|
|
63
|
+
return best ? best.file : null;
|
|
64
|
+
}
|
|
65
|
+
function resolvePreflightFile(projectRoot, optionValue) {
|
|
66
|
+
if (!optionValue)
|
|
67
|
+
return undefined;
|
|
68
|
+
if (optionValue === 'auto') {
|
|
69
|
+
return findNewestPreflightSummary(projectRoot) ?? undefined;
|
|
70
|
+
}
|
|
71
|
+
const abs = nodePath.isAbsolute(optionValue) ? optionValue : nodePath.resolve(projectRoot, optionValue);
|
|
72
|
+
if (!existsSync(abs))
|
|
73
|
+
return abs;
|
|
74
|
+
let stat;
|
|
75
|
+
try {
|
|
76
|
+
stat = statSync(abs);
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
return abs;
|
|
80
|
+
}
|
|
81
|
+
if (stat.isDirectory()) {
|
|
82
|
+
// Find newest preflight*.json inside.
|
|
83
|
+
let best = null;
|
|
84
|
+
let entries = [];
|
|
85
|
+
try {
|
|
86
|
+
entries = readdirSync(abs);
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
return abs;
|
|
90
|
+
}
|
|
91
|
+
for (const e of entries) {
|
|
92
|
+
if (!e.endsWith('.json'))
|
|
93
|
+
continue;
|
|
94
|
+
const full = nodePath.join(abs, e);
|
|
95
|
+
try {
|
|
96
|
+
const s = statSync(full);
|
|
97
|
+
if (!s.isFile())
|
|
98
|
+
continue;
|
|
99
|
+
if (!best || s.mtimeMs > best.mtime)
|
|
100
|
+
best = { file: full, mtime: s.mtimeMs };
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return best ? best.file : abs;
|
|
107
|
+
}
|
|
108
|
+
return abs;
|
|
109
|
+
}
|
|
110
|
+
function severityFor(status, strict) {
|
|
111
|
+
if (status === 'fail')
|
|
112
|
+
return ReleaseReadinessSeverity.Error;
|
|
113
|
+
if (status === 'warn')
|
|
114
|
+
return strict ? ReleaseReadinessSeverity.Error : ReleaseReadinessSeverity.Warning;
|
|
115
|
+
if (status === 'skipped')
|
|
116
|
+
return ReleaseReadinessSeverity.Info;
|
|
117
|
+
return ReleaseReadinessSeverity.Info;
|
|
118
|
+
}
|
|
119
|
+
function pass(id, title, message) {
|
|
120
|
+
return { id, title, status: 'pass', severity: ReleaseReadinessSeverity.Info, message };
|
|
121
|
+
}
|
|
122
|
+
function warn(id, title, message, suggestion) {
|
|
123
|
+
return {
|
|
124
|
+
id,
|
|
125
|
+
title,
|
|
126
|
+
status: 'warn',
|
|
127
|
+
severity: ReleaseReadinessSeverity.Warning,
|
|
128
|
+
message,
|
|
129
|
+
...(suggestion ? { suggestion } : {}),
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
function fail(id, title, message, suggestion) {
|
|
133
|
+
return {
|
|
134
|
+
id,
|
|
135
|
+
title,
|
|
136
|
+
status: 'fail',
|
|
137
|
+
severity: ReleaseReadinessSeverity.Error,
|
|
138
|
+
message,
|
|
139
|
+
...(suggestion ? { suggestion } : {}),
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
function skip(id, title, message) {
|
|
143
|
+
return { id, title, status: 'skipped', severity: ReleaseReadinessSeverity.Info, message };
|
|
144
|
+
}
|
|
145
|
+
function checkReadmeRequiredSections(projectRoot) {
|
|
146
|
+
const file = nodePath.join(projectRoot, 'README.md');
|
|
147
|
+
if (!existsSync(file)) {
|
|
148
|
+
return fail('readme-present', 'README.md present', 'README.md is missing at the project root.');
|
|
149
|
+
}
|
|
150
|
+
let body = '';
|
|
151
|
+
try {
|
|
152
|
+
body = readFileSync(file, 'utf8').toLowerCase();
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
return warn('readme-readable', 'README.md readable', 'README.md exists but could not be read.');
|
|
156
|
+
}
|
|
157
|
+
const required = ['quick demo', 'onboard'];
|
|
158
|
+
const missing = required.filter((s) => !body.includes(s));
|
|
159
|
+
if (missing.length > 0) {
|
|
160
|
+
return warn('readme-required-sections', 'README required sections', `README.md is missing section keywords: ${missing.join(', ')}`, 'Add a "Quick demo" and "Onboard" section so adopters land on something runnable.');
|
|
161
|
+
}
|
|
162
|
+
return pass('readme-required-sections', 'README required sections', 'README.md has the expected sections.');
|
|
163
|
+
}
|
|
164
|
+
function checkPackageMetadata(projectRoot) {
|
|
165
|
+
const file = nodePath.join(projectRoot, 'package.json');
|
|
166
|
+
if (!existsSync(file)) {
|
|
167
|
+
return fail('package-json', 'package.json present', 'package.json missing at project root.');
|
|
168
|
+
}
|
|
169
|
+
try {
|
|
170
|
+
const pkg = JSON.parse(readFileSync(file, 'utf8'));
|
|
171
|
+
const missing = [];
|
|
172
|
+
if (!pkg.name)
|
|
173
|
+
missing.push('name');
|
|
174
|
+
if (!pkg.version)
|
|
175
|
+
missing.push('version');
|
|
176
|
+
if (!pkg.license)
|
|
177
|
+
missing.push('license');
|
|
178
|
+
if (!pkg.repository)
|
|
179
|
+
missing.push('repository');
|
|
180
|
+
if (missing.length > 0) {
|
|
181
|
+
return warn('package-metadata', 'package.json metadata', `Missing fields: ${missing.join(', ')}`, 'Fill in name/version/license/repository so the publish step has everything it needs.');
|
|
182
|
+
}
|
|
183
|
+
return pass('package-metadata', 'package.json metadata', `name=${pkg.name} version=${pkg.version} license=${pkg.license}`);
|
|
184
|
+
}
|
|
185
|
+
catch (e) {
|
|
186
|
+
return fail('package-metadata', 'package.json metadata', `Failed to parse package.json: ${e.message}`);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
function checkExamplesPresent(projectRoot) {
|
|
190
|
+
const examplesDir = nodePath.join(projectRoot, 'examples');
|
|
191
|
+
if (!existsSync(examplesDir)) {
|
|
192
|
+
return warn('examples-dir', 'examples/ present', 'No examples/ directory found.');
|
|
193
|
+
}
|
|
194
|
+
return pass('examples-dir', 'examples/ present', 'examples/ exists.');
|
|
195
|
+
}
|
|
196
|
+
function checkPreflightSummary(file) {
|
|
197
|
+
if (!file) {
|
|
198
|
+
return skip('preflight-summary', 'release:preflight summary', 'Pass --preflight <file|auto> to fold in the latest release:preflight result.');
|
|
199
|
+
}
|
|
200
|
+
if (!existsSync(file)) {
|
|
201
|
+
return warn('preflight-summary', 'release:preflight summary', `release:preflight summary not found at ${file}.`, 'Run `bun run release:preflight` and pass the captured JSON via --preflight.');
|
|
202
|
+
}
|
|
203
|
+
let mtimeMs = 0;
|
|
204
|
+
try {
|
|
205
|
+
mtimeMs = statSync(file).mtimeMs;
|
|
206
|
+
}
|
|
207
|
+
catch {
|
|
208
|
+
mtimeMs = 0;
|
|
209
|
+
}
|
|
210
|
+
const ageDays = mtimeMs > 0 ? Math.floor((Date.now() - mtimeMs) / (1000 * 60 * 60 * 24)) : -1;
|
|
211
|
+
try {
|
|
212
|
+
const data = JSON.parse(readFileSync(file, 'utf8'));
|
|
213
|
+
if (data.passed === true) {
|
|
214
|
+
if (ageDays > PREFLIGHT_STALE_AFTER_DAYS) {
|
|
215
|
+
return warn('preflight-summary', 'release:preflight summary', `release:preflight passed, but the report is ${ageDays} day(s) old. Re-run before tagging.`, 'bun run release:preflight');
|
|
216
|
+
}
|
|
217
|
+
return pass('preflight-summary', 'release:preflight summary', `release:preflight passed (${ageDays >= 0 ? `${ageDays}d old` : 'age unknown'}).`);
|
|
218
|
+
}
|
|
219
|
+
const failed = (data.steps ?? []).filter((s) => !s.passed).map((s) => s.id);
|
|
220
|
+
return fail('preflight-summary', 'release:preflight summary', `release:preflight reports failures in: ${failed.join(', ') || 'unknown step'}`);
|
|
221
|
+
}
|
|
222
|
+
catch (e) {
|
|
223
|
+
return warn('preflight-summary', 'release:preflight summary', `Failed to parse preflight summary: ${e.message}`);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
export async function buildReleaseReadiness(inspection, options = {}) {
|
|
227
|
+
const projectRoot = inspection.projectRoot;
|
|
228
|
+
const strict = options.strict === true;
|
|
229
|
+
const checks = [];
|
|
230
|
+
// 1. Doctor
|
|
231
|
+
const doctor = runDoctor(inspection);
|
|
232
|
+
if (doctor.summary.errors === 0) {
|
|
233
|
+
checks.push(pass('doctor', 'shrk doctor', `${doctor.summary.ok} OK, ${doctor.summary.warnings} warnings.`));
|
|
234
|
+
}
|
|
235
|
+
else {
|
|
236
|
+
checks.push(fail('doctor', 'shrk doctor', `${doctor.summary.errors} errors detected.`, 'Run `shrk doctor` and fix the listed errors.'));
|
|
237
|
+
}
|
|
238
|
+
// 2. Coverage
|
|
239
|
+
const coverage = buildCoverageReport(inspection);
|
|
240
|
+
if (coverage.overall < 50) {
|
|
241
|
+
checks.push(fail('coverage', 'Coverage', `Overall score ${coverage.overall}/100.`));
|
|
242
|
+
}
|
|
243
|
+
else if (coverage.overall < 80) {
|
|
244
|
+
checks.push(warn('coverage', 'Coverage', `Overall score ${coverage.overall}/100.`, 'Run `shrk coverage` and follow the recommendations to fill remaining gaps.'));
|
|
245
|
+
}
|
|
246
|
+
else {
|
|
247
|
+
checks.push(pass('coverage', 'Coverage', `Overall score ${coverage.overall}/100.`));
|
|
248
|
+
}
|
|
249
|
+
// 3. Safety audit — delegated to `shrk safety audit` (requires CLI catalog).
|
|
250
|
+
checks.push(pass('safety-audit', 'Safety audit', 'Delegated to `shrk safety audit` — the readiness gate trusts the standalone audit.'));
|
|
251
|
+
// 4. Pack doctor + release-check
|
|
252
|
+
try {
|
|
253
|
+
const packReport = buildPackDoctorReport(inspection, { requireSignatures: false });
|
|
254
|
+
const releaseChecks = await runPackReleaseChecksForReport(inspection);
|
|
255
|
+
mergePackReleaseChecks(inspection, packReport, releaseChecks, { strict });
|
|
256
|
+
if (packReport.summary.errors > 0) {
|
|
257
|
+
checks.push(fail('pack-doctor', 'Pack doctor (release-aware)', `${packReport.summary.errors} errors across ${packReport.packsChecked} pack(s).`, 'Run `shrk packs doctor --release --strict` to see suggested fixes.'));
|
|
258
|
+
}
|
|
259
|
+
else if (packReport.summary.warnings > 0) {
|
|
260
|
+
checks.push(warn('pack-doctor', 'Pack doctor (release-aware)', `${packReport.summary.warnings} warning(s) across ${packReport.packsChecked} pack(s).`));
|
|
261
|
+
}
|
|
262
|
+
else {
|
|
263
|
+
checks.push(pass('pack-doctor', 'Pack doctor (release-aware)', `${packReport.packsChecked} pack(s) clean.`));
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
catch (e) {
|
|
267
|
+
checks.push(skip('pack-doctor', 'Pack doctor (release-aware)', `Skipped: ${e.message}`));
|
|
268
|
+
}
|
|
269
|
+
// 5. Docs presence (canonical docs)
|
|
270
|
+
const docsDir = nodePath.join(projectRoot, 'docs');
|
|
271
|
+
const requiredDocs = ['overview.md', 'philosophy.md', 'safety-model.md', 'testing.md'];
|
|
272
|
+
const missingDocs = requiredDocs.filter((d) => !existsSync(nodePath.join(docsDir, d)));
|
|
273
|
+
if (missingDocs.length > 0) {
|
|
274
|
+
checks.push(warn('docs', 'Canonical docs', `Missing: ${missingDocs.join(', ')}`));
|
|
275
|
+
}
|
|
276
|
+
else {
|
|
277
|
+
checks.push(pass('docs', 'Canonical docs', `${requiredDocs.length} required doc(s) present.`));
|
|
278
|
+
}
|
|
279
|
+
// 6. README + package.json + examples
|
|
280
|
+
checks.push(checkReadmeRequiredSections(projectRoot));
|
|
281
|
+
checks.push(checkPackageMetadata(projectRoot));
|
|
282
|
+
checks.push(checkExamplesPresent(projectRoot));
|
|
283
|
+
// 6a. Pack signature release-readiness gate.
|
|
284
|
+
// FAIL CLOSED on any dev-signed pack when SHARKCRAFT_PACK_SECRET is unset.
|
|
285
|
+
// Dev signatures verify locally but are never release-trusted.
|
|
286
|
+
try {
|
|
287
|
+
checks.push(buildPackSignatureReleaseGate(inspection));
|
|
288
|
+
}
|
|
289
|
+
catch (e) {
|
|
290
|
+
checks.push(skip('pack-signature-release', 'Pack signatures (release-readiness)', `Skipped: ${e.message}`));
|
|
291
|
+
}
|
|
292
|
+
// 7. Optional preflight summary fold-in (auto-discover supported).
|
|
293
|
+
const preflightFile = resolvePreflightFile(projectRoot, options.preflightSummaryFile);
|
|
294
|
+
checks.push(checkPreflightSummary(preflightFile));
|
|
295
|
+
// 7a. release notes presence (strict mode treats missing as blocker).
|
|
296
|
+
const versionFile = (() => {
|
|
297
|
+
try {
|
|
298
|
+
const pkg = JSON.parse(readFileSync(nodePath.join(projectRoot, 'package.json'), 'utf8'));
|
|
299
|
+
return pkg.version ?? null;
|
|
300
|
+
}
|
|
301
|
+
catch {
|
|
302
|
+
return null;
|
|
303
|
+
}
|
|
304
|
+
})();
|
|
305
|
+
const releaseNotesDir = nodePath.join(projectRoot, 'docs', 'releases');
|
|
306
|
+
const releaseNotesFile = versionFile ? nodePath.join(releaseNotesDir, `${versionFile}.md`) : null;
|
|
307
|
+
const releaseNotesAlpha = nodePath.join(releaseNotesDir, '0.1.0-alpha.2.md');
|
|
308
|
+
const limitsFile = nodePath.join(projectRoot, 'docs', 'public-alpha-limitations.md');
|
|
309
|
+
const externalQuickstart = nodePath.join(projectRoot, 'docs', 'external-repo-quickstart.md');
|
|
310
|
+
const releaseNotesExists = (releaseNotesFile && existsSync(releaseNotesFile)) || existsSync(releaseNotesAlpha);
|
|
311
|
+
if (!releaseNotesExists) {
|
|
312
|
+
checks.push(warn('release-notes', 'Public alpha release notes', `Missing docs/releases/${versionFile ?? '<version>'}.md or docs/releases/0.1.0-alpha.2.md`, 'Add release notes — strict release readiness treats this as a blocker.'));
|
|
313
|
+
}
|
|
314
|
+
else {
|
|
315
|
+
checks.push(pass('release-notes', 'Public alpha release notes', 'Release notes file present.'));
|
|
316
|
+
}
|
|
317
|
+
if (!existsSync(limitsFile)) {
|
|
318
|
+
checks.push(warn('public-alpha-limitations', 'Public alpha limitations doc', 'Missing docs/public-alpha-limitations.md', 'List the known limitations adopters should be aware of.'));
|
|
319
|
+
}
|
|
320
|
+
else {
|
|
321
|
+
checks.push(pass('public-alpha-limitations', 'Public alpha limitations doc', 'Limitations doc present.'));
|
|
322
|
+
}
|
|
323
|
+
if (!existsSync(externalQuickstart)) {
|
|
324
|
+
checks.push(warn('external-quickstart', 'External repo quickstart', 'Missing docs/external-repo-quickstart.md', 'Add a 5-minute external-adopter quickstart.'));
|
|
325
|
+
}
|
|
326
|
+
else {
|
|
327
|
+
checks.push(pass('external-quickstart', 'External repo quickstart', 'Quickstart doc present.'));
|
|
328
|
+
}
|
|
329
|
+
const changelogFile = nodePath.join(projectRoot, 'CHANGELOG.md');
|
|
330
|
+
if (!existsSync(changelogFile)) {
|
|
331
|
+
checks.push(warn('changelog', 'CHANGELOG.md', 'CHANGELOG.md missing at project root.'));
|
|
332
|
+
}
|
|
333
|
+
else {
|
|
334
|
+
checks.push(pass('changelog', 'CHANGELOG.md', 'CHANGELOG.md present.'));
|
|
335
|
+
}
|
|
336
|
+
// 7b. optional docs check + examples check fold-in.
|
|
337
|
+
if (options.includeDocsCheck) {
|
|
338
|
+
const docs = buildDocsCheck(projectRoot);
|
|
339
|
+
if (!docs.ok) {
|
|
340
|
+
const errs = docs.findings.filter((f) => f.severity === 'error');
|
|
341
|
+
checks.push(fail('docs-check', 'Docs check', `${errs.length} blocking finding(s); run \`shrk docs check\` for details.`, 'shrk docs check'));
|
|
342
|
+
}
|
|
343
|
+
else if (docs.findings.some((f) => f.severity === 'warning')) {
|
|
344
|
+
checks.push(warn('docs-check', 'Docs check', 'Docs check reports warnings.', 'shrk docs check'));
|
|
345
|
+
}
|
|
346
|
+
else {
|
|
347
|
+
checks.push(pass('docs-check', 'Docs check', 'README + canonical docs look fine.'));
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
if (options.includeExamplesCheck) {
|
|
351
|
+
const ex = buildExamplesCheck(projectRoot);
|
|
352
|
+
if (!ex.ok) {
|
|
353
|
+
checks.push(fail('examples-check', 'Examples check', `Examples check found ${ex.findings.filter((f) => f.severity === 'error').length} error(s).`, 'shrk examples check'));
|
|
354
|
+
}
|
|
355
|
+
else if (ex.findings.some((f) => f.severity === 'warning')) {
|
|
356
|
+
checks.push(warn('examples-check', 'Examples check', 'Examples check reports warnings.', 'shrk examples check'));
|
|
357
|
+
}
|
|
358
|
+
else {
|
|
359
|
+
checks.push(pass('examples-check', 'Examples check', `${ex.examples.length} example(s) look fine.`));
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
// 8. MCP no-write audit — assert by static knowledge: tools index has no write tools.
|
|
363
|
+
// We can't run the MCP server here, but every tool we register goes through the
|
|
364
|
+
// ALL_TOOLS array; a separate test asserts the audit list matches runtime.
|
|
365
|
+
checks.push(pass('mcp-no-write', 'MCP read-only contract', 'No write tools registered (see packages/mcp-server/src/tools/index.ts).'));
|
|
366
|
+
// Apply strict severity escalation.
|
|
367
|
+
for (const c of checks)
|
|
368
|
+
c.severity = severityFor(c.status, strict);
|
|
369
|
+
const blockers = checks.filter((c) => c.severity === ReleaseReadinessSeverity.Error);
|
|
370
|
+
const warnings = checks.filter((c) => c.severity === ReleaseReadinessSeverity.Warning);
|
|
371
|
+
const passed = checks.filter((c) => c.status === 'pass');
|
|
372
|
+
const skipped = checks.filter((c) => c.status === 'skipped');
|
|
373
|
+
const ready = blockers.length === 0;
|
|
374
|
+
const checklist = [
|
|
375
|
+
'shrk doctor → green',
|
|
376
|
+
'shrk commands doctor → 0 errors / 0 warnings',
|
|
377
|
+
'shrk safety audit → no error findings',
|
|
378
|
+
'shrk coverage → green',
|
|
379
|
+
'shrk packs doctor --release --strict → green',
|
|
380
|
+
'bun x tsc -p tsconfig.base.json --noEmit → clean',
|
|
381
|
+
'bun test → all green',
|
|
382
|
+
'bun run release:preflight → all required steps passed',
|
|
383
|
+
'README.md has Quick demo + Onboard sections',
|
|
384
|
+
'package.json has name/version/license/repository',
|
|
385
|
+
];
|
|
386
|
+
return {
|
|
387
|
+
schema: RELEASE_READINESS_SCHEMA,
|
|
388
|
+
generatedAt: new Date().toISOString(),
|
|
389
|
+
projectRoot,
|
|
390
|
+
ready,
|
|
391
|
+
strict,
|
|
392
|
+
blockers,
|
|
393
|
+
warnings,
|
|
394
|
+
passed,
|
|
395
|
+
skipped,
|
|
396
|
+
checklist,
|
|
397
|
+
};
|
|
398
|
+
}
|
|
399
|
+
/** Render a release readiness report as JS-free HTML. */
|
|
400
|
+
export function renderReleaseReadinessHtml(report) {
|
|
401
|
+
const verdict = report.ready ? 'READY ✓' : 'NOT READY ✕';
|
|
402
|
+
const sev = (s) => s.toUpperCase();
|
|
403
|
+
function esc(s) {
|
|
404
|
+
return s.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');
|
|
405
|
+
}
|
|
406
|
+
function block(title, items) {
|
|
407
|
+
if (items.length === 0)
|
|
408
|
+
return '';
|
|
409
|
+
const rows = items
|
|
410
|
+
.map((c) => `<tr><td>${esc(c.id)}</td><td>${esc(c.title)}</td><td>${esc(sev(c.status))}</td><td>${esc(c.message)}</td><td>${esc(c.suggestion ?? '')}</td></tr>`)
|
|
411
|
+
.join('\n');
|
|
412
|
+
return `<h2>${esc(title)} (${items.length})</h2>
|
|
413
|
+
<table><thead><tr><th>id</th><th>title</th><th>status</th><th>message</th><th>suggestion</th></tr></thead>
|
|
414
|
+
<tbody>${rows}</tbody></table>`;
|
|
415
|
+
}
|
|
416
|
+
const checklist = report.checklist.map((s) => `<li>${esc(s)}</li>`).join('');
|
|
417
|
+
return `<!doctype html><html><head><meta charset="utf-8"><title>Release readiness — ${esc(verdict)}</title>
|
|
418
|
+
<style>
|
|
419
|
+
body{font:14px/1.5 -apple-system,system-ui,sans-serif;max-width:920px;margin:24px auto;padding:0 16px;color:#1a1a1a;background:#fff}
|
|
420
|
+
h1{font-size:24px}h2{font-size:18px;margin-top:24px;border-bottom:1px solid #e1e4e8;padding-bottom:4px}
|
|
421
|
+
.muted{color:#586069}
|
|
422
|
+
.verdict{display:inline-block;padding:4px 12px;border-radius:6px;font-weight:600}
|
|
423
|
+
.ready{background:#e6f4ea;color:#1a7f37}
|
|
424
|
+
.notready{background:#ffeef0;color:#b31d28}
|
|
425
|
+
table{border-collapse:collapse;width:100%}
|
|
426
|
+
th,td{padding:6px 10px;border:1px solid #d0d7de;text-align:left}
|
|
427
|
+
th{background:#f6f8fa}
|
|
428
|
+
@media (prefers-color-scheme: dark){body{background:#0d1117;color:#c9d1d9}th{background:#161b22}.muted{color:#8b949e}.ready{background:#0f5132;color:#a7f3d0}.notready{background:#3f1620;color:#fda4af}}
|
|
429
|
+
</style></head><body>
|
|
430
|
+
<h1>Release readiness <span class="verdict ${report.ready ? 'ready' : 'notready'}">${esc(verdict)}</span></h1>
|
|
431
|
+
<p class="muted">${esc(report.projectRoot)} · generated ${esc(report.generatedAt)} · strict=${report.strict}</p>
|
|
432
|
+
${block('Blockers', report.blockers)}
|
|
433
|
+
${block('Warnings', report.warnings)}
|
|
434
|
+
${block('Passed', report.passed)}
|
|
435
|
+
${block('Skipped', report.skipped)}
|
|
436
|
+
<h2>Checklist</h2><ol>${checklist}</ol>
|
|
437
|
+
</body></html>
|
|
438
|
+
`;
|
|
439
|
+
}
|
|
440
|
+
/**
|
|
441
|
+
* Extract the pack-signature release gate so it can be unit-tested
|
|
442
|
+
* without invoking the full release-readiness pipeline (which runs doctor +
|
|
443
|
+
* coverage and needs a full inspection shape).
|
|
444
|
+
*/
|
|
445
|
+
export function buildPackSignatureReleaseGate(inspection) {
|
|
446
|
+
const sigReport = buildPackSignatureStatusReport(inspection);
|
|
447
|
+
const devPacks = sigReport.packs.filter((p) => p.dev === true);
|
|
448
|
+
const secretAvailable = sigReport.secretAvailable;
|
|
449
|
+
if (devPacks.length === 0) {
|
|
450
|
+
return pass('pack-signature-release', 'Pack signatures (release-readiness)', `No dev-signed packs (release secret ${secretAvailable ? 'available' : 'not set'}).`);
|
|
451
|
+
}
|
|
452
|
+
if (secretAvailable) {
|
|
453
|
+
return warn('pack-signature-release', 'Pack signatures (release-readiness)', `${devPacks.length} dev-signed pack(s): ${devPacks.map((p) => p.packageName).join(', ')}. Release secret is available — re-sign before tagging.`, `Run \`shrk packs sign <pack>\` (no --dev) for each pack to produce a release signature.`);
|
|
454
|
+
}
|
|
455
|
+
return fail('pack-signature-release', 'Pack signatures (release-readiness)', `${devPacks.length} dev-signed pack(s) and SHARKCRAFT_PACK_SECRET is not set. Release would publish dev signatures.`, `Set SHARKCRAFT_PACK_SECRET in env, then run \`shrk packs sign <pack>\` (no --dev) for: ${devPacks.map((p) => p.packageName).join(', ')}.`);
|
|
456
|
+
}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Release smoke harness.
|
|
3
|
+
*
|
|
4
|
+
* Runs a safe, local, deterministic smoke suite against SharkCraft's own
|
|
5
|
+
* surfaces. The harness does NOT execute external commands itself — it
|
|
6
|
+
* declares the scenarios in a structured form so the CLI can run them
|
|
7
|
+
* with the inherited environment, and validates expected artifacts.
|
|
8
|
+
*
|
|
9
|
+
* This module is the planner. The CLI command wires it to actual `bun`
|
|
10
|
+
* subprocess invocations under a temp fixture root.
|
|
11
|
+
*
|
|
12
|
+
* Constraints (must hold):
|
|
13
|
+
* - never publishes
|
|
14
|
+
* - never calls the network
|
|
15
|
+
* - never calls external APIs
|
|
16
|
+
* - never runs `rm -rf`, `dd`, `mkfs`
|
|
17
|
+
* - writes only under the per-scenario temp dir (or the user-specified --temp-dir)
|
|
18
|
+
*/
|
|
19
|
+
export declare const RELEASE_SMOKE_SCHEMA = "sharkcraft.release-smoke/v1";
|
|
20
|
+
export type SmokeScenarioId = 'unconfigured-repo' | 'dev-workflow' | 'pr-review' | 'governance' | 'pack-authoring';
|
|
21
|
+
export type SmokeAssertionType = 'stdout-contains' | 'stderr-not-contains' | 'json-path-exists' | 'file-exists' | 'file-contains' | 'output-not-empty';
|
|
22
|
+
export interface ISmokeAssertion {
|
|
23
|
+
type: SmokeAssertionType;
|
|
24
|
+
/** Pattern (stdout/stderr/file-contains) or path-relative-to-fixture (file-exists). */
|
|
25
|
+
value?: string;
|
|
26
|
+
/** Dotted path for json-path-exists (e.g. `summary.totalChanges`). */
|
|
27
|
+
jsonPath?: string;
|
|
28
|
+
/** When true, capture step stdout, parse as JSON, then walk jsonPath. */
|
|
29
|
+
fromStdoutJson?: boolean;
|
|
30
|
+
/** Relative path within fixture root (file-exists / file-contains). */
|
|
31
|
+
file?: string;
|
|
32
|
+
/** When true, failure marks the step as failed. Default true. */
|
|
33
|
+
required?: boolean;
|
|
34
|
+
/** Human note shown in the report. */
|
|
35
|
+
note?: string;
|
|
36
|
+
}
|
|
37
|
+
export interface ISmokeStep {
|
|
38
|
+
/** Short human-readable label for the step. */
|
|
39
|
+
title: string;
|
|
40
|
+
/** Command tokens (NOT a shell string). Used to spawn directly. */
|
|
41
|
+
command: readonly string[];
|
|
42
|
+
/** Allowed exit codes (defaults to [0]). */
|
|
43
|
+
allowedExitCodes?: readonly number[];
|
|
44
|
+
/** Files/directories that must exist after the step (relative to fixtureRoot). */
|
|
45
|
+
expectArtifacts?: readonly string[];
|
|
46
|
+
/** Files/directories that must NOT exist after the step (safety guard). */
|
|
47
|
+
forbidArtifacts?: readonly string[];
|
|
48
|
+
/** Content assertions evaluated after the step finishes. */
|
|
49
|
+
assertions?: readonly ISmokeAssertion[];
|
|
50
|
+
/** Note for reviewers — shown verbatim. */
|
|
51
|
+
notes?: string;
|
|
52
|
+
}
|
|
53
|
+
export interface ISmokeAssertionResult {
|
|
54
|
+
assertion: ISmokeAssertion;
|
|
55
|
+
status: 'pass' | 'fail' | 'skipped';
|
|
56
|
+
detail?: string;
|
|
57
|
+
}
|
|
58
|
+
export interface ISmokeScenario {
|
|
59
|
+
id: SmokeScenarioId;
|
|
60
|
+
title: string;
|
|
61
|
+
description: string;
|
|
62
|
+
/** Setup steps that prepare the fixture before the scenario runs. */
|
|
63
|
+
setup: readonly ISmokeStep[];
|
|
64
|
+
/** Main steps. */
|
|
65
|
+
steps: readonly ISmokeStep[];
|
|
66
|
+
/** Expected artifact directories at the end of the run. */
|
|
67
|
+
expectArtifacts: readonly string[];
|
|
68
|
+
}
|
|
69
|
+
export interface ISmokeStepResult {
|
|
70
|
+
step: ISmokeStep;
|
|
71
|
+
startedAt: string;
|
|
72
|
+
finishedAt: string;
|
|
73
|
+
durationMs: number;
|
|
74
|
+
exitCode: number | null;
|
|
75
|
+
status: 'pass' | 'fail' | 'skipped';
|
|
76
|
+
stdoutTail: string;
|
|
77
|
+
stderrTail: string;
|
|
78
|
+
artifactsFound: readonly string[];
|
|
79
|
+
artifactsMissing: readonly string[];
|
|
80
|
+
forbiddenArtifactsFound: readonly string[];
|
|
81
|
+
/** Per-assertion results. */
|
|
82
|
+
assertionResults?: readonly ISmokeAssertionResult[];
|
|
83
|
+
}
|
|
84
|
+
export interface ISmokeScenarioResult {
|
|
85
|
+
scenarioId: SmokeScenarioId;
|
|
86
|
+
fixtureRoot: string;
|
|
87
|
+
startedAt: string;
|
|
88
|
+
finishedAt: string;
|
|
89
|
+
durationMs: number;
|
|
90
|
+
status: 'pass' | 'fail';
|
|
91
|
+
steps: readonly ISmokeStepResult[];
|
|
92
|
+
}
|
|
93
|
+
export interface IReleaseSmokeReport {
|
|
94
|
+
schema: typeof RELEASE_SMOKE_SCHEMA;
|
|
95
|
+
generatedAt: string;
|
|
96
|
+
scenarios: readonly ISmokeScenarioResult[];
|
|
97
|
+
totalDurationMs: number;
|
|
98
|
+
passed: boolean;
|
|
99
|
+
}
|
|
100
|
+
export declare function listSmokeScenarios(): SmokeScenarioId[];
|
|
101
|
+
export declare function getSmokeScenario(id: SmokeScenarioId): ISmokeScenario;
|
|
102
|
+
export declare function pickScenarios(scope: SmokeScenarioId | 'all'): ISmokeScenario[];
|
|
103
|
+
export interface IFixtureCreateInput {
|
|
104
|
+
scenarioId: SmokeScenarioId;
|
|
105
|
+
baseDir?: string;
|
|
106
|
+
/** When true, do not delete fixtures after the scenario runs. */
|
|
107
|
+
keep?: boolean;
|
|
108
|
+
}
|
|
109
|
+
export interface IFixtureCreateResult {
|
|
110
|
+
fixtureRoot: string;
|
|
111
|
+
keep: boolean;
|
|
112
|
+
}
|
|
113
|
+
export declare function createFixtureRoot(input: IFixtureCreateInput): IFixtureCreateResult;
|
|
114
|
+
/** Recursively collect file paths inside a fixture (deterministic order). */
|
|
115
|
+
export declare function collectFixtureFiles(root: string): string[];
|
|
116
|
+
export declare function assertSafeWrites(files: readonly string[]): string[];
|
|
117
|
+
/** Render the smoke report as plain text. */
|
|
118
|
+
export declare function renderSmokeReportText(report: IReleaseSmokeReport): string;
|
|
119
|
+
export declare function renderSmokeReportMarkdown(report: IReleaseSmokeReport): string;
|
|
120
|
+
export declare function renderSmokeReportHtml(report: IReleaseSmokeReport): string;
|
|
121
|
+
export declare function renderSmokeReport(report: IReleaseSmokeReport, format: 'text' | 'markdown' | 'html' | 'json'): string;
|
|
122
|
+
/** Used by the CLI to confirm the fixture dir was prepared cleanly. */
|
|
123
|
+
export declare function fixtureSummary(root: string): {
|
|
124
|
+
exists: boolean;
|
|
125
|
+
fileCount: number;
|
|
126
|
+
files: readonly string[];
|
|
127
|
+
};
|
|
128
|
+
export interface IEvaluateAssertionInput {
|
|
129
|
+
assertion: ISmokeAssertion;
|
|
130
|
+
stdout: string;
|
|
131
|
+
stderr: string;
|
|
132
|
+
fixtureRoot: string;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Evaluate a single assertion. Pure — uses fs only for `file-*` types.
|
|
136
|
+
*/
|
|
137
|
+
export declare function evaluateSmokeAssertion(input: IEvaluateAssertionInput): ISmokeAssertionResult;
|
|
138
|
+
//# sourceMappingURL=release-smoke.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"release-smoke.d.ts","sourceRoot":"","sources":["../src/release-smoke.ts"],"names":[],"mappings":"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"}
|