@shrkcrft/inspector 0.1.0-alpha.30 → 0.1.0-alpha.31
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/dist/acceptance-replay.js +1 -1
- package/dist/agent-contract-templates.js +6 -6
- package/dist/agent-contract.d.ts.map +1 -1
- package/dist/agent-contract.js +13 -8
- package/dist/agent-orchestration.js +2 -2
- package/dist/agent-task-prep.d.ts +16 -0
- package/dist/agent-task-prep.d.ts.map +1 -1
- package/dist/agent-task-prep.js +51 -4
- package/dist/ai-readiness.d.ts.map +1 -1
- package/dist/ai-readiness.js +21 -3
- package/dist/architecture-map.d.ts +16 -0
- package/dist/architecture-map.d.ts.map +1 -1
- package/dist/architecture-map.js +42 -26
- package/dist/area-explore.d.ts +2 -2
- package/dist/area-explore.d.ts.map +1 -1
- package/dist/area-explore.js +36 -16
- package/dist/area-map.d.ts +56 -11
- package/dist/area-map.d.ts.map +1 -1
- package/dist/area-map.js +106 -25
- package/dist/asset-doctor-proposed-exit.d.ts +21 -0
- package/dist/asset-doctor-proposed-exit.d.ts.map +1 -0
- package/dist/asset-doctor-proposed-exit.js +22 -0
- package/dist/asset-provenance.js +1 -1
- package/dist/boundaries-changed-only.d.ts +24 -1
- package/dist/boundaries-changed-only.d.ts.map +1 -1
- package/dist/boundaries-changed-only.js +12 -2
- package/dist/boundary-check-options.model.d.ts +40 -0
- package/dist/boundary-check-options.model.d.ts.map +1 -0
- package/dist/boundary-check-options.model.js +1 -0
- package/dist/boundary-check-result.model.d.ts +89 -0
- package/dist/boundary-check-result.model.d.ts.map +1 -0
- package/dist/boundary-check-result.model.js +1 -0
- package/dist/boundary-configuration-status.d.ts +38 -0
- package/dist/boundary-configuration-status.d.ts.map +1 -0
- package/dist/boundary-configuration-status.js +118 -0
- package/dist/boundary-configuration-status.model.d.ts +37 -0
- package/dist/boundary-configuration-status.model.d.ts.map +1 -0
- package/dist/boundary-configuration-status.model.js +1 -0
- package/dist/boundary-load-issue.model.d.ts +30 -0
- package/dist/boundary-load-issue.model.d.ts.map +1 -0
- package/dist/boundary-load-issue.model.js +1 -0
- package/dist/boundary-rule-check.model.d.ts +44 -0
- package/dist/boundary-rule-check.model.d.ts.map +1 -0
- package/dist/boundary-rule-check.model.js +1 -0
- package/dist/boundary-rule-invalidation.model.d.ts +31 -0
- package/dist/boundary-rule-invalidation.model.d.ts.map +1 -0
- package/dist/boundary-rule-invalidation.model.js +1 -0
- package/dist/boundary-rule-set-diff.model.d.ts +75 -0
- package/dist/boundary-rule-set-diff.model.d.ts.map +1 -0
- package/dist/boundary-rule-set-diff.model.js +1 -0
- package/dist/boundary-rule-sources.d.ts +28 -0
- package/dist/boundary-rule-sources.d.ts.map +1 -0
- package/dist/boundary-rule-sources.js +110 -0
- package/dist/boundary-stale-exception-finding.model.d.ts +12 -0
- package/dist/boundary-stale-exception-finding.model.d.ts.map +1 -0
- package/dist/boundary-stale-exception-finding.model.js +1 -0
- package/dist/boundary-unit-liveness.d.ts +35 -0
- package/dist/boundary-unit-liveness.d.ts.map +1 -0
- package/dist/boundary-unit-liveness.js +71 -0
- package/dist/change-intent.d.ts +3 -0
- package/dist/change-intent.d.ts.map +1 -1
- package/dist/change-intent.js +61 -27
- package/dist/changes-summary.d.ts.map +1 -1
- package/dist/changes-summary.js +19 -9
- package/dist/ci-integrity-report.js +1 -1
- package/dist/ci-predict.d.ts.map +1 -1
- package/dist/ci-predict.js +38 -5
- package/dist/code-intelligence-doctor.d.ts +6 -0
- package/dist/code-intelligence-doctor.d.ts.map +1 -1
- package/dist/code-intelligence-doctor.js +22 -7
- package/dist/command-recommender.d.ts +45 -2
- package/dist/command-recommender.d.ts.map +1 -1
- package/dist/command-recommender.js +41 -263
- package/dist/command-resolution-status.d.ts +44 -0
- package/dist/command-resolution-status.d.ts.map +1 -0
- package/dist/command-resolution-status.js +44 -0
- package/dist/command-safety-level.d.ts +15 -0
- package/dist/command-safety-level.d.ts.map +1 -0
- package/dist/command-safety-level.js +43 -0
- package/dist/command-taxonomy.js +1 -1
- package/dist/compliance-evidence.js +1 -1
- package/dist/compliance-profiles.js +1 -1
- package/dist/construct-registry.d.ts +40 -0
- package/dist/construct-registry.d.ts.map +1 -1
- package/dist/construct-registry.js +186 -82
- package/dist/context-tuning.d.ts +4 -0
- package/dist/context-tuning.d.ts.map +1 -1
- package/dist/context-tuning.js +10 -7
- package/dist/contract-template-registry.d.ts +10 -0
- package/dist/contract-template-registry.d.ts.map +1 -1
- package/dist/contract-template-registry.js +59 -33
- package/dist/contribution-kind.d.ts +52 -0
- package/dist/contribution-kind.d.ts.map +1 -0
- package/dist/contribution-kind.js +52 -0
- package/dist/contribution-load-failures.d.ts +106 -0
- package/dist/contribution-load-failures.d.ts.map +1 -0
- package/dist/contribution-load-failures.js +575 -0
- package/dist/contributions-report.d.ts +28 -0
- package/dist/contributions-report.d.ts.map +1 -0
- package/dist/contributions-report.js +242 -0
- package/dist/convention-registry.d.ts +22 -0
- package/dist/convention-registry.d.ts.map +1 -1
- package/dist/convention-registry.js +79 -39
- package/dist/coverage-report.d.ts.map +1 -1
- package/dist/coverage-report.js +6 -6
- package/dist/custom-checks.d.ts +60 -1
- package/dist/custom-checks.d.ts.map +1 -1
- package/dist/custom-checks.js +159 -6
- package/dist/dashboard/dashboard-data.d.ts +6 -0
- package/dist/dashboard/dashboard-data.d.ts.map +1 -1
- package/dist/dashboard/dashboard-data.js +99 -8
- package/dist/dashboard/dashboard-knowledge.d.ts.map +1 -1
- package/dist/dashboard/dashboard-knowledge.js +14 -2
- package/dist/decision-records.d.ts +20 -0
- package/dist/decision-records.d.ts.map +1 -1
- package/dist/decision-records.js +68 -20
- package/dist/declared-cross-references.d.ts +61 -0
- package/dist/declared-cross-references.d.ts.map +1 -0
- package/dist/declared-cross-references.js +550 -0
- package/dist/declared-gate-plane-rules.d.ts +24 -0
- package/dist/declared-gate-plane-rules.d.ts.map +1 -0
- package/dist/declared-gate-plane-rules.js +39 -0
- package/dist/declared-reference-coverage.d.ts +27 -0
- package/dist/declared-reference-coverage.d.ts.map +1 -0
- package/dist/declared-reference-coverage.js +50 -0
- package/dist/declared-xref-status.d.ts +19 -0
- package/dist/declared-xref-status.d.ts.map +1 -0
- package/dist/declared-xref-status.js +19 -0
- package/dist/delegate-pack-recipes.d.ts +13 -2
- package/dist/delegate-pack-recipes.d.ts.map +1 -1
- package/dist/delegate-pack-recipes.js +45 -14
- package/dist/demo-package.js +2 -2
- package/dist/demo-script.js +2 -2
- package/dist/demo-workflow.js +3 -3
- package/dist/dev-cycle.js +1 -1
- package/dist/dev-session.js +1 -1
- package/dist/doc-references.d.ts +23 -2
- package/dist/doc-references.d.ts.map +1 -1
- package/dist/doc-references.js +96 -17
- package/dist/doctor-result.d.ts +8 -0
- package/dist/doctor-result.d.ts.map +1 -1
- package/dist/doctor-verdict-kind.d.ts +19 -0
- package/dist/doctor-verdict-kind.d.ts.map +1 -0
- package/dist/doctor-verdict-kind.js +19 -0
- package/dist/doctor-verdict.d.ts +18 -0
- package/dist/doctor-verdict.d.ts.map +1 -0
- package/dist/doctor-verdict.js +28 -0
- package/dist/drift.d.ts +17 -0
- package/dist/drift.d.ts.map +1 -1
- package/dist/drift.js +40 -10
- package/dist/entrypoint-matrix.d.ts.map +1 -1
- package/dist/entrypoint-matrix.js +4 -1
- package/dist/feedback-ingestion.d.ts +28 -2
- package/dist/feedback-ingestion.d.ts.map +1 -1
- package/dist/feedback-ingestion.js +68 -19
- package/dist/fix-preview.d.ts.map +1 -1
- package/dist/fix-preview.js +9 -5
- package/dist/framework-extractor-outcomes.d.ts +27 -0
- package/dist/framework-extractor-outcomes.d.ts.map +1 -0
- package/dist/framework-extractor-outcomes.js +83 -0
- package/dist/fuzzy-impact.js +1 -1
- package/dist/healing-plan.d.ts.map +1 -1
- package/dist/healing-plan.js +3 -4
- package/dist/helper-catalog.d.ts +25 -0
- package/dist/helper-catalog.d.ts.map +1 -0
- package/dist/helper-catalog.js +91 -0
- package/dist/helper-registry.d.ts.map +1 -1
- package/dist/helper-registry.js +17 -1
- package/dist/helper-view.d.ts +33 -0
- package/dist/helper-view.d.ts.map +1 -0
- package/dist/helper-view.js +1 -0
- package/dist/i-asset-doctor-flags.d.ts +16 -0
- package/dist/i-asset-doctor-flags.d.ts.map +1 -0
- package/dist/i-asset-doctor-flags.js +1 -0
- package/dist/i-command-resolution.d.ts +22 -0
- package/dist/i-command-resolution.d.ts.map +1 -0
- package/dist/i-command-resolution.js +1 -0
- package/dist/i-command-resolve-options.d.ts +24 -0
- package/dist/i-command-resolve-options.d.ts.map +1 -0
- package/dist/i-command-resolve-options.js +1 -0
- package/dist/i-command-safety.d.ts +13 -0
- package/dist/i-command-safety.d.ts.map +1 -0
- package/dist/i-command-safety.js +1 -0
- package/dist/i-contribution-accepted-entry.d.ts +18 -0
- package/dist/i-contribution-accepted-entry.d.ts.map +1 -0
- package/dist/i-contribution-accepted-entry.js +1 -0
- package/dist/i-contribution-entry-rejection.d.ts +21 -0
- package/dist/i-contribution-entry-rejection.d.ts.map +1 -0
- package/dist/i-contribution-entry-rejection.js +1 -0
- package/dist/i-contribution-file-issue.d.ts +18 -0
- package/dist/i-contribution-file-issue.d.ts.map +1 -0
- package/dist/i-contribution-file-issue.js +1 -0
- package/dist/i-contribution-file-report.d.ts +40 -0
- package/dist/i-contribution-file-report.d.ts.map +1 -0
- package/dist/i-contribution-file-report.js +1 -0
- package/dist/i-contribution-file-validation.d.ts +24 -0
- package/dist/i-contribution-file-validation.d.ts.map +1 -0
- package/dist/i-contribution-file-validation.js +1 -0
- package/dist/i-contributions-report.d.ts +31 -0
- package/dist/i-contributions-report.d.ts.map +1 -0
- package/dist/i-contributions-report.js +1 -0
- package/dist/i-declared-xref-field.d.ts +25 -0
- package/dist/i-declared-xref-field.d.ts.map +1 -0
- package/dist/i-declared-xref-field.js +1 -0
- package/dist/i-declared-xref-issue.d.ts +25 -0
- package/dist/i-declared-xref-issue.d.ts.map +1 -0
- package/dist/i-declared-xref-issue.js +1 -0
- package/dist/i-declared-xref-report.d.ts +48 -0
- package/dist/i-declared-xref-report.d.ts.map +1 -0
- package/dist/i-declared-xref-report.js +1 -0
- package/dist/i-declared-xref-row.d.ts +29 -0
- package/dist/i-declared-xref-row.d.ts.map +1 -0
- package/dist/i-declared-xref-row.js +1 -0
- package/dist/i-doctor-verdict.d.ts +10 -0
- package/dist/i-doctor-verdict.d.ts.map +1 -0
- package/dist/i-doctor-verdict.js +1 -0
- package/dist/i-kind-outcomes.d.ts +13 -0
- package/dist/i-kind-outcomes.d.ts.map +1 -0
- package/dist/i-kind-outcomes.js +1 -0
- package/dist/i-pack-doctor-verdict.d.ts +15 -0
- package/dist/i-pack-doctor-verdict.d.ts.map +1 -0
- package/dist/i-pack-doctor-verdict.js +1 -0
- package/dist/i-probed-id-field.d.ts +17 -0
- package/dist/i-probed-id-field.d.ts.map +1 -0
- package/dist/i-probed-id-field.js +1 -0
- package/dist/i-reference-kind-declaration.d.ts +38 -0
- package/dist/i-reference-kind-declaration.d.ts.map +1 -0
- package/dist/i-reference-kind-declaration.js +1 -0
- package/dist/i-reference-warm-options.d.ts +21 -0
- package/dist/i-reference-warm-options.d.ts.map +1 -0
- package/dist/i-reference-warm-options.js +1 -0
- package/dist/i-registry-outcomes.d.ts +16 -0
- package/dist/i-registry-outcomes.d.ts.map +1 -0
- package/dist/i-registry-outcomes.js +1 -0
- package/dist/i-scaffold-pattern-doctor-report.d.ts +35 -0
- package/dist/i-scaffold-pattern-doctor-report.d.ts.map +1 -0
- package/dist/i-scaffold-pattern-doctor-report.js +1 -0
- package/dist/i-search-tuning-key-probe.d.ts +30 -0
- package/dist/i-search-tuning-key-probe.d.ts.map +1 -0
- package/dist/i-search-tuning-key-probe.js +1 -0
- package/dist/i-search-tuning-lint-issue.d.ts +61 -0
- package/dist/i-search-tuning-lint-issue.d.ts.map +1 -0
- package/dist/i-search-tuning-lint-issue.js +1 -0
- package/dist/i-search-tuning-lint-report.d.ts +38 -0
- package/dist/i-search-tuning-lint-report.d.ts.map +1 -0
- package/dist/i-search-tuning-lint-report.js +1 -0
- package/dist/i-unresolvable-reference-scan.d.ts +14 -0
- package/dist/i-unresolvable-reference-scan.d.ts.map +1 -0
- package/dist/i-unresolvable-reference-scan.js +1 -0
- package/dist/i-unresolvable-reference.d.ts +29 -0
- package/dist/i-unresolvable-reference.d.ts.map +1 -0
- package/dist/i-unresolvable-reference.js +1 -0
- package/dist/i-workspace-profile-payload.d.ts +12 -0
- package/dist/i-workspace-profile-payload.d.ts.map +1 -0
- package/dist/i-workspace-profile-payload.js +1 -0
- package/dist/impact-analysis.d.ts +15 -0
- package/dist/impact-analysis.d.ts.map +1 -1
- package/dist/impact-analysis.js +58 -13
- package/dist/impact-render.d.ts.map +1 -1
- package/dist/impact-render.js +22 -0
- package/dist/import-hygiene.d.ts +35 -1
- package/dist/import-hygiene.d.ts.map +1 -1
- package/dist/import-hygiene.js +107 -13
- package/dist/index.d.ts +141 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +172 -0
- package/dist/inspection-discovery.d.ts +45 -0
- package/dist/inspection-discovery.d.ts.map +1 -0
- package/dist/inspection-discovery.js +70 -0
- package/dist/knowledge-advisory-code.d.ts +17 -0
- package/dist/knowledge-advisory-code.d.ts.map +1 -0
- package/dist/knowledge-advisory-code.js +17 -0
- package/dist/knowledge-aged-entry.d.ts +10 -0
- package/dist/knowledge-aged-entry.d.ts.map +1 -0
- package/dist/knowledge-aged-entry.js +1 -0
- package/dist/knowledge-authoring.d.ts +24 -1
- package/dist/knowledge-authoring.d.ts.map +1 -1
- package/dist/knowledge-authoring.js +46 -7
- package/dist/knowledge-entry-verdict-record.d.ts +22 -0
- package/dist/knowledge-entry-verdict-record.d.ts.map +1 -0
- package/dist/knowledge-entry-verdict-record.js +1 -0
- package/dist/knowledge-entry-verdict.d.ts +17 -0
- package/dist/knowledge-entry-verdict.d.ts.map +1 -0
- package/dist/knowledge-entry-verdict.js +17 -0
- package/dist/knowledge-graph.d.ts +6 -0
- package/dist/knowledge-graph.d.ts.map +1 -1
- package/dist/knowledge-graph.js +18 -7
- package/dist/knowledge-kind-bucket.d.ts +19 -0
- package/dist/knowledge-kind-bucket.d.ts.map +1 -0
- package/dist/knowledge-kind-bucket.js +1 -0
- package/dist/knowledge-load-failure.d.ts +23 -0
- package/dist/knowledge-load-failure.d.ts.map +1 -0
- package/dist/knowledge-load-failure.js +1 -0
- package/dist/knowledge-reference-kind-bucket.d.ts +11 -0
- package/dist/knowledge-reference-kind-bucket.d.ts.map +1 -0
- package/dist/knowledge-reference-kind-bucket.js +1 -0
- package/dist/knowledge-stale-advisory.d.ts +14 -0
- package/dist/knowledge-stale-advisory.d.ts.map +1 -0
- package/dist/knowledge-stale-advisory.js +1 -0
- package/dist/knowledge-stale-coverage.d.ts +19 -0
- package/dist/knowledge-stale-coverage.d.ts.map +1 -0
- package/dist/knowledge-stale-coverage.js +1 -0
- package/dist/knowledge-stale-gate-flags.d.ts +33 -0
- package/dist/knowledge-stale-gate-flags.d.ts.map +1 -0
- package/dist/knowledge-stale-gate-flags.js +1 -0
- package/dist/knowledge-stale-gate-input.d.ts +46 -0
- package/dist/knowledge-stale-gate-input.d.ts.map +1 -0
- package/dist/knowledge-stale-gate-input.js +1 -0
- package/dist/knowledge-stale-gate-result.d.ts +33 -0
- package/dist/knowledge-stale-gate-result.d.ts.map +1 -0
- package/dist/knowledge-stale-gate-result.js +1 -0
- package/dist/knowledge-stale-gate-rule.d.ts +33 -0
- package/dist/knowledge-stale-gate-rule.d.ts.map +1 -0
- package/dist/knowledge-stale-gate-rule.js +1 -0
- package/dist/knowledge-stale-gate-violation.d.ts +13 -0
- package/dist/knowledge-stale-gate-violation.d.ts.map +1 -0
- package/dist/knowledge-stale-gate-violation.js +1 -0
- package/dist/knowledge-stale-gate.d.ts +83 -0
- package/dist/knowledge-stale-gate.d.ts.map +1 -0
- package/dist/knowledge-stale-gate.js +429 -0
- package/dist/knowledge-stale-quality-gate.d.ts +26 -0
- package/dist/knowledge-stale-quality-gate.d.ts.map +1 -0
- package/dist/knowledge-stale-quality-gate.js +110 -0
- package/dist/knowledge-stale.d.ts +122 -9
- package/dist/knowledge-stale.d.ts.map +1 -1
- package/dist/knowledge-stale.js +996 -291
- package/dist/knowledge-unverifiable-reason.d.ts +12 -0
- package/dist/knowledge-unverifiable-reason.d.ts.map +1 -0
- package/dist/knowledge-unverifiable-reason.js +12 -0
- package/dist/loader-diagnostics.d.ts +14 -2
- package/dist/loader-diagnostics.d.ts.map +1 -1
- package/dist/match-terms.d.ts +48 -0
- package/dist/match-terms.d.ts.map +1 -0
- package/dist/match-terms.js +155 -0
- package/dist/migration-profile-registry.d.ts +10 -0
- package/dist/migration-profile-registry.d.ts.map +1 -1
- package/dist/migration-profile-registry.js +57 -34
- package/dist/migration-readiness.d.ts.map +1 -1
- package/dist/migration-readiness.js +1 -3
- package/dist/nearest-id.d.ts +10 -26
- package/dist/nearest-id.d.ts.map +1 -1
- package/dist/nearest-id.js +9 -59
- package/dist/pack-asset-freshness.d.ts +65 -0
- package/dist/pack-asset-freshness.d.ts.map +1 -0
- package/dist/pack-asset-freshness.js +340 -0
- package/dist/pack-author-ux.d.ts +24 -3
- package/dist/pack-author-ux.d.ts.map +1 -1
- package/dist/pack-author-ux.js +87 -93
- package/dist/pack-contributions-inventory.d.ts +79 -39
- package/dist/pack-contributions-inventory.d.ts.map +1 -1
- package/dist/pack-contributions-inventory.js +443 -286
- package/dist/pack-doctor-verdict.d.ts +29 -0
- package/dist/pack-doctor-verdict.d.ts.map +1 -0
- package/dist/pack-doctor-verdict.js +45 -0
- package/dist/pack-doctor.d.ts +74 -1
- package/dist/pack-doctor.d.ts.map +1 -1
- package/dist/pack-doctor.js +281 -1
- package/dist/pack-helper-plan.d.ts +24 -0
- package/dist/pack-helper-plan.d.ts.map +1 -0
- package/dist/pack-helper-plan.js +77 -0
- package/dist/pack-helper-registry.d.ts +14 -0
- package/dist/pack-helper-registry.d.ts.map +1 -1
- package/dist/pack-helper-registry.js +76 -37
- package/dist/pack-manifest-reader.d.ts +8 -0
- package/dist/pack-manifest-reader.d.ts.map +1 -0
- package/dist/pack-manifest-reader.js +79 -0
- package/dist/pack-release-check.d.ts +14 -1
- package/dist/pack-release-check.d.ts.map +1 -1
- package/dist/pack-release-check.js +23 -1
- package/dist/pack-signature-status.d.ts +18 -6
- package/dist/pack-signature-status.d.ts.map +1 -1
- package/dist/pack-signature-status.js +59 -105
- package/dist/pack-test-runner.d.ts +27 -5
- package/dist/pack-test-runner.d.ts.map +1 -1
- package/dist/pack-test-runner.js +91 -35
- package/dist/pack-typecheck.d.ts +8 -0
- package/dist/pack-typecheck.d.ts.map +1 -0
- package/dist/pack-typecheck.js +76 -0
- package/dist/plan-review.d.ts +2 -0
- package/dist/plan-review.d.ts.map +1 -1
- package/dist/plan-review.js +17 -5
- package/dist/plan-simulation.d.ts.map +1 -1
- package/dist/plan-simulation.js +16 -5
- package/dist/playbook-load-issue.d.ts +16 -0
- package/dist/playbook-load-issue.d.ts.map +1 -0
- package/dist/playbook-load-issue.js +1 -0
- package/dist/playbook-registry.d.ts +32 -1
- package/dist/playbook-registry.d.ts.map +1 -1
- package/dist/playbook-registry.js +144 -55
- package/dist/policy-declaration.d.ts +18 -0
- package/dist/policy-declaration.d.ts.map +1 -0
- package/dist/policy-declaration.js +1 -0
- package/dist/policy-engine.d.ts +8 -0
- package/dist/policy-engine.d.ts.map +1 -1
- package/dist/policy-engine.js +26 -9
- package/dist/policy-overrides.d.ts.map +1 -1
- package/dist/policy-overrides.js +4 -4
- package/dist/policy-registry.d.ts +27 -0
- package/dist/policy-registry.d.ts.map +1 -1
- package/dist/policy-registry.js +87 -20
- package/dist/probed-id-fields.d.ts +21 -0
- package/dist/probed-id-fields.d.ts.map +1 -0
- package/dist/probed-id-fields.js +25 -0
- package/dist/probed-id-source.d.ts +11 -0
- package/dist/probed-id-source.d.ts.map +1 -0
- package/dist/probed-id-source.js +11 -0
- package/dist/profile-registry.d.ts +25 -2
- package/dist/profile-registry.d.ts.map +1 -1
- package/dist/profile-registry.js +59 -6
- package/dist/quality-gate-examination.d.ts +15 -0
- package/dist/quality-gate-examination.d.ts.map +1 -0
- package/dist/quality-gate-examination.js +15 -0
- package/dist/quality-gate-row-status.d.ts +19 -0
- package/dist/quality-gate-row-status.d.ts.map +1 -0
- package/dist/quality-gate-row-status.js +28 -0
- package/dist/quality-gate-status.d.ts +16 -0
- package/dist/quality-gate-status.d.ts.map +1 -0
- package/dist/quality-gate-status.js +16 -0
- package/dist/quality-html.d.ts.map +1 -1
- package/dist/quality-html.js +14 -3
- package/dist/quality-report-coverage.d.ts +26 -0
- package/dist/quality-report-coverage.d.ts.map +1 -0
- package/dist/quality-report-coverage.js +48 -0
- package/dist/quality-report.d.ts +28 -1
- package/dist/quality-report.d.ts.map +1 -1
- package/dist/quality-report.js +263 -35
- package/dist/query-intent-kind.d.ts +18 -0
- package/dist/query-intent-kind.d.ts.map +1 -0
- package/dist/query-intent-kind.js +18 -0
- package/dist/query-intent-result.d.ts +23 -0
- package/dist/query-intent-result.d.ts.map +1 -0
- package/dist/query-intent-result.js +1 -0
- package/dist/query-intent.d.ts +18 -0
- package/dist/query-intent.d.ts.map +1 -0
- package/dist/query-intent.js +336 -0
- package/dist/query-resolver.d.ts +18 -0
- package/dist/query-resolver.d.ts.map +1 -1
- package/dist/query-resolver.js +7 -4
- package/dist/ranked-recommendations.d.ts +36 -0
- package/dist/ranked-recommendations.d.ts.map +1 -0
- package/dist/ranked-recommendations.js +1 -0
- package/dist/ranker-explainability.d.ts.map +1 -1
- package/dist/ranker-explainability.js +38 -10
- package/dist/recommend-recipe.d.ts +17 -0
- package/dist/recommend-recipe.d.ts.map +1 -0
- package/dist/recommend-recipe.js +1 -0
- package/dist/recommend-recipes.d.ts +9 -0
- package/dist/recommend-recipes.d.ts.map +1 -0
- package/dist/recommend-recipes.js +106 -0
- package/dist/recommendation-candidate.d.ts +30 -0
- package/dist/recommendation-candidate.d.ts.map +1 -0
- package/dist/recommendation-candidate.js +1 -0
- package/dist/recommendation-confidence.d.ts +27 -0
- package/dist/recommendation-confidence.d.ts.map +1 -0
- package/dist/recommendation-confidence.js +1 -0
- package/dist/recommendation-ranking-options.d.ts +24 -0
- package/dist/recommendation-ranking-options.d.ts.map +1 -0
- package/dist/recommendation-ranking-options.js +1 -0
- package/dist/recommendation-ranking.d.ts +50 -0
- package/dist/recommendation-ranking.d.ts.map +1 -0
- package/dist/recommendation-ranking.js +527 -0
- package/dist/recommendation-source.d.ts +23 -0
- package/dist/recommendation-source.d.ts.map +1 -0
- package/dist/recommendation-source.js +23 -0
- package/dist/recommendation-suppression.d.ts +14 -0
- package/dist/recommendation-suppression.d.ts.map +1 -0
- package/dist/recommendation-suppression.js +14 -0
- package/dist/reference-asset-kind.d.ts +14 -0
- package/dist/reference-asset-kind.d.ts.map +1 -0
- package/dist/reference-asset-kind.js +14 -0
- package/dist/reference-content-check.d.ts +32 -0
- package/dist/reference-content-check.d.ts.map +1 -0
- package/dist/reference-content-check.js +143 -0
- package/dist/reference-failure.d.ts +31 -0
- package/dist/reference-failure.d.ts.map +1 -0
- package/dist/reference-failure.js +31 -0
- package/dist/reference-id-status.d.ts +15 -0
- package/dist/reference-id-status.d.ts.map +1 -0
- package/dist/reference-id-status.js +15 -0
- package/dist/reference-kind-declarations.d.ts +42 -0
- package/dist/reference-kind-declarations.d.ts.map +1 -0
- package/dist/reference-kind-declarations.js +142 -0
- package/dist/reference-lookup.d.ts +6 -0
- package/dist/reference-lookup.d.ts.map +1 -1
- package/dist/reference-lookup.js +13 -5
- package/dist/reference-registry.d.ts +109 -11
- package/dist/reference-registry.d.ts.map +1 -1
- package/dist/reference-registry.js +186 -30
- package/dist/reference-subject.d.ts +20 -0
- package/dist/reference-subject.d.ts.map +1 -0
- package/dist/reference-subject.js +1 -0
- package/dist/registration-hint-discovery-status.d.ts +25 -0
- package/dist/registration-hint-discovery-status.d.ts.map +1 -0
- package/dist/registration-hint-discovery-status.js +25 -0
- package/dist/registration-hint-registry.d.ts +80 -0
- package/dist/registration-hint-registry.d.ts.map +1 -1
- package/dist/registration-hint-registry.js +356 -138
- package/dist/registry-lifecycle.d.ts +200 -19
- package/dist/registry-lifecycle.d.ts.map +1 -1
- package/dist/registry-lifecycle.js +526 -136
- package/dist/release-readiness.d.ts.map +1 -1
- package/dist/release-readiness.js +10 -7
- package/dist/release-smoke.d.ts.map +1 -1
- package/dist/release-smoke.js +11 -7
- package/dist/report-site.d.ts.map +1 -1
- package/dist/report-site.js +25 -7
- package/dist/repository-intelligence.d.ts.map +1 -1
- package/dist/repository-intelligence.js +3 -2
- package/dist/repository-knowledge-model.d.ts.map +1 -1
- package/dist/repository-knowledge-model.js +18 -5
- package/dist/resolve-project-config.d.ts +64 -0
- package/dist/resolve-project-config.d.ts.map +1 -1
- package/dist/resolve-project-config.js +240 -32
- package/dist/reuse/compute-reuse-coverage.d.ts +29 -0
- package/dist/reuse/compute-reuse-coverage.d.ts.map +1 -0
- package/dist/reuse/compute-reuse-coverage.js +198 -0
- package/dist/reuse/rank-reuse-candidates.d.ts +38 -0
- package/dist/reuse/rank-reuse-candidates.d.ts.map +1 -0
- package/dist/reuse/rank-reuse-candidates.js +212 -0
- package/dist/reuse/rank-reuse-options.d.ts +20 -0
- package/dist/reuse/rank-reuse-options.d.ts.map +1 -0
- package/dist/reuse/rank-reuse-options.js +1 -0
- package/dist/reuse/rank-reuse-suggestions.d.ts +15 -0
- package/dist/reuse/rank-reuse-suggestions.d.ts.map +1 -0
- package/dist/reuse/rank-reuse-suggestions.js +31 -0
- package/dist/reuse/resolve-curated-reuse.d.ts +43 -0
- package/dist/reuse/resolve-curated-reuse.d.ts.map +1 -0
- package/dist/reuse/resolve-curated-reuse.js +115 -0
- package/dist/reuse/reuse-candidate.d.ts +29 -0
- package/dist/reuse/reuse-candidate.d.ts.map +1 -0
- package/dist/reuse/reuse-candidate.js +1 -0
- package/dist/reuse/reuse-coverage-report.d.ts +74 -0
- package/dist/reuse/reuse-coverage-report.d.ts.map +1 -0
- package/dist/reuse/reuse-coverage-report.js +1 -0
- package/dist/reuse/reuse-curated-coverage.d.ts +36 -0
- package/dist/reuse/reuse-curated-coverage.d.ts.map +1 -0
- package/dist/reuse/reuse-curated-coverage.js +1 -0
- package/dist/reuse/reuse-curated-resolution.d.ts +36 -0
- package/dist/reuse/reuse-curated-resolution.d.ts.map +1 -0
- package/dist/reuse/reuse-curated-resolution.js +1 -0
- package/dist/reuse/reuse-curated-status.d.ts +21 -0
- package/dist/reuse/reuse-curated-status.d.ts.map +1 -0
- package/dist/reuse/reuse-curated-status.js +21 -0
- package/dist/reuse/reuse-match-detail.d.ts +15 -0
- package/dist/reuse/reuse-match-detail.d.ts.map +1 -0
- package/dist/reuse/reuse-match-detail.js +1 -0
- package/dist/reuse/reuse-ranking.d.ts +37 -0
- package/dist/reuse/reuse-ranking.d.ts.map +1 -0
- package/dist/reuse/reuse-ranking.js +1 -0
- package/dist/reuse/reuse-suggestion.d.ts +19 -0
- package/dist/reuse/reuse-suggestion.d.ts.map +1 -0
- package/dist/reuse/reuse-suggestion.js +1 -0
- package/dist/reuse/reuse-symbol-lookup.d.ts +28 -0
- package/dist/reuse/reuse-symbol-lookup.d.ts.map +1 -0
- package/dist/reuse/reuse-symbol-lookup.js +1 -0
- package/dist/reuse/reuse-tokenize.d.ts +11 -0
- package/dist/reuse/reuse-tokenize.d.ts.map +1 -0
- package/dist/reuse/reuse-tokenize.js +26 -0
- package/dist/reuse/score-reuse-name.d.ts +16 -0
- package/dist/reuse/score-reuse-name.d.ts.map +1 -0
- package/dist/reuse/score-reuse-name.js +35 -0
- package/dist/reuse/score-reuse-primitive.d.ts +33 -0
- package/dist/reuse/score-reuse-primitive.d.ts.map +1 -0
- package/dist/reuse/score-reuse-primitive.js +92 -0
- package/dist/review-packet.d.ts +2 -0
- package/dist/review-packet.d.ts.map +1 -1
- package/dist/review-packet.js +13 -6
- package/dist/role-views.d.ts.map +1 -1
- package/dist/role-views.js +16 -16
- package/dist/routing-recommends-channels.d.ts +24 -0
- package/dist/routing-recommends-channels.d.ts.map +1 -0
- package/dist/routing-recommends-channels.js +19 -0
- package/dist/run-boundary-check.d.ts +118 -0
- package/dist/run-boundary-check.d.ts.map +1 -0
- package/dist/run-boundary-check.js +592 -0
- package/dist/safety-audit.js +1 -1
- package/dist/scaffold-coverage.js +1 -1
- package/dist/scaffold-pattern-doctor-report.d.ts +19 -0
- package/dist/scaffold-pattern-doctor-report.d.ts.map +1 -0
- package/dist/scaffold-pattern-doctor-report.js +54 -0
- package/dist/scaffold-patterns.d.ts +75 -1
- package/dist/scaffold-patterns.d.ts.map +1 -1
- package/dist/scaffold-patterns.js +375 -84
- package/dist/schema-inventory.d.ts.map +1 -1
- package/dist/schema-inventory.js +4 -3
- package/dist/search-document-id.d.ts +52 -0
- package/dist/search-document-id.d.ts.map +1 -0
- package/dist/search-document-id.js +72 -0
- package/dist/search-document-prefix.d.ts +7 -0
- package/dist/search-document-prefix.d.ts.map +1 -0
- package/dist/search-document-prefix.js +1 -0
- package/dist/search-index.d.ts.map +1 -1
- package/dist/search-index.js +20 -23
- package/dist/search-tuning-explain.d.ts +6 -0
- package/dist/search-tuning-explain.d.ts.map +1 -1
- package/dist/search-tuning-explain.js +19 -17
- package/dist/search-tuning-key-probes.d.ts +16 -0
- package/dist/search-tuning-key-probes.d.ts.map +1 -0
- package/dist/search-tuning-key-probes.js +65 -0
- package/dist/search-tuning-key-resolution.d.ts +25 -0
- package/dist/search-tuning-key-resolution.d.ts.map +1 -0
- package/dist/search-tuning-key-resolution.js +1 -0
- package/dist/search-tuning-key-resolver.d.ts +4 -0
- package/dist/search-tuning-key-resolver.d.ts.map +1 -0
- package/dist/search-tuning-key-resolver.js +107 -0
- package/dist/search-tuning-key-status.d.ts +24 -0
- package/dist/search-tuning-key-status.d.ts.map +1 -0
- package/dist/search-tuning-key-status.js +24 -0
- package/dist/search-tuning-lint.d.ts +9 -0
- package/dist/search-tuning-lint.d.ts.map +1 -0
- package/dist/search-tuning-lint.js +468 -0
- package/dist/search-tuning-registry.d.ts +43 -0
- package/dist/search-tuning-registry.d.ts.map +1 -1
- package/dist/search-tuning-registry.js +214 -49
- package/dist/self-audit.d.ts +12 -0
- package/dist/self-audit.d.ts.map +1 -1
- package/dist/self-audit.js +36 -10
- package/dist/self-config-doctor-v2.d.ts +145 -3
- package/dist/self-config-doctor-v2.d.ts.map +1 -1
- package/dist/self-config-doctor-v2.js +1304 -181
- package/dist/self-config-doctor.d.ts +20 -1
- package/dist/self-config-doctor.d.ts.map +1 -1
- package/dist/self-config-doctor.js +53 -280
- package/dist/settled-unit-states.d.ts +9 -0
- package/dist/settled-unit-states.d.ts.map +1 -0
- package/dist/settled-unit-states.js +14 -0
- package/dist/sharkcraft-inspector.d.ts +34 -0
- package/dist/sharkcraft-inspector.d.ts.map +1 -1
- package/dist/sharkcraft-inspector.js +273 -26
- package/dist/spec/spec-evidence.d.ts.map +1 -1
- package/dist/spec/spec-evidence.js +14 -20
- package/dist/split-identifier.d.ts +21 -0
- package/dist/split-identifier.d.ts.map +1 -0
- package/dist/split-identifier.js +27 -0
- package/dist/start-here.d.ts.map +1 -1
- package/dist/start-here.js +1 -2
- package/dist/substitute-placeholders.d.ts +8 -0
- package/dist/substitute-placeholders.d.ts.map +1 -0
- package/dist/substitute-placeholders.js +9 -0
- package/dist/symbol-index.d.ts +33 -0
- package/dist/symbol-index.d.ts.map +1 -1
- package/dist/symbol-index.js +241 -3
- package/dist/symbol-member-entry.d.ts +26 -0
- package/dist/symbol-member-entry.d.ts.map +1 -0
- package/dist/symbol-member-entry.js +1 -0
- package/dist/symbol-member-kind.d.ts +14 -0
- package/dist/symbol-member-kind.d.ts.map +1 -0
- package/dist/symbol-member-kind.js +14 -0
- package/dist/task-packet.d.ts.map +1 -1
- package/dist/task-packet.js +52 -9
- package/dist/task-ranker.d.ts +8 -0
- package/dist/task-ranker.d.ts.map +1 -1
- package/dist/task-ranker.js +25 -13
- package/dist/task-risk.js +1 -1
- package/dist/task-routing-hint-registry.d.ts +20 -1
- package/dist/task-routing-hint-registry.d.ts.map +1 -1
- package/dist/task-routing-hint-registry.js +186 -42
- package/dist/template-drift.d.ts.map +1 -1
- package/dist/template-drift.js +30 -9
- package/dist/template-lint.d.ts.map +1 -1
- package/dist/template-lint.js +160 -2
- package/dist/term-query.d.ts +10 -0
- package/dist/term-query.d.ts.map +1 -0
- package/dist/term-query.js +1 -0
- package/dist/test-definitions.d.ts +6 -3
- package/dist/test-definitions.d.ts.map +1 -1
- package/dist/test-runner.d.ts +95 -10
- package/dist/test-runner.d.ts.map +1 -1
- package/dist/test-runner.js +309 -308
- package/dist/tuning-query-tokens.d.ts +29 -0
- package/dist/tuning-query-tokens.d.ts.map +1 -0
- package/dist/tuning-query-tokens.js +51 -0
- package/dist/typecheck-files.d.ts +36 -0
- package/dist/typecheck-files.d.ts.map +1 -0
- package/dist/typecheck-files.js +158 -0
- package/dist/uncertainty.js +1 -1
- package/dist/universal-search.d.ts.map +1 -1
- package/dist/universal-search.js +5 -3
- package/dist/unregistered-exports.d.ts +19 -0
- package/dist/unregistered-exports.d.ts.map +1 -0
- package/dist/unregistered-exports.js +141 -0
- package/dist/unresolvable-reason.d.ts +11 -0
- package/dist/unresolvable-reason.d.ts.map +1 -0
- package/dist/unresolvable-reason.js +11 -0
- package/dist/upgrade-advisor.d.ts.map +1 -1
- package/dist/upgrade-advisor.js +16 -9
- package/dist/validate-contribution-file.d.ts +4 -0
- package/dist/validate-contribution-file.d.ts.map +1 -0
- package/dist/validate-contribution-file.js +228 -0
- package/dist/why-file.d.ts +3 -0
- package/dist/why-file.d.ts.map +1 -1
- package/dist/why-file.js +7 -3
- package/package.json +17 -17
package/dist/impact-analysis.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { existsSync, readFileSync } from 'node:fs';
|
|
2
2
|
import * as nodePath from 'node:path';
|
|
3
|
-
import { scanImports, loadTsconfigPaths } from '@shrkcrft/boundaries';
|
|
4
|
-
import { AreaKind, buildAreaMap } from "./area-map.js";
|
|
3
|
+
import { boundaryRuleSeverity, scanImports, loadTsconfigPaths } from '@shrkcrft/boundaries';
|
|
4
|
+
import { AreaKind, areaIdOf, buildAreaMap, createAreaClassifier, formatClassificationRate, } from "./area-map.js";
|
|
5
5
|
import { rankAll } from "./task-ranker.js";
|
|
6
6
|
import { loadOwnershipRules, impactFor } from "./ownership.js";
|
|
7
7
|
export const IMPACT_ANALYSIS_SCHEMA = 'sharkcraft.impact-analysis/v2';
|
|
@@ -243,16 +243,30 @@ function detectWorkspaces(ctx) {
|
|
|
243
243
|
}
|
|
244
244
|
return [...out.values()].sort((a, b) => b.fileCount - a.fileCount);
|
|
245
245
|
}
|
|
246
|
+
/**
|
|
247
|
+
* The areas the touched files are IN: each file goes through the one
|
|
248
|
+
* classifier and is keyed by `areaIdOf`, exactly as `buildAreaMap` keys its
|
|
249
|
+
* entries, so `boundaryRisks` finds the same entry by id.
|
|
250
|
+
*
|
|
251
|
+
* A prefix match on an entry's `paths` answered a different question.
|
|
252
|
+
* `paths` holds only the top segment, so with a config pattern for
|
|
253
|
+
* `libs/<group>/core/**` EVERY `libs/…` file hit the core area and earned a
|
|
254
|
+
* false `core-area` risk, while `areaCoverage` called the same file
|
|
255
|
+
* unclassified. A touched file whose area has no map entry yet (a planned file
|
|
256
|
+
* in a new directory) still reports the area it would be in.
|
|
257
|
+
*/
|
|
246
258
|
function affectedAreaSummary(ctx) {
|
|
247
|
-
const allTouched = unique([...ctx.files]);
|
|
248
259
|
const out = new Map();
|
|
249
|
-
for (const
|
|
250
|
-
const
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
260
|
+
for (const f of unique([...ctx.files])) {
|
|
261
|
+
const classification = ctx.classify(f);
|
|
262
|
+
const id = areaIdOf(classification, f);
|
|
263
|
+
const hit = out.get(id);
|
|
264
|
+
if (hit)
|
|
265
|
+
hit.fileCount += 1;
|
|
266
|
+
else
|
|
267
|
+
out.set(id, { id, kind: classification.kind, fileCount: 1 });
|
|
254
268
|
}
|
|
255
|
-
return [...out.values()].sort((a, b) => b.fileCount - a.fileCount);
|
|
269
|
+
return [...out.values()].sort((a, b) => b.fileCount - a.fileCount || a.id.localeCompare(b.id));
|
|
256
270
|
}
|
|
257
271
|
function boundaryRisks(ctx, affected) {
|
|
258
272
|
const risks = [];
|
|
@@ -272,7 +286,8 @@ function boundaryRisks(ctx, affected) {
|
|
|
272
286
|
risks.push({
|
|
273
287
|
ruleId,
|
|
274
288
|
reason: `Affects area ${a.id}; rule ${ruleId} guards that area.`,
|
|
275
|
-
severity
|
|
289
|
+
// The ENFORCED severity — an unset one is `error` (one authority).
|
|
290
|
+
severity: boundaryRuleSeverity(rule),
|
|
276
291
|
});
|
|
277
292
|
}
|
|
278
293
|
}
|
|
@@ -377,8 +392,11 @@ function affectedPolicies(ctx, affected, boundary) {
|
|
|
377
392
|
}
|
|
378
393
|
async function ownershipImpactFor(ctx) {
|
|
379
394
|
try {
|
|
380
|
-
|
|
381
|
-
|
|
395
|
+
// The DECLARED ownership-source key — the one `shrk ownership`, `shrk
|
|
396
|
+
// owners` and the MCP ownership tools read. The old `ownership.sources`
|
|
397
|
+
// read named a key the strict schema rejects, so impact silently fell back
|
|
398
|
+
// to the defaults even when `ownershipFiles` was configured.
|
|
399
|
+
const sources = ctx.inspection.config?.ownershipFiles;
|
|
382
400
|
const { rules } = await loadOwnershipRules(ctx.inspection.projectRoot, sources);
|
|
383
401
|
if (rules.length === 0)
|
|
384
402
|
return null;
|
|
@@ -552,6 +570,9 @@ export async function analyzeImpact(inspection, input) {
|
|
|
552
570
|
}
|
|
553
571
|
const files = unique([...explicitFiles, ...planTargets, ...specifierTargets]);
|
|
554
572
|
const task = (input.task ?? '').trim() || files.join(' ') || (input.specifier ?? '');
|
|
573
|
+
// THE classifier — the one buildAreaMap keys its entries by. Affected areas,
|
|
574
|
+
// `core-area`, boundary risks and `areaCoverage` all answer through it.
|
|
575
|
+
const classify = createAreaClassifier(inspection.config?.areaMap);
|
|
555
576
|
const ctx = {
|
|
556
577
|
inspection,
|
|
557
578
|
files,
|
|
@@ -561,6 +582,7 @@ export async function analyzeImpact(inspection, input) {
|
|
|
561
582
|
maxDepth,
|
|
562
583
|
limit,
|
|
563
584
|
areaMap,
|
|
585
|
+
classify,
|
|
564
586
|
};
|
|
565
587
|
const { direct, transitive, paths } = closeDependents(reverse, files, maxDepth);
|
|
566
588
|
const directDependents = direct.slice(0, limit);
|
|
@@ -623,7 +645,7 @@ export async function analyzeImpact(inspection, input) {
|
|
|
623
645
|
const hitsPolicy = files.some((f) => f.includes('policy') || f.includes('policy-engine'));
|
|
624
646
|
const hitsTemplates = templates.length > 0 || pipelines.length > 0;
|
|
625
647
|
const ownershipReview = (ownership?.requiredReviewFiles.length ?? 0) > 0;
|
|
626
|
-
const { risk, reasons:
|
|
648
|
+
const { risk, reasons: classifiedReasons } = classifyRisk({
|
|
627
649
|
directCount: direct.length,
|
|
628
650
|
transitiveCount: transitive.length,
|
|
629
651
|
boundaryCount: boundaryConcerns.length,
|
|
@@ -636,6 +658,28 @@ export async function analyzeImpact(inspection, input) {
|
|
|
636
658
|
hitsPolicy,
|
|
637
659
|
hitsTemplates,
|
|
638
660
|
});
|
|
661
|
+
// A derived view inherits its input's coverage and prints it: affected
|
|
662
|
+
// areas, boundary risks and `core-area` are only as complete as the area
|
|
663
|
+
// classification. Targets go through the SAME classifier the map uses.
|
|
664
|
+
const areaCoverage = {
|
|
665
|
+
classificationRate: areaMap.classificationRate,
|
|
666
|
+
degraded: areaMap.degraded,
|
|
667
|
+
unclassifiedTargets: files.filter((f) => classify(f).kind === AreaKind.Unknown),
|
|
668
|
+
};
|
|
669
|
+
// It flags, it does not lower the risk: the area-derived signals may be
|
|
670
|
+
// understated, which is the opposite of reassuring.
|
|
671
|
+
const riskReasons = areaCoverage.degraded || areaCoverage.unclassifiedTargets.length > 0
|
|
672
|
+
? [
|
|
673
|
+
...classifiedReasons,
|
|
674
|
+
{
|
|
675
|
+
code: 'area-attribution-degraded',
|
|
676
|
+
message: `Area attribution ${areaCoverage.degraded ? 'degraded' : 'partial'}: ` +
|
|
677
|
+
`${formatClassificationRate(areaCoverage.classificationRate)} of the repo classified; ` +
|
|
678
|
+
`${areaCoverage.unclassifiedTargets.length}/${files.length} target(s) in no known area — ` +
|
|
679
|
+
'core/boundary/area signals may be understated (add areaMap.patterns to sharkcraft.config.ts).',
|
|
680
|
+
},
|
|
681
|
+
]
|
|
682
|
+
: classifiedReasons;
|
|
639
683
|
const truncations = [];
|
|
640
684
|
if (direct.length > limit) {
|
|
641
685
|
truncations.push({ list: 'directDependents', total: direct.length, shown: limit });
|
|
@@ -684,6 +728,7 @@ export async function analyzeImpact(inspection, input) {
|
|
|
684
728
|
suggestedReviewCommands,
|
|
685
729
|
relatedRules,
|
|
686
730
|
relatedTemplates,
|
|
731
|
+
areaCoverage,
|
|
687
732
|
risk,
|
|
688
733
|
riskReasons,
|
|
689
734
|
explanation,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"impact-render.d.ts","sourceRoot":"","sources":["../src/impact-render.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"impact-render.d.ts","sourceRoot":"","sources":["../src/impact-render.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAkB5D,MAAM,WAAW,oBAAoB;IACnC,kEAAkE;IAClE,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA6BD,UAAU,SAAS;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,SAAS,EAAE,CAAC;CACvB;AAED,uEAAuE;AACvE,wBAAgB,eAAe,CAC7B,MAAM,EAAE,eAAe,EACvB,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAC5C,SAAS,EAAE,CA0Cb;AAiCD,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,eAAe,EACvB,IAAI,GAAE,oBAAyB,GAC9B,MAAM,CAkER;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,eAAe,EACvB,IAAI,GAAE,oBAAyB,GAC9B,MAAM,CA8GR;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,eAAe,EACvB,IAAI,GAAE,oBAAyB,GAC9B,MAAM,CAiIR"}
|
package/dist/impact-render.js
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
import { formatClassificationRate } from "./area-map.js";
|
|
2
|
+
/**
|
|
3
|
+
* `Area attribution: degraded (…)` — printed whenever the area map behind this
|
|
4
|
+
* impact view classified too little of the repo, or left a target in no area.
|
|
5
|
+
* Report only: it changes no exit, it says how far the area signals reach.
|
|
6
|
+
*/
|
|
7
|
+
function areaAttributionLine(impact) {
|
|
8
|
+
const ac = impact.areaCoverage;
|
|
9
|
+
if (!ac || (!ac.degraded && ac.unclassifiedTargets.length === 0))
|
|
10
|
+
return undefined;
|
|
11
|
+
return (`Area attribution: ${ac.degraded ? 'degraded' : 'partial'} ` +
|
|
12
|
+
`(${formatClassificationRate(ac.classificationRate)} of repo classified; ` +
|
|
13
|
+
`${ac.unclassifiedTargets.length}/${impact.normalizedTargets.length} target(s) unclassified)`);
|
|
14
|
+
}
|
|
1
15
|
function riskBadgeTag(risk) {
|
|
2
16
|
switch (risk) {
|
|
3
17
|
case 'low':
|
|
@@ -111,6 +125,9 @@ export function renderImpactText(impact, opts = {}) {
|
|
|
111
125
|
for (const r of impact.riskReasons.slice(0, 6))
|
|
112
126
|
lines.push(` - ${r.code}: ${r.message}`);
|
|
113
127
|
}
|
|
128
|
+
const areaLine = areaAttributionLine(impact);
|
|
129
|
+
if (areaLine)
|
|
130
|
+
lines.push(areaLine);
|
|
114
131
|
lines.push(`Targets (${impact.normalizedTargets.length}):`);
|
|
115
132
|
for (const f of impact.normalizedTargets.slice(0, 12))
|
|
116
133
|
lines.push(` • ${f}`);
|
|
@@ -197,6 +214,11 @@ export function renderImpactMarkdown(impact, opts = {}) {
|
|
|
197
214
|
lines.push('_None._');
|
|
198
215
|
for (const r of impact.riskReasons)
|
|
199
216
|
lines.push(`- **${r.code}** — ${r.message}`);
|
|
217
|
+
const areaLine = areaAttributionLine(impact);
|
|
218
|
+
if (areaLine) {
|
|
219
|
+
lines.push('');
|
|
220
|
+
lines.push(`> ${areaLine}`);
|
|
221
|
+
}
|
|
200
222
|
lines.push('');
|
|
201
223
|
lines.push(`## Direct dependents (${impact.directDependents.length})`);
|
|
202
224
|
lines.push('');
|
package/dist/import-hygiene.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { IVerdictCoverage } from '@shrkcrft/core';
|
|
1
2
|
export declare const IMPORT_HYGIENE_SCHEMA = "sharkcraft.import-hygiene/v1";
|
|
2
3
|
export declare enum ImportHygieneFindingKind {
|
|
3
4
|
InlineTypeImport = "inline-type-import",
|
|
@@ -24,6 +25,18 @@ export interface IImportHygieneReport {
|
|
|
24
25
|
readonly counts: Readonly<Record<string, number>>;
|
|
25
26
|
readonly verdict: 'ok' | 'warnings' | 'errors';
|
|
26
27
|
readonly nextCommand: string;
|
|
28
|
+
/**
|
|
29
|
+
* Source files the check was asked to read — the subject list
|
|
30
|
+
* (`importHygieneSubjects` for an explicit `files` request, the tree walk
|
|
31
|
+
* otherwise). Always set by `buildImportHygieneReport`.
|
|
32
|
+
*/
|
|
33
|
+
readonly filesInScope?: number;
|
|
34
|
+
/**
|
|
35
|
+
* In-scope files that could not be read (project-relative). Their imports
|
|
36
|
+
* were never checked, so a verdict over them is NOT VERIFIED — never "ok".
|
|
37
|
+
* Always set by `buildImportHygieneReport`.
|
|
38
|
+
*/
|
|
39
|
+
readonly unread?: readonly string[];
|
|
27
40
|
}
|
|
28
41
|
export interface IImportHygieneOptions {
|
|
29
42
|
/** Restrict scan to a set of relative file paths (e.g. changed files). */
|
|
@@ -58,7 +71,23 @@ export interface IAllowlistEntry {
|
|
|
58
71
|
/** Optional ISO date after which this allowlist entry should be re-evaluated. */
|
|
59
72
|
readonly expiresAt?: string;
|
|
60
73
|
}
|
|
74
|
+
/**
|
|
75
|
+
* The files of `files` import hygiene actually READS — existing `.ts`/`.tsx`
|
|
76
|
+
* sources, no declarations, no test fixtures (absolute paths). THE authority
|
|
77
|
+
* for "did the hygiene check examine anything?": `buildImportHygieneReport`
|
|
78
|
+
* scans exactly this list, and finish / diff-check count it, so a changeset of
|
|
79
|
+
* deleted files, `.js` edits or test fixtures can never read as a hygiene pass
|
|
80
|
+
* over nothing (round 11).
|
|
81
|
+
*/
|
|
82
|
+
export declare function importHygieneSubjects(projectRoot: string, files: readonly string[]): string[];
|
|
61
83
|
export declare function buildImportHygieneReport(projectRoot: string, options?: IImportHygieneOptions): IImportHygieneReport;
|
|
84
|
+
/**
|
|
85
|
+
* What an import-hygiene run examined, as one coverage record: in-scope files
|
|
86
|
+
* read of in-scope files, naming each unreadable one. THE fold finish,
|
|
87
|
+
* `diff-check` (CLI + MCP) and `check imports` settle on, so an unreadable
|
|
88
|
+
* changed file is NOT VERIFIED (2) on every surface — never a clean pass.
|
|
89
|
+
*/
|
|
90
|
+
export declare function importHygieneCoverage(report: Pick<IImportHygieneReport, 'filesInScope' | 'unread'>, unit?: string): IVerdictCoverage;
|
|
62
91
|
export interface IImportHygieneAllowlistDraft {
|
|
63
92
|
readonly schema: 'sharkcraft.import-hygiene-allowlist/v1';
|
|
64
93
|
readonly comment: string;
|
|
@@ -89,5 +118,10 @@ export interface IEmitAllowlistOptions {
|
|
|
89
118
|
* patterns require per-case justification.
|
|
90
119
|
*/
|
|
91
120
|
export declare function emitImportHygieneAllowlistDraft(report: IImportHygieneReport, options?: IEmitAllowlistOptions): IImportHygieneAllowlistDraft;
|
|
92
|
-
|
|
121
|
+
/**
|
|
122
|
+
* Text rendering. `headline` overrides the header word — the CLI passes the
|
|
123
|
+
* SETTLED verdict (`NOT VERIFIED`) so a run that examined nothing, or not
|
|
124
|
+
* everything, never prints `(OK)` above its own NOT VERIFIED line.
|
|
125
|
+
*/
|
|
126
|
+
export declare function renderImportHygieneText(report: IImportHygieneReport, headline?: string): string;
|
|
93
127
|
//# sourceMappingURL=import-hygiene.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import-hygiene.d.ts","sourceRoot":"","sources":["../src/import-hygiene.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"import-hygiene.d.ts","sourceRoot":"","sources":["../src/import-hygiene.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,eAAO,MAAM,qBAAqB,iCAAiC,CAAC;AAEpE,oBAAY,wBAAwB;IAClC,gBAAgB,uBAAuB;IACvC,cAAc,oBAAoB;IAClC,aAAa,mBAAmB;CACjC;AAED,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;AAEjE,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,wBAAwB,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,CAAC;IACzC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,EAAE,OAAO,qBAAqB,CAAC;IAC9C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,SAAS,qBAAqB,EAAE,CAAC;IACpD,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAClD,QAAQ,CAAC,OAAO,EAAE,IAAI,GAAG,UAAU,GAAG,QAAQ,CAAC;IAC/C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B;;;;OAIG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,qBAAqB;IACpC,0EAA0E;IAC1E,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,oDAAoD;IACpD,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,gDAAgD;IAChD,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC,0FAA0F;IAC1F,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC;;;;OAIG;IACH,QAAQ,CAAC,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAC3C;AAED;;;;GAIG;AACH,eAAO,MAAM,4BAA4B,UAAU,CAAC;AAEpD,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,CAKvE;AAED,MAAM,WAAW,eAAe;IAC9B,0BAA0B;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,mDAAmD;IACnD,QAAQ,CAAC,IAAI,CAAC,EAAE,wBAAwB,CAAC;IACzC,mCAAmC;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,iFAAiF;IACjF,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAoPD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAK7F;AA4BD,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,qBAA0B,GAClC,oBAAoB,CA0DtB;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,IAAI,CAAC,oBAAoB,EAAE,cAAc,GAAG,QAAQ,CAAC,EAC7D,IAAI,GAAE,MAAuB,GAC5B,gBAAgB,CAelB;AAID,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,MAAM,EAAE,wCAAwC,CAAC;IAC1D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,qBAAqB;IACpC;;;;OAIG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,wBAAwB,GAAG,KAAK,CAAC;IACjD,gEAAgE;IAChE,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;CACjC;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,oBAAoB,EAC5B,OAAO,GAAE,qBAA0B,GAClC,4BAA4B,CAyB9B;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,oBAAoB,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAqB/F"}
|
package/dist/import-hygiene.js
CHANGED
|
@@ -60,14 +60,23 @@ function loadAllowlist(projectRoot, allowlistFile) {
|
|
|
60
60
|
return [];
|
|
61
61
|
}
|
|
62
62
|
}
|
|
63
|
-
|
|
63
|
+
/**
|
|
64
|
+
* Every `.ts` / `.tsx` source under `root` (absolute paths). A directory the
|
|
65
|
+
* walk could not LIST (a permission error, not one that vanished) is pushed to
|
|
66
|
+
* `unlistedDirs`: every source beneath it went unexamined, so the report counts
|
|
67
|
+
* it as an unread unit of scope — never a directory that held nothing.
|
|
68
|
+
*/
|
|
69
|
+
function listSourceFiles(root, unlistedDirs = []) {
|
|
64
70
|
const out = [];
|
|
65
71
|
function walk(dir) {
|
|
66
72
|
let entries = [];
|
|
67
73
|
try {
|
|
68
74
|
entries = readdirSync(dir, { withFileTypes: true });
|
|
69
75
|
}
|
|
70
|
-
catch {
|
|
76
|
+
catch (e) {
|
|
77
|
+
const code = e.code;
|
|
78
|
+
if (code !== 'ENOENT' && code !== 'ENOTDIR')
|
|
79
|
+
unlistedDirs.push(dir);
|
|
71
80
|
return;
|
|
72
81
|
}
|
|
73
82
|
for (const e of entries) {
|
|
@@ -87,6 +96,11 @@ function listSourceFiles(root) {
|
|
|
87
96
|
walk(root);
|
|
88
97
|
return out;
|
|
89
98
|
}
|
|
99
|
+
/**
|
|
100
|
+
* The findings one file holds, or `null` when it could not be READ — a file
|
|
101
|
+
* whose imports were never seen is unexamined, never "no findings" (the
|
|
102
|
+
* `[]` this used to return made an unreadable file read as a clean pass).
|
|
103
|
+
*/
|
|
90
104
|
function scanFile(projectRoot, absFile, allowlist, strictReasons = false) {
|
|
91
105
|
const findings = [];
|
|
92
106
|
let rawContent;
|
|
@@ -94,7 +108,7 @@ function scanFile(projectRoot, absFile, allowlist, strictReasons = false) {
|
|
|
94
108
|
rawContent = readFileSync(absFile, 'utf8');
|
|
95
109
|
}
|
|
96
110
|
catch {
|
|
97
|
-
return
|
|
111
|
+
return null;
|
|
98
112
|
}
|
|
99
113
|
const relFile = nodePath.relative(projectRoot, absFile);
|
|
100
114
|
const lines = rawContent.split('\n');
|
|
@@ -260,6 +274,35 @@ function stripCommentsPreservingOffsets(source) {
|
|
|
260
274
|
* drift — a change to a test file no longer spuriously fails an imports gate.
|
|
261
275
|
*/
|
|
262
276
|
const EXCLUDED_FROM_HYGIENE = /__tests__|\/__fixtures__/;
|
|
277
|
+
/**
|
|
278
|
+
* The files of `files` import hygiene actually READS — existing `.ts`/`.tsx`
|
|
279
|
+
* sources, no declarations, no test fixtures (absolute paths). THE authority
|
|
280
|
+
* for "did the hygiene check examine anything?": `buildImportHygieneReport`
|
|
281
|
+
* scans exactly this list, and finish / diff-check count it, so a changeset of
|
|
282
|
+
* deleted files, `.js` edits or test fixtures can never read as a hygiene pass
|
|
283
|
+
* over nothing (round 11).
|
|
284
|
+
*/
|
|
285
|
+
export function importHygieneSubjects(projectRoot, files) {
|
|
286
|
+
return files
|
|
287
|
+
.map((f) => (nodePath.isAbsolute(f) ? f : nodePath.join(projectRoot, f)))
|
|
288
|
+
.filter((f) => presentOrUnknowable(f) && /\.(ts|tsx)$/.test(f) && !/\.d\.ts$/.test(f))
|
|
289
|
+
.filter((f) => !EXCLUDED_FROM_HYGIENE.test(f));
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* A changed path that is GONE is out of scope. One whose stat fails for any
|
|
293
|
+
* other reason (a parent directory that cannot be listed) is kept: its read
|
|
294
|
+
* then fails and it is reported unread — never dropped as if it were deleted.
|
|
295
|
+
*/
|
|
296
|
+
function presentOrUnknowable(abs) {
|
|
297
|
+
try {
|
|
298
|
+
statSync(abs);
|
|
299
|
+
return true;
|
|
300
|
+
}
|
|
301
|
+
catch (e) {
|
|
302
|
+
const code = e.code;
|
|
303
|
+
return code !== 'ENOENT' && code !== 'ENOTDIR';
|
|
304
|
+
}
|
|
305
|
+
}
|
|
263
306
|
function defaultRoots(projectRoot) {
|
|
264
307
|
const pkgsDir = nodePath.join(projectRoot, 'packages');
|
|
265
308
|
if (!existsSync(pkgsDir))
|
|
@@ -278,19 +321,36 @@ export function buildImportHygieneReport(projectRoot, options = {}) {
|
|
|
278
321
|
: loadAllowlist(projectRoot, options.allowlistFile);
|
|
279
322
|
const roots = options.roots ?? defaultRoots(projectRoot);
|
|
280
323
|
let scanned;
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
324
|
+
const unlistedDirs = [];
|
|
325
|
+
// An explicit `files` list — EVEN AN EMPTY ONE — is the whole request: `[]`
|
|
326
|
+
// scans nothing (an empty changeset), `undefined` scans the tree. Treating
|
|
327
|
+
// `[]` as "no filter" made `check imports --changed-only` over an empty
|
|
328
|
+
// changeset silently widen to the whole tree (round 11 review).
|
|
329
|
+
if (options.files !== undefined) {
|
|
330
|
+
scanned = importHygieneSubjects(projectRoot, options.files);
|
|
286
331
|
}
|
|
287
332
|
else {
|
|
288
|
-
scanned = roots.flatMap(listSourceFiles).filter((f) => !EXCLUDED_FROM_HYGIENE.test(f));
|
|
333
|
+
scanned = roots.flatMap((r) => listSourceFiles(r, unlistedDirs)).filter((f) => !EXCLUDED_FROM_HYGIENE.test(f));
|
|
289
334
|
}
|
|
290
335
|
const findings = [];
|
|
336
|
+
// A directory the walk could not list is one unexamined unit of scope each
|
|
337
|
+
// (`src/app/sub/`) — counted in `filesInScope` and named in `unread`, so
|
|
338
|
+
// `importHygieneCoverage` settles it NOT VERIFIED rather than a clean pass.
|
|
339
|
+
const unlisted = unlistedDirs
|
|
340
|
+
.map((d) => {
|
|
341
|
+
const rel = nodePath.relative(projectRoot, d).split(nodePath.sep).join('/');
|
|
342
|
+
return rel === '' ? './' : `${rel}/`;
|
|
343
|
+
})
|
|
344
|
+
.filter((d) => !EXCLUDED_FROM_HYGIENE.test(d));
|
|
345
|
+
const unread = [...unlisted];
|
|
291
346
|
const strictReasons = options.strictAllowlistReasons === true;
|
|
292
|
-
for (const f of scanned)
|
|
293
|
-
|
|
347
|
+
for (const f of scanned) {
|
|
348
|
+
const fileFindings = scanFile(projectRoot, f, allowlist, strictReasons);
|
|
349
|
+
if (fileFindings === null)
|
|
350
|
+
unread.push(nodePath.relative(projectRoot, f).split(nodePath.sep).join('/'));
|
|
351
|
+
else
|
|
352
|
+
findings.push(...fileFindings);
|
|
353
|
+
}
|
|
294
354
|
const counts = { total: findings.length };
|
|
295
355
|
for (const f of findings) {
|
|
296
356
|
counts[f.kind] = (counts[f.kind] ?? 0) + 1;
|
|
@@ -311,6 +371,30 @@ export function buildImportHygieneReport(projectRoot, options = {}) {
|
|
|
311
371
|
: verdict === 'warnings'
|
|
312
372
|
? 'Review dynamic imports; allowlist legitimate lazy-load boundaries with a reason.'
|
|
313
373
|
: 'shrk check imports --changed-only',
|
|
374
|
+
filesInScope: scanned.length + unlisted.length,
|
|
375
|
+
unread,
|
|
376
|
+
};
|
|
377
|
+
}
|
|
378
|
+
/**
|
|
379
|
+
* What an import-hygiene run examined, as one coverage record: in-scope files
|
|
380
|
+
* read of in-scope files, naming each unreadable one. THE fold finish,
|
|
381
|
+
* `diff-check` (CLI + MCP) and `check imports` settle on, so an unreadable
|
|
382
|
+
* changed file is NOT VERIFIED (2) on every surface — never a clean pass.
|
|
383
|
+
*/
|
|
384
|
+
export function importHygieneCoverage(report, unit = 'source files') {
|
|
385
|
+
const expected = report.filesInScope ?? 0;
|
|
386
|
+
const unread = report.unread ?? [];
|
|
387
|
+
return {
|
|
388
|
+
unit,
|
|
389
|
+
expected,
|
|
390
|
+
examined: Math.max(0, expected - unread.length),
|
|
391
|
+
...(unread.length > 0
|
|
392
|
+
? {
|
|
393
|
+
unexamined: unread.slice(0, 20),
|
|
394
|
+
unexaminedTotal: unread.length,
|
|
395
|
+
reason: 'unreadable, so their imports were never checked',
|
|
396
|
+
}
|
|
397
|
+
: {}),
|
|
314
398
|
};
|
|
315
399
|
}
|
|
316
400
|
/**
|
|
@@ -355,9 +439,19 @@ export function emitImportHygieneAllowlistDraft(report, options = {}) {
|
|
|
355
439
|
allow: entries,
|
|
356
440
|
};
|
|
357
441
|
}
|
|
358
|
-
|
|
442
|
+
/**
|
|
443
|
+
* Text rendering. `headline` overrides the header word — the CLI passes the
|
|
444
|
+
* SETTLED verdict (`NOT VERIFIED`) so a run that examined nothing, or not
|
|
445
|
+
* everything, never prints `(OK)` above its own NOT VERIFIED line.
|
|
446
|
+
*/
|
|
447
|
+
export function renderImportHygieneText(report, headline) {
|
|
359
448
|
const lines = [];
|
|
360
|
-
lines.push(`=== Import hygiene (${report.verdict.toUpperCase()}) ===`);
|
|
449
|
+
lines.push(`=== Import hygiene (${headline ?? report.verdict.toUpperCase()}) ===`);
|
|
450
|
+
if (report.filesInScope !== undefined)
|
|
451
|
+
lines.push(` files in scope ${report.filesInScope}`);
|
|
452
|
+
if (report.unread && report.unread.length > 0) {
|
|
453
|
+
lines.push(` unreadable ${report.unread.length} (${report.unread.slice(0, 5).join(', ')}${report.unread.length > 5 ? ', …' : ''})`);
|
|
454
|
+
}
|
|
361
455
|
lines.push(` scanned files (with findings) ${new Set(report.findings.map((f) => f.file)).size}`);
|
|
362
456
|
lines.push(` errors ${report.counts['error'] ?? 0}`);
|
|
363
457
|
lines.push(` warnings ${report.counts['warning'] ?? 0}`);
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
export * from './doctor-result.js';
|
|
2
|
+
export * from './doctor-verdict-kind.js';
|
|
3
|
+
export * from './i-doctor-verdict.js';
|
|
4
|
+
export * from './doctor-verdict.js';
|
|
5
|
+
export * from './quality-gate-status.js';
|
|
6
|
+
export * from './quality-gate-row-status.js';
|
|
2
7
|
export * from './code-intelligence-doctor.js';
|
|
3
8
|
export * from './project-overview.js';
|
|
4
9
|
export * from './sharkcraft-inspector.js';
|
|
@@ -8,6 +13,8 @@ export * from './agent-instructions.js';
|
|
|
8
13
|
export * from './action-hint-diagnostics.js';
|
|
9
14
|
export * from './ai-readiness.js';
|
|
10
15
|
export * from './pack-doctor.js';
|
|
16
|
+
export * from './pack-doctor-verdict.js';
|
|
17
|
+
export * from './i-pack-doctor-verdict.js';
|
|
11
18
|
export * from './task-packet.js';
|
|
12
19
|
export * from './context-tuning.js';
|
|
13
20
|
export * from './resolve-verification-commands.js';
|
|
@@ -36,6 +43,8 @@ export * from './adoption-merge-preview.js';
|
|
|
36
43
|
export * from './adoption-report-renderer.js';
|
|
37
44
|
export * from './adoption-check.js';
|
|
38
45
|
export * from './quality-report.js';
|
|
46
|
+
export * from './quality-gate-examination.js';
|
|
47
|
+
export * from './quality-report-coverage.js';
|
|
39
48
|
export * from './safety-audit.js';
|
|
40
49
|
export * from './onboarding-agent-import.js';
|
|
41
50
|
export * from './monorepo-onboarding.js';
|
|
@@ -53,6 +62,17 @@ export * from './dashboard/dashboard-data.js';
|
|
|
53
62
|
export * from './dashboard/dashboard-knowledge.js';
|
|
54
63
|
export * from './git-helpers.js';
|
|
55
64
|
export * from './boundaries-changed-only.js';
|
|
65
|
+
export * from './run-boundary-check.js';
|
|
66
|
+
export * from './boundary-check-options.model.js';
|
|
67
|
+
export * from './boundary-check-result.model.js';
|
|
68
|
+
export * from './boundary-rule-check.model.js';
|
|
69
|
+
export * from './boundary-rule-set-diff.model.js';
|
|
70
|
+
export * from './boundary-stale-exception-finding.model.js';
|
|
71
|
+
export * from './boundary-configuration-status.js';
|
|
72
|
+
export * from './boundary-configuration-status.model.js';
|
|
73
|
+
export * from './boundary-load-issue.model.js';
|
|
74
|
+
export * from './boundary-rule-sources.js';
|
|
75
|
+
export * from './boundary-rule-invalidation.model.js';
|
|
56
76
|
export * from './helper-registry.js';
|
|
57
77
|
export * from './pack-author-ux.js';
|
|
58
78
|
export * from './pack-test-runner.js';
|
|
@@ -100,6 +120,22 @@ export * from './playbook-script.js';
|
|
|
100
120
|
export * from './search-index.js';
|
|
101
121
|
export * from './search-tuning-registry.js';
|
|
102
122
|
export * from './search-tuning-explain.js';
|
|
123
|
+
export * from './search-document-prefix.js';
|
|
124
|
+
export * from './search-document-id.js';
|
|
125
|
+
export * from './tuning-query-tokens.js';
|
|
126
|
+
export * from './search-tuning-key-status.js';
|
|
127
|
+
export * from './search-tuning-key-resolution.js';
|
|
128
|
+
export * from './search-tuning-key-resolver.js';
|
|
129
|
+
export * from './i-search-tuning-lint-issue.js';
|
|
130
|
+
export * from './i-search-tuning-lint-report.js';
|
|
131
|
+
export * from './search-tuning-lint.js';
|
|
132
|
+
export * from './i-search-tuning-key-probe.js';
|
|
133
|
+
export * from './search-tuning-key-probes.js';
|
|
134
|
+
export * from './i-asset-doctor-flags.js';
|
|
135
|
+
export * from './asset-doctor-proposed-exit.js';
|
|
136
|
+
export * from './i-scaffold-pattern-doctor-report.js';
|
|
137
|
+
export * from './scaffold-pattern-doctor-report.js';
|
|
138
|
+
export * from './settled-unit-states.js';
|
|
103
139
|
export * from './agent-brief.js';
|
|
104
140
|
export * from './bundle-replay.js';
|
|
105
141
|
export * from './bundle-diff.js';
|
|
@@ -170,6 +206,34 @@ export * from './ingest-apply.js';
|
|
|
170
206
|
export * from './changed-scope.js';
|
|
171
207
|
export * from './doctor-suppressions.js';
|
|
172
208
|
export * from './knowledge-stale.js';
|
|
209
|
+
export * from './knowledge-entry-verdict.js';
|
|
210
|
+
export * from './knowledge-unverifiable-reason.js';
|
|
211
|
+
export * from './knowledge-entry-verdict-record.js';
|
|
212
|
+
export * from './knowledge-stale-coverage.js';
|
|
213
|
+
export * from './knowledge-kind-bucket.js';
|
|
214
|
+
export * from './knowledge-reference-kind-bucket.js';
|
|
215
|
+
export * from './knowledge-stale-advisory.js';
|
|
216
|
+
export * from './declared-reference-coverage.js';
|
|
217
|
+
export * from './knowledge-stale-gate.js';
|
|
218
|
+
export * from './knowledge-stale-gate-flags.js';
|
|
219
|
+
export * from './knowledge-stale-gate-input.js';
|
|
220
|
+
export * from './knowledge-stale-gate-result.js';
|
|
221
|
+
export * from './knowledge-stale-gate-rule.js';
|
|
222
|
+
export * from './knowledge-stale-gate-violation.js';
|
|
223
|
+
export * from './knowledge-stale-quality-gate.js';
|
|
224
|
+
export * from './declared-gate-plane-rules.js';
|
|
225
|
+
export * from './i-command-safety.js';
|
|
226
|
+
export * from './knowledge-advisory-code.js';
|
|
227
|
+
export * from './knowledge-aged-entry.js';
|
|
228
|
+
export * from './reference-failure.js';
|
|
229
|
+
export * from './reference-asset-kind.js';
|
|
230
|
+
export * from './reference-subject.js';
|
|
231
|
+
export * from './reference-content-check.js';
|
|
232
|
+
export * from './policy-declaration.js';
|
|
233
|
+
export * from './inspection-discovery.js';
|
|
234
|
+
export * from './knowledge-load-failure.js';
|
|
235
|
+
export * from './symbol-member-kind.js';
|
|
236
|
+
export * from './symbol-member-entry.js';
|
|
173
237
|
export * from './knowledge-rename.js';
|
|
174
238
|
export * from './template-drift.js';
|
|
175
239
|
export * from './barrel-operations.js';
|
|
@@ -203,10 +267,36 @@ export * from './acceptance-replay.js';
|
|
|
203
267
|
export * from './pack-helper-registry.js';
|
|
204
268
|
export * from './task-routing-hint-registry.js';
|
|
205
269
|
export * from './registration-hint-registry.js';
|
|
270
|
+
export * from './routing-recommends-channels.js';
|
|
271
|
+
export * from './registration-hint-discovery-status.js';
|
|
206
272
|
export * from './import-hygiene.js';
|
|
207
273
|
export * from './dev-cycle.js';
|
|
208
274
|
export * from './ci-predict.js';
|
|
209
275
|
export * from './pack-signature-status.js';
|
|
276
|
+
export * from './pack-asset-freshness.js';
|
|
277
|
+
export * from './contribution-load-failures.js';
|
|
278
|
+
export * from './i-contribution-entry-rejection.js';
|
|
279
|
+
export * from './i-contribution-accepted-entry.js';
|
|
280
|
+
export * from './i-contribution-file-issue.js';
|
|
281
|
+
export * from './i-registry-outcomes.js';
|
|
282
|
+
export * from './i-kind-outcomes.js';
|
|
283
|
+
export * from './framework-extractor-outcomes.js';
|
|
284
|
+
export * from './unresolvable-reason.js';
|
|
285
|
+
export * from './i-unresolvable-reference.js';
|
|
286
|
+
export * from './i-unresolvable-reference-scan.js';
|
|
287
|
+
export * from './i-contribution-file-report.js';
|
|
288
|
+
export * from './i-contributions-report.js';
|
|
289
|
+
export * from './contributions-report.js';
|
|
290
|
+
export * from './i-contribution-file-validation.js';
|
|
291
|
+
export * from './validate-contribution-file.js';
|
|
292
|
+
export * from './typecheck-files.js';
|
|
293
|
+
export * from './helper-view.js';
|
|
294
|
+
export * from './helper-catalog.js';
|
|
295
|
+
export * from './pack-helper-plan.js';
|
|
296
|
+
export * from './substitute-placeholders.js';
|
|
297
|
+
export * from './unregistered-exports.js';
|
|
298
|
+
export * from './pack-manifest-reader.js';
|
|
299
|
+
export * from './pack-typecheck.js';
|
|
210
300
|
export * from './rule-drift.js';
|
|
211
301
|
export * from './agent-task-prep.js';
|
|
212
302
|
export * from './uncertainty-report.js';
|
|
@@ -232,5 +322,56 @@ export * from './grounding/nx-projects.js';
|
|
|
232
322
|
export * from './why-file.js';
|
|
233
323
|
export * from './nearest-id.js';
|
|
234
324
|
export * from './reference-registry.js';
|
|
325
|
+
export * from './i-reference-kind-declaration.js';
|
|
326
|
+
export * from './reference-kind-declarations.js';
|
|
327
|
+
export * from './i-workspace-profile-payload.js';
|
|
328
|
+
export * from './probed-id-source.js';
|
|
329
|
+
export * from './i-probed-id-field.js';
|
|
330
|
+
export * from './probed-id-fields.js';
|
|
331
|
+
export * from './command-resolution-status.js';
|
|
332
|
+
export * from './i-command-resolution.js';
|
|
333
|
+
export * from './i-reference-warm-options.js';
|
|
334
|
+
export * from './i-command-resolve-options.js';
|
|
335
|
+
export * from './reference-id-status.js';
|
|
235
336
|
export * from './doc-references.js';
|
|
337
|
+
export * from './declared-cross-references.js';
|
|
338
|
+
export * from './declared-xref-status.js';
|
|
339
|
+
export * from './i-declared-xref-field.js';
|
|
340
|
+
export * from './i-declared-xref-issue.js';
|
|
341
|
+
export * from './i-declared-xref-report.js';
|
|
342
|
+
export * from './i-declared-xref-row.js';
|
|
343
|
+
export * from './split-identifier.js';
|
|
344
|
+
export * from './term-query.js';
|
|
345
|
+
export * from './match-terms.js';
|
|
346
|
+
export * from './query-intent-kind.js';
|
|
347
|
+
export * from './query-intent-result.js';
|
|
348
|
+
export * from './query-intent.js';
|
|
349
|
+
export * from './command-safety-level.js';
|
|
350
|
+
export * from './recommendation-source.js';
|
|
351
|
+
export * from './recommendation-suppression.js';
|
|
352
|
+
export * from './recommendation-candidate.js';
|
|
353
|
+
export * from './recommendation-confidence.js';
|
|
354
|
+
export * from './recommendation-ranking-options.js';
|
|
355
|
+
export * from './ranked-recommendations.js';
|
|
356
|
+
export * from './recommend-recipe.js';
|
|
357
|
+
export * from './recommend-recipes.js';
|
|
358
|
+
export * from './recommendation-ranking.js';
|
|
359
|
+
export * from './playbook-load-issue.js';
|
|
360
|
+
export * from './reuse/reuse-tokenize.js';
|
|
361
|
+
export * from './reuse/score-reuse-name.js';
|
|
362
|
+
export * from './reuse/reuse-match-detail.js';
|
|
363
|
+
export * from './reuse/score-reuse-primitive.js';
|
|
364
|
+
export * from './reuse/reuse-suggestion.js';
|
|
365
|
+
export * from './reuse/rank-reuse-suggestions.js';
|
|
366
|
+
export * from './reuse/reuse-candidate.js';
|
|
367
|
+
export * from './reuse/reuse-ranking.js';
|
|
368
|
+
export * from './reuse/rank-reuse-options.js';
|
|
369
|
+
export * from './reuse/rank-reuse-candidates.js';
|
|
370
|
+
export * from './reuse/reuse-curated-status.js';
|
|
371
|
+
export * from './reuse/reuse-curated-coverage.js';
|
|
372
|
+
export * from './reuse/reuse-symbol-lookup.js';
|
|
373
|
+
export * from './reuse/reuse-curated-resolution.js';
|
|
374
|
+
export * from './reuse/resolve-curated-reuse.js';
|
|
375
|
+
export * from './reuse/reuse-coverage-report.js';
|
|
376
|
+
export * from './reuse/compute-reuse-coverage.js';
|
|
236
377
|
//# sourceMappingURL=index.d.ts.map
|