@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
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* THE contributions report (round 12, ONE-CHANGE) — `shrk packs contributions`'
|
|
3
|
+
* `By file:` section and MCP `get_pack_contributions`' `report`.
|
|
4
|
+
*
|
|
5
|
+
* "Did what I wrote take effect?" has three columns per contributed file:
|
|
6
|
+
* entries ACCEPTED (the inventory's structural entries — every loader-backed
|
|
7
|
+
* kind is structural since 12.1e), entries REJECTED with every reason (THE
|
|
8
|
+
* rejection channel, carried by the inventory), and references that could not
|
|
9
|
+
* be checked because their kind's registry is empty or undeclarable (the
|
|
10
|
+
* self-config doctor's own reference probes, `collectUnresolvableReferences`).
|
|
11
|
+
* Nothing here resolves or loads anything itself.
|
|
12
|
+
*/
|
|
13
|
+
import { existsSync } from 'node:fs';
|
|
14
|
+
import * as nodePath from 'node:path';
|
|
15
|
+
import { CONTRIBUTION_FILE_KEYS } from '@shrkcrft/plugin-api';
|
|
16
|
+
import { ContributionKind } from "./contribution-kind.js";
|
|
17
|
+
import { contributionFileLabel, contributionKindOfLoader, formatEntryRejection } from "./contribution-load-failures.js";
|
|
18
|
+
import { buildPackContributionsInventoryAsync, contributionKindForSlot, } from "./pack-contributions-inventory.js";
|
|
19
|
+
import { collectUnresolvableReferences } from "./self-config-doctor-v2.js";
|
|
20
|
+
/** A reference-declaring asset kind → the contribution kind its file is, for a file no other evidence named. */
|
|
21
|
+
const SOURCE_KIND = {
|
|
22
|
+
'registration-hint': ContributionKind.RegistrationHint,
|
|
23
|
+
'routing-hint': ContributionKind.TaskRoutingHint,
|
|
24
|
+
convention: ContributionKind.Convention,
|
|
25
|
+
template: ContributionKind.Template,
|
|
26
|
+
knowledge: ContributionKind.Knowledge,
|
|
27
|
+
rule: ContributionKind.Rule,
|
|
28
|
+
'path-convention': ContributionKind.Path,
|
|
29
|
+
construct: ContributionKind.Construct,
|
|
30
|
+
'boundary-rule': ContributionKind.Boundary,
|
|
31
|
+
// Round 13: the scan covers search-tuning boost keys, as `search tuning doctor` does.
|
|
32
|
+
'search-tuning': ContributionKind.SearchTuning,
|
|
33
|
+
};
|
|
34
|
+
/** A load failure's loader `kind` → its contribution kind, through THE table (`contributionKindOfLoader`). */
|
|
35
|
+
function asKind(kind, fallback) {
|
|
36
|
+
return contributionKindOfLoader(kind) ?? fallback;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* The report from an already-built inventory and reference scan — the pure
|
|
40
|
+
* half; {@link buildContributionsReport} gathers both.
|
|
41
|
+
*/
|
|
42
|
+
export function contributionsReportOf(inspection, inventory, references) {
|
|
43
|
+
const rows = new Map();
|
|
44
|
+
const rel = (abs) => contributionFileLabel(inspection.projectRoot, abs);
|
|
45
|
+
const posix = (file) => file.split(nodePath.sep).join('/');
|
|
46
|
+
const rowFor = (file, kind, packageName) => {
|
|
47
|
+
const key = posix(file);
|
|
48
|
+
let row = rows.get(key);
|
|
49
|
+
if (!row) {
|
|
50
|
+
row = {
|
|
51
|
+
file: key,
|
|
52
|
+
kind,
|
|
53
|
+
...(packageName ? { packageName } : {}),
|
|
54
|
+
status: 'loaded',
|
|
55
|
+
acceptedIds: new Set(),
|
|
56
|
+
rejected: [],
|
|
57
|
+
unresolvable: new Map(),
|
|
58
|
+
};
|
|
59
|
+
rows.set(key, row);
|
|
60
|
+
}
|
|
61
|
+
if (!row.packageName && packageName)
|
|
62
|
+
row.packageName = packageName;
|
|
63
|
+
return row;
|
|
64
|
+
};
|
|
65
|
+
// 1) Every file a pack manifest declares (a missing one is a `missing` row).
|
|
66
|
+
for (const pack of inspection.packs.validPacks ?? []) {
|
|
67
|
+
const contributions = (pack.manifest?.contributions ?? {});
|
|
68
|
+
for (const slot of CONTRIBUTION_FILE_KEYS) {
|
|
69
|
+
const kind = contributionKindForSlot(slot);
|
|
70
|
+
if (!kind)
|
|
71
|
+
continue;
|
|
72
|
+
for (const r of contributions[slot] ?? []) {
|
|
73
|
+
const abs = nodePath.resolve(pack.packageRoot, r);
|
|
74
|
+
const row = rowFor(rel(abs), kind, pack.packageName);
|
|
75
|
+
if (!existsSync(abs))
|
|
76
|
+
row.status = 'missing';
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// 2) Accepted entries (structural) — and every file the inventory saw.
|
|
81
|
+
for (const e of inventory.entries) {
|
|
82
|
+
if (!e.sourceFile)
|
|
83
|
+
continue;
|
|
84
|
+
const row = rowFor(e.sourceFile, e.kind, e.packageName);
|
|
85
|
+
if (e.extractionMode === 'structural')
|
|
86
|
+
row.acceptedIds.add(e.id);
|
|
87
|
+
}
|
|
88
|
+
// 3) Rejected entries — THE rejection channel.
|
|
89
|
+
for (const r of inventory.rejections) {
|
|
90
|
+
rowFor(r.file, r.kind, r.packageName).rejected.push({
|
|
91
|
+
index: r.index,
|
|
92
|
+
...(r.exportName ? { exportName: r.exportName } : {}),
|
|
93
|
+
...(r.entryId !== undefined ? { entryId: r.entryId } : {}),
|
|
94
|
+
reasons: r.reasons,
|
|
95
|
+
cause: r.cause,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
// 4) Files that failed to load.
|
|
99
|
+
for (const f of inventory.loadFailures) {
|
|
100
|
+
const row = rowFor(f.file, asKind(f.kind, ContributionKind.Knowledge), f.packageName);
|
|
101
|
+
row.status = 'failed';
|
|
102
|
+
row.loadError = f.message;
|
|
103
|
+
}
|
|
104
|
+
// 5) References that could not be checked, grouped per (source, field, kind, reason).
|
|
105
|
+
let unattributed = 0;
|
|
106
|
+
for (const u of references.references) {
|
|
107
|
+
if (!u.file) {
|
|
108
|
+
unattributed += 1;
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
const row = rowFor(rel(u.file), SOURCE_KIND[u.sourceKind] ?? ContributionKind.Knowledge, u.packageName);
|
|
112
|
+
const key = `${u.sourceId}|${u.field}|${u.kind}|${u.reason}`;
|
|
113
|
+
const g = row.unresolvable.get(key) ?? { sourceId: u.sourceId, field: u.field, kind: u.kind, ids: [], reason: u.reason };
|
|
114
|
+
g.ids.push(u.id);
|
|
115
|
+
row.unresolvable.set(key, g);
|
|
116
|
+
}
|
|
117
|
+
const files = [...rows.values()]
|
|
118
|
+
.map((r) => {
|
|
119
|
+
const accepted = r.acceptedIds.size;
|
|
120
|
+
return {
|
|
121
|
+
file: r.file,
|
|
122
|
+
kind: r.kind,
|
|
123
|
+
...(r.packageName ? { packageName: r.packageName } : {}),
|
|
124
|
+
source: r.packageName ? 'pack' : 'local',
|
|
125
|
+
status: r.status,
|
|
126
|
+
declared: accepted + r.rejected.length,
|
|
127
|
+
accepted,
|
|
128
|
+
acceptedIds: [...r.acceptedIds].sort(),
|
|
129
|
+
rejected: [...r.rejected].sort((a, b) => a.index - b.index),
|
|
130
|
+
...(r.loadError !== undefined ? { loadError: r.loadError } : {}),
|
|
131
|
+
unresolvableReferences: [...r.unresolvable.values()].map((g) => ({ ...g, ids: [...g.ids] })),
|
|
132
|
+
};
|
|
133
|
+
})
|
|
134
|
+
.sort((a, b) => a.file.localeCompare(b.file) || a.kind.localeCompare(b.kind));
|
|
135
|
+
return summarise(files, references.expected, unattributed);
|
|
136
|
+
}
|
|
137
|
+
/** Totals + THE reference coverage over `files` (`probed` = every reference probed in view). */
|
|
138
|
+
function summarise(files, probed, unattributed) {
|
|
139
|
+
const unresolvable = files.reduce((n, f) => n + f.unresolvableReferences.reduce((m, g) => m + g.ids.length, 0), 0) + unattributed;
|
|
140
|
+
const labels = files.flatMap((f) => f.unresolvableReferences.flatMap((g) => g.ids.map((id) => `${f.file}: ${g.sourceId} ${g.field} → ${g.kind} ${id}`)));
|
|
141
|
+
const referenceCoverage = probed > 0
|
|
142
|
+
? {
|
|
143
|
+
subject: 'contributed references',
|
|
144
|
+
unit: 'references',
|
|
145
|
+
expected: probed,
|
|
146
|
+
examined: Math.max(0, probed - unresolvable),
|
|
147
|
+
...(unresolvable > 0 ? { unexamined: labels.slice(0, 20), unexaminedTotal: unresolvable } : {}),
|
|
148
|
+
reason: "could not be checked — their kind's registry is empty in this workspace, or nothing can declare it",
|
|
149
|
+
}
|
|
150
|
+
: undefined;
|
|
151
|
+
return {
|
|
152
|
+
files,
|
|
153
|
+
totals: {
|
|
154
|
+
files: files.length,
|
|
155
|
+
declared: files.reduce((n, f) => n + f.declared, 0),
|
|
156
|
+
accepted: files.reduce((n, f) => n + f.accepted, 0),
|
|
157
|
+
rejected: files.reduce((n, f) => n + f.rejected.length, 0),
|
|
158
|
+
loadFailed: files.filter((f) => f.status === 'failed').length,
|
|
159
|
+
missing: files.filter((f) => f.status === 'missing').length,
|
|
160
|
+
unresolvable,
|
|
161
|
+
},
|
|
162
|
+
...(referenceCoverage ? { referenceCoverage } : {}),
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* The report narrowed to `--pack` / `--kind`. A narrowed view settles on the
|
|
167
|
+
* references IN VIEW: its coverage is the view's unresolvable references
|
|
168
|
+
* (examined 0 of them), so a filter can never borrow another file's pass.
|
|
169
|
+
*/
|
|
170
|
+
export function filterContributionsReport(report, filter) {
|
|
171
|
+
if (!filter.pack && !filter.kind)
|
|
172
|
+
return report;
|
|
173
|
+
const files = report.files.filter((f) => (!filter.pack || f.packageName === filter.pack) && (!filter.kind || f.kind === filter.kind));
|
|
174
|
+
const inView = files.reduce((n, f) => n + f.unresolvableReferences.reduce((m, g) => m + g.ids.length, 0), 0);
|
|
175
|
+
return summarise(files, inView, 0);
|
|
176
|
+
}
|
|
177
|
+
/** Every contributed file, accepted vs rejected vs unresolvable. */
|
|
178
|
+
export async function buildContributionsReport(inspection, options = {}) {
|
|
179
|
+
const inventory = options.inventory ?? (await buildPackContributionsInventoryAsync(inspection));
|
|
180
|
+
const references = options.references ?? (await collectUnresolvableReferences(inspection));
|
|
181
|
+
return contributionsReportOf(inspection, inventory, references);
|
|
182
|
+
}
|
|
183
|
+
function fileMark(f) {
|
|
184
|
+
if (f.status !== 'loaded' || f.rejected.length > 0)
|
|
185
|
+
return '✗';
|
|
186
|
+
return f.unresolvableReferences.length > 0 ? '~' : '✓';
|
|
187
|
+
}
|
|
188
|
+
function fileSummary(f) {
|
|
189
|
+
if (f.status === 'failed')
|
|
190
|
+
return `FAILED TO LOAD — ${f.loadError ?? 'import error'}`;
|
|
191
|
+
if (f.status === 'missing')
|
|
192
|
+
return 'MISSING on disk — nothing in it takes effect';
|
|
193
|
+
const parts = [`${f.declared} declared`, `${f.accepted} accepted`];
|
|
194
|
+
if (f.rejected.length > 0)
|
|
195
|
+
parts.push(`${f.rejected.length} rejected`);
|
|
196
|
+
const u = f.unresolvableReferences.reduce((n, g) => n + g.ids.length, 0);
|
|
197
|
+
if (u > 0)
|
|
198
|
+
parts.push(`${u} unresolvable reference(s)`);
|
|
199
|
+
return parts.join(' · ');
|
|
200
|
+
}
|
|
201
|
+
/** The `By file:` text section (after `By kind:`). */
|
|
202
|
+
export function renderContributionsByFileText(report) {
|
|
203
|
+
const lines = [];
|
|
204
|
+
const t = report.totals;
|
|
205
|
+
lines.push(`By file (${t.files}): ${t.declared} declared · ${t.accepted} accepted · ${t.rejected} rejected${t.loadFailed > 0 ? ` · ${t.loadFailed} failed to load` : ''}${t.missing > 0 ? ` · ${t.missing} missing` : ''}${t.unresolvable > 0 ? ` · ${t.unresolvable} unresolvable reference(s)` : ''}`);
|
|
206
|
+
for (const f of report.files) {
|
|
207
|
+
lines.push(` ${fileMark(f)} ${f.file} ${f.kind}${f.packageName ? ` [${f.packageName}]` : ''} ${fileSummary(f)}`);
|
|
208
|
+
for (const r of f.rejected)
|
|
209
|
+
lines.push(` rejected ${formatEntryRejection(r)}`);
|
|
210
|
+
for (const g of f.unresolvableReferences) {
|
|
211
|
+
lines.push(` unresolvable ${g.sourceId} ${g.field} → ${g.kind} ${g.ids.map((id) => `'${id}'`).join(', ')} — ${g.reason === 'undeclarable-kind' ? 'no registry can ever hold this kind' : "this kind's registry is empty here"}`);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
return lines.join('\n') + '\n';
|
|
215
|
+
}
|
|
216
|
+
/** The `## By file` markdown section. */
|
|
217
|
+
export function renderContributionsByFileMarkdown(report) {
|
|
218
|
+
const lines = ['## By file', ''];
|
|
219
|
+
if (report.files.length === 0) {
|
|
220
|
+
lines.push('None.');
|
|
221
|
+
return lines.join('\n') + '\n';
|
|
222
|
+
}
|
|
223
|
+
lines.push('| File | Kind | Pack | Status | Declared | Accepted | Rejected | Unresolvable |');
|
|
224
|
+
lines.push('| --- | --- | --- | --- | --- | --- | --- | --- |');
|
|
225
|
+
for (const f of report.files) {
|
|
226
|
+
const u = f.unresolvableReferences.reduce((n, g) => n + g.ids.length, 0);
|
|
227
|
+
lines.push(`| \`${f.file}\` | ${f.kind} | ${f.packageName ?? ''} | ${f.status} | ${f.declared} | ${f.accepted} | ${f.rejected.length} | ${u} |`);
|
|
228
|
+
}
|
|
229
|
+
const detail = report.files.filter((f) => f.rejected.length > 0 || f.unresolvableReferences.length > 0);
|
|
230
|
+
if (detail.length > 0) {
|
|
231
|
+
lines.push('');
|
|
232
|
+
for (const f of detail) {
|
|
233
|
+
lines.push(`- \`${f.file}\``);
|
|
234
|
+
for (const r of f.rejected)
|
|
235
|
+
lines.push(` - rejected: ${formatEntryRejection(r)}`);
|
|
236
|
+
for (const g of f.unresolvableReferences) {
|
|
237
|
+
lines.push(` - unresolvable: ${g.sourceId} ${g.field} → ${g.kind} ${g.ids.join(', ')} (${g.reason})`);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
return lines.join('\n') + '\n';
|
|
242
|
+
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type IConvention } from '@shrkcrft/plugin-api';
|
|
2
2
|
import type { ISharkcraftInspection } from './sharkcraft-inspector.js';
|
|
3
|
+
import { type IRejectedEntry } from '@shrkcrft/core';
|
|
3
4
|
export declare const CONVENTION_REGISTRY_SCHEMA = "sharkcraft.convention-registry/v1";
|
|
4
5
|
export declare enum ConventionSource {
|
|
5
6
|
Local = "local",
|
|
@@ -19,9 +20,30 @@ export interface IConventionDoctorIssue {
|
|
|
19
20
|
readonly conventionId?: string;
|
|
20
21
|
readonly source?: string;
|
|
21
22
|
}
|
|
23
|
+
/** The convention FILES a load discovered, and the ones it could not read — the doctor's coverage. */
|
|
24
|
+
export interface IConventionFileScan {
|
|
25
|
+
/** Every convention file the load tried (local defaults, `conventionFiles`, pack `conventionFiles`). */
|
|
26
|
+
readonly discovered: number;
|
|
27
|
+
/** Discovered but never read (missing, or failed to import) — `file — reason`, project-relative. */
|
|
28
|
+
readonly unread: readonly string[];
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* THE convention acceptance predicate (round 12, 12.1): every error of
|
|
32
|
+
* `validateConvention`, `<field>: <message>` — `[]` means accepted. The
|
|
33
|
+
* loader and `packs test --load` refuse exactly the same entries.
|
|
34
|
+
*/
|
|
35
|
+
export declare function conventionRejectionReasons(raw: unknown): readonly string[];
|
|
22
36
|
export declare function loadConventions(inspection: ISharkcraftInspection): Promise<{
|
|
23
37
|
entries: readonly IConventionEntry[];
|
|
24
38
|
issues: readonly IConventionDoctorIssue[];
|
|
39
|
+
files: IConventionFileScan;
|
|
40
|
+
/**
|
|
41
|
+
* Every declared convention the loader refused (round 12, 12.1) — invalid
|
|
42
|
+
* or a duplicate id — with its position and every reason. The `issues`
|
|
43
|
+
* above still carry the per-field `invalid-convention` lines `conventions
|
|
44
|
+
* doctor` prints; this is the record THE rejection channel lifts.
|
|
45
|
+
*/
|
|
46
|
+
rejected: readonly IRejectedEntry[];
|
|
25
47
|
}>;
|
|
26
48
|
export declare function listConventions(inspection: ISharkcraftInspection): Promise<readonly IConventionEntry[]>;
|
|
27
49
|
export declare function findConvention(inspection: ISharkcraftInspection, id: string): Promise<IConventionEntry | null>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convention-registry.d.ts","sourceRoot":"","sources":["../src/convention-registry.ts"],"names":[],"mappings":"AAOA,OAAO,EAEL,KAAK,WAAW,EACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"convention-registry.d.ts","sourceRoot":"","sources":["../src/convention-registry.ts"],"names":[],"mappings":"AAOA,OAAO,EAEL,KAAK,WAAW,EACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,gBAAgB,CAAC;AAExB,eAAO,MAAM,0BAA0B,sCAAsC,CAAC;AAE9E,oBAAY,gBAAgB;IAC1B,KAAK,UAAU;IACf,IAAI,SAAS;IACb,OAAO,YAAY;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;IAChD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,sGAAsG;AACtG,MAAM,WAAW,mBAAmB;IAClC,wGAAwG;IACxG,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,oGAAoG;IACpG,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC;AAMD;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,OAAO,GAAG,SAAS,MAAM,EAAE,CAK1E;AAyBD,wBAAsB,eAAe,CACnC,UAAU,EAAE,qBAAqB,GAChC,OAAO,CAAC;IACT,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACrC,MAAM,EAAE,SAAS,sBAAsB,EAAE,CAAC;IAC1C,KAAK,EAAE,mBAAmB,CAAC;IAC3B;;;;;OAKG;IACH,QAAQ,EAAE,SAAS,cAAc,EAAE,CAAC;CACrC,CAAC,CA0HD;AAED,wBAAsB,eAAe,CACnC,UAAU,EAAE,qBAAqB,GAChC,OAAO,CAAC,SAAS,gBAAgB,EAAE,CAAC,CAGtC;AAED,wBAAsB,cAAc,CAClC,UAAU,EAAE,qBAAqB,EACjC,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAGlC;AAED,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,qBAAqB,GAChC,OAAO,CAAC,SAAS,sBAAsB,EAAE,CAAC,CAG5C;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;IAChD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,MAAM,EAAE,gCAAgC,CAAC;IAClD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAC9C,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,gBAAgB,CAAC;CAC9C;AAiBD,wBAAsB,4BAA4B,CAChD,UAAU,EAAE,qBAAqB,EACjC,KAAK,EAAE,SAAS,MAAM,EAAE,GACvB,OAAO,CAAC,sBAAsB,CAAC,CAqCjC"}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
import { existsSync } from 'node:fs';
|
|
7
7
|
import * as nodePath from 'node:path';
|
|
8
8
|
import { validateConvention, } from '@shrkcrft/plugin-api';
|
|
9
|
-
import { importModuleViaLoader } from '@shrkcrft/core';
|
|
9
|
+
import { importModuleViaLoader, readContributionExport, RejectionCause, } from '@shrkcrft/core';
|
|
10
10
|
export const CONVENTION_REGISTRY_SCHEMA = 'sharkcraft.convention-registry/v1';
|
|
11
11
|
export var ConventionSource;
|
|
12
12
|
(function (ConventionSource) {
|
|
@@ -14,15 +14,26 @@ export var ConventionSource;
|
|
|
14
14
|
ConventionSource["Pack"] = "pack";
|
|
15
15
|
ConventionSource["Fixture"] = "fixture";
|
|
16
16
|
})(ConventionSource || (ConventionSource = {}));
|
|
17
|
-
async function
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
17
|
+
async function importConventions(file) {
|
|
18
|
+
return readContributionExport(await importModuleViaLoader(file), { namedKeys: ['conventions'] });
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* THE convention acceptance predicate (round 12, 12.1): every error of
|
|
22
|
+
* `validateConvention`, `<field>: <message>` — `[]` means accepted. The
|
|
23
|
+
* loader and `packs test --load` refuse exactly the same entries.
|
|
24
|
+
*/
|
|
25
|
+
export function conventionRejectionReasons(raw) {
|
|
26
|
+
if (!raw || typeof raw !== 'object' || Array.isArray(raw))
|
|
27
|
+
return ['(entry): must be an object'];
|
|
28
|
+
const v = validateConvention(raw);
|
|
29
|
+
if (v.valid)
|
|
30
|
+
return [];
|
|
31
|
+
return v.issues.length > 0 ? v.issues.map((i) => `${i.field}: ${i.message}`) : ['(entry): failed validation'];
|
|
32
|
+
}
|
|
33
|
+
/** A declared entry's string `id`, when it has one. */
|
|
34
|
+
function entryIdOf(raw) {
|
|
35
|
+
const id = raw && typeof raw === 'object' ? raw.id : undefined;
|
|
36
|
+
return typeof id === 'string' ? id : undefined;
|
|
26
37
|
}
|
|
27
38
|
function localFiles(inspection) {
|
|
28
39
|
const out = [];
|
|
@@ -34,56 +45,84 @@ function localFiles(inspection) {
|
|
|
34
45
|
if (existsSync(abs))
|
|
35
46
|
out.push(abs);
|
|
36
47
|
}
|
|
37
|
-
|
|
38
|
-
for (const rel of
|
|
48
|
+
// `conventionFiles` is a declared config key (typed, schema-validated).
|
|
49
|
+
for (const rel of inspection.config?.conventionFiles ?? []) {
|
|
39
50
|
out.push(nodePath.isAbsolute(rel) ? rel : nodePath.join(dir, rel));
|
|
40
51
|
}
|
|
41
|
-
|
|
52
|
+
// One scan per DISTINCT file: `conventionFiles: ['conventions.ts']` names the
|
|
53
|
+
// default file again, and loading it twice listed every doctor issue twice.
|
|
54
|
+
return [...new Set(out.map((f) => nodePath.resolve(f)))];
|
|
42
55
|
}
|
|
43
56
|
export async function loadConventions(inspection) {
|
|
44
57
|
const entries = [];
|
|
45
58
|
const issues = [];
|
|
46
|
-
const
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
59
|
+
const rejected = [];
|
|
60
|
+
const seen = new Map();
|
|
61
|
+
let discovered = 0;
|
|
62
|
+
const unread = [];
|
|
63
|
+
const rel = (file) => nodePath.relative(inspection.projectRoot, file) || file;
|
|
64
|
+
const ingest = (raw, source, packageName, sourceFile, at) => {
|
|
65
|
+
const id = entryIdOf(raw);
|
|
66
|
+
// Shape warnings never drop the convention; they are said out loud.
|
|
67
|
+
if (raw && typeof raw === 'object' && !Array.isArray(raw)) {
|
|
68
|
+
for (const w of validateConvention(raw).warnings) {
|
|
51
69
|
issues.push({
|
|
52
|
-
severity: '
|
|
53
|
-
code: '
|
|
54
|
-
message: `${
|
|
55
|
-
conventionId:
|
|
70
|
+
severity: 'warning',
|
|
71
|
+
code: 'convention-shape',
|
|
72
|
+
message: `${w.field}: ${w.message}`,
|
|
73
|
+
conventionId: id,
|
|
56
74
|
source: sourceFile,
|
|
57
75
|
});
|
|
58
76
|
}
|
|
77
|
+
}
|
|
78
|
+
const reasons = conventionRejectionReasons(raw);
|
|
79
|
+
if (reasons.length > 0) {
|
|
80
|
+
for (const r of reasons) {
|
|
81
|
+
issues.push({ severity: 'error', code: 'invalid-convention', message: r, conventionId: id, source: sourceFile });
|
|
82
|
+
}
|
|
83
|
+
rejected.push({ ...at, ...(id !== undefined ? { entryId: id } : {}), reasons, cause: RejectionCause.Invalid });
|
|
59
84
|
return;
|
|
60
85
|
}
|
|
61
|
-
|
|
86
|
+
const conv = raw;
|
|
87
|
+
const prev = seen.get(conv.id);
|
|
88
|
+
if (prev !== undefined) {
|
|
62
89
|
issues.push({
|
|
63
90
|
severity: 'error',
|
|
64
91
|
code: 'duplicate-id',
|
|
65
|
-
message: `Convention "${
|
|
66
|
-
conventionId:
|
|
92
|
+
message: `Convention "${conv.id}" already loaded; skipping ${sourceFile}.`,
|
|
93
|
+
conventionId: conv.id,
|
|
67
94
|
source: sourceFile,
|
|
68
95
|
});
|
|
96
|
+
rejected.push({
|
|
97
|
+
...at,
|
|
98
|
+
entryId: conv.id,
|
|
99
|
+
reasons: [`id: "${conv.id}" is already declared in ${prev}`],
|
|
100
|
+
cause: RejectionCause.DuplicateId,
|
|
101
|
+
});
|
|
69
102
|
return;
|
|
70
103
|
}
|
|
71
|
-
seen.
|
|
104
|
+
seen.set(conv.id, sourceFile);
|
|
72
105
|
entries.push({
|
|
73
|
-
convention:
|
|
106
|
+
convention: conv,
|
|
74
107
|
source,
|
|
75
108
|
...(packageName ? { packageName } : {}),
|
|
76
109
|
sourceFile,
|
|
77
110
|
});
|
|
78
111
|
};
|
|
112
|
+
const ingestAll = (exp, file, source, packageName, sourceFile) => {
|
|
113
|
+
exp.items.forEach((c, i) => ingest(c, source, packageName, sourceFile, {
|
|
114
|
+
file,
|
|
115
|
+
index: exp.single ? -1 : i,
|
|
116
|
+
...(exp.exportName ? { exportName: exp.exportName } : {}),
|
|
117
|
+
}));
|
|
118
|
+
};
|
|
79
119
|
for (const file of localFiles(inspection)) {
|
|
120
|
+
discovered += 1;
|
|
80
121
|
try {
|
|
81
|
-
|
|
82
|
-
const rel = nodePath.relative(inspection.projectRoot, file) || file;
|
|
83
|
-
for (const c of list)
|
|
84
|
-
ingest(c, ConventionSource.Local, undefined, rel);
|
|
122
|
+
ingestAll(await importConventions(file), file, ConventionSource.Local, undefined, rel(file));
|
|
85
123
|
}
|
|
86
124
|
catch (e) {
|
|
125
|
+
unread.push(`${rel(file)} — failed to load`);
|
|
87
126
|
issues.push({
|
|
88
127
|
severity: 'warning',
|
|
89
128
|
code: 'load-failed',
|
|
@@ -94,33 +133,34 @@ export async function loadConventions(inspection) {
|
|
|
94
133
|
}
|
|
95
134
|
for (const pack of inspection.packs.validPacks ?? []) {
|
|
96
135
|
const contributions = (pack.manifest?.contributions ?? {});
|
|
97
|
-
for (const
|
|
98
|
-
|
|
136
|
+
for (const packRel of contributions.conventionFiles ?? []) {
|
|
137
|
+
discovered += 1;
|
|
138
|
+
const file = nodePath.resolve(pack.packageRoot, packRel);
|
|
99
139
|
if (!existsSync(file)) {
|
|
140
|
+
unread.push(`${rel(file)} — missing (declared by ${pack.packageName})`);
|
|
100
141
|
issues.push({
|
|
101
142
|
severity: 'warning',
|
|
102
143
|
code: 'missing-file',
|
|
103
|
-
message: `Pack ${pack.packageName} declares ${
|
|
144
|
+
message: `Pack ${pack.packageName} declares ${packRel} but file is missing.`,
|
|
104
145
|
source: file,
|
|
105
146
|
});
|
|
106
147
|
continue;
|
|
107
148
|
}
|
|
108
149
|
try {
|
|
109
|
-
|
|
110
|
-
for (const c of list)
|
|
111
|
-
ingest(c, ConventionSource.Pack, pack.packageName, rel);
|
|
150
|
+
ingestAll(await importConventions(file), file, ConventionSource.Pack, pack.packageName, packRel);
|
|
112
151
|
}
|
|
113
152
|
catch (e) {
|
|
153
|
+
unread.push(`${rel(file)} — failed to load (${pack.packageName})`);
|
|
114
154
|
issues.push({
|
|
115
155
|
severity: 'warning',
|
|
116
156
|
code: 'load-failed',
|
|
117
|
-
message: `Pack ${pack.packageName} (${
|
|
157
|
+
message: `Pack ${pack.packageName} (${packRel}): ${e.message}`,
|
|
118
158
|
source: file,
|
|
119
159
|
});
|
|
120
160
|
}
|
|
121
161
|
}
|
|
122
162
|
}
|
|
123
|
-
return { entries, issues };
|
|
163
|
+
return { entries, issues, files: { discovered, unread }, rejected };
|
|
124
164
|
}
|
|
125
165
|
export async function listConventions(inspection) {
|
|
126
166
|
const { entries } = await loadConventions(inspection);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coverage-report.d.ts","sourceRoot":"","sources":["../src/coverage-report.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"coverage-report.d.ts","sourceRoot":"","sources":["../src/coverage-report.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAIvE,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,yBAAyB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,iBAAiB,EAAE,CAAC;IAChC,sCAAsC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,6BAA6B;IAC7B,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAOD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,qBAAqB,GAAG,eAAe,CA0NtF"}
|
package/dist/coverage-report.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { hasActionHints, hasMeaningfulActionHints, KNOWLEDGE_TYPES_NO_ACTION, } from '@shrkcrft/knowledge';
|
|
2
2
|
import { resolvePreset, resolvePresetReferences } from '@shrkcrft/presets';
|
|
3
3
|
import { inspectionReferenceLookup } from "./reference-lookup.js";
|
|
4
|
+
import { referenceIdExists } from "./reference-registry.js";
|
|
4
5
|
function pct(covered, total) {
|
|
5
6
|
if (total === 0)
|
|
6
7
|
return 100;
|
|
@@ -72,8 +73,6 @@ export function buildCoverageReport(inspection) {
|
|
|
72
73
|
});
|
|
73
74
|
const actionable = eligible.filter((e) => e.noAction !== true && !KNOWLEDGE_TYPES_NO_ACTION.has(e.type));
|
|
74
75
|
const total = actionable.length;
|
|
75
|
-
const knowledgeIds = new Set(inspection.knowledgeEntries.map((x) => x.id));
|
|
76
|
-
const templateIds = new Set(inspection.templates.map((t) => t.id));
|
|
77
76
|
const missing = [];
|
|
78
77
|
let covered = 0;
|
|
79
78
|
for (const e of actionable) {
|
|
@@ -83,10 +82,11 @@ export function buildCoverageReport(inspection) {
|
|
|
83
82
|
}
|
|
84
83
|
// Reward RESOLVED cross-references: a hint whose related ids actually
|
|
85
84
|
// point at real entries/templates is substantive even without a command.
|
|
85
|
+
// Resolved through THE reference registry, not private id sets.
|
|
86
86
|
const a = e.actionHints;
|
|
87
87
|
const resolvedXref = !!a &&
|
|
88
|
-
((a.relatedKnowledge?.some((id) =>
|
|
89
|
-
(a.relatedTemplates?.some((id) =>
|
|
88
|
+
((a.relatedKnowledge?.some((id) => referenceIdExists(inspection, 'knowledge', id)) ?? false) ||
|
|
89
|
+
(a.relatedTemplates?.some((id) => referenceIdExists(inspection, 'template', id)) ?? false));
|
|
90
90
|
if (resolvedXref) {
|
|
91
91
|
covered += 1;
|
|
92
92
|
continue;
|
|
@@ -119,8 +119,8 @@ export function buildCoverageReport(inspection) {
|
|
|
119
119
|
missing.push(`${p.id} — no step references`);
|
|
120
120
|
continue;
|
|
121
121
|
}
|
|
122
|
-
const allResolve = refs.every((id) => inspection
|
|
123
|
-
inspection
|
|
122
|
+
const allResolve = refs.every((id) => referenceIdExists(inspection, 'template', id) ||
|
|
123
|
+
referenceIdExists(inspection, 'knowledge', id));
|
|
124
124
|
if (allResolve)
|
|
125
125
|
covered += 1;
|
|
126
126
|
else
|
package/dist/custom-checks.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type IKnowledgeEntry } from '@shrkcrft/knowledge';
|
|
2
|
+
import type { ISharkcraftInspection } from './sharkcraft-inspector.js';
|
|
2
3
|
export declare const CUSTOM_CHECK_REPORT_SCHEMA = "sharkcraft.custom-check/v1";
|
|
3
4
|
export declare const CUSTOM_CHECKS_REGISTRY_SCHEMA = "sharkcraft.custom-checks-registry/v1";
|
|
4
5
|
export declare enum CustomCheckScope {
|
|
@@ -70,6 +71,19 @@ export interface ICustomCheckRegistryEntry {
|
|
|
70
71
|
/** Validation findings about the descriptor itself. */
|
|
71
72
|
warnings: readonly string[];
|
|
72
73
|
}
|
|
74
|
+
/** A `metadata.checks` declaration the registry found but does not register — it can never run. */
|
|
75
|
+
export interface ICustomCheckIgnoredDeclaration {
|
|
76
|
+
/** The entry that declared it. */
|
|
77
|
+
entryId: string;
|
|
78
|
+
/** Its knowledge `type` (`'rule'` only for a Markdown rule whose metadata the loader dropped). */
|
|
79
|
+
entryType: string;
|
|
80
|
+
/** The declaring file, project-relative when the root is known. */
|
|
81
|
+
source?: string;
|
|
82
|
+
/** Why it is not registered, and what to do instead. */
|
|
83
|
+
reason: string;
|
|
84
|
+
/** The check ids it declared, when readable — `checks run <id>` names where they went. */
|
|
85
|
+
checkIds: readonly string[];
|
|
86
|
+
}
|
|
73
87
|
export interface ICustomCheckRegistry {
|
|
74
88
|
schema: typeof CUSTOM_CHECKS_REGISTRY_SCHEMA;
|
|
75
89
|
generatedAt: string;
|
|
@@ -78,25 +92,70 @@ export interface ICustomCheckRegistry {
|
|
|
78
92
|
id: string;
|
|
79
93
|
ruleIds: readonly string[];
|
|
80
94
|
}[];
|
|
95
|
+
/** Declared on a rule, but unusable (no id, no command, a non-array `metadata.checks`). */
|
|
81
96
|
invalid: readonly {
|
|
82
97
|
ruleId: string;
|
|
83
98
|
reason: string;
|
|
99
|
+
source?: string;
|
|
100
|
+
checkId?: string;
|
|
84
101
|
}[];
|
|
102
|
+
/** Declared where the registry does not read (a non-rule entry, a Markdown rule). */
|
|
103
|
+
ignored: readonly ICustomCheckIgnoredDeclaration[];
|
|
104
|
+
/** `type: 'rule'` entries scanned — via {@link isRuleEntry}, the set `shrk rules list` shows. */
|
|
105
|
+
scannedRules: number;
|
|
106
|
+
}
|
|
107
|
+
/** The inspection-free inputs of {@link buildCustomChecksRegistry}. */
|
|
108
|
+
export interface IBuildCustomChecksOptions {
|
|
109
|
+
/** Makes each declaration's `source` project-relative. */
|
|
110
|
+
readonly projectRoot?: string;
|
|
85
111
|
}
|
|
86
112
|
/** Read the descriptors a rule declares under `metadata.checks`. */
|
|
87
113
|
export declare function readDescriptorsFromRule(rule: IKnowledgeEntry): readonly ICustomCheckDescriptor[];
|
|
88
|
-
export declare function buildCustomChecksRegistry(entries: readonly IKnowledgeEntry[]): ICustomCheckRegistry;
|
|
114
|
+
export declare function buildCustomChecksRegistry(entries: readonly IKnowledgeEntry[], options?: IBuildCustomChecksOptions): ICustomCheckRegistry;
|
|
115
|
+
/**
|
|
116
|
+
* Every declaration the registry saw: registered + invalid + ignored (an
|
|
117
|
+
* ignored entry whose ids are unreadable still counts as one). The `expected`
|
|
118
|
+
* of the doctor's coverage — 0 means nothing was declared at all.
|
|
119
|
+
*/
|
|
120
|
+
export declare function declaredCustomCheckCount(registry: ICustomCheckRegistry): number;
|
|
121
|
+
/** Where `metadata.checks[]` is read from — what the empty state names instead of "add it to a rule". */
|
|
122
|
+
export interface ICustomCheckScanSurface {
|
|
123
|
+
/** Project-relative TypeScript files (that exist — what the loader reads) whose `type: 'rule'` entries are scanned. */
|
|
124
|
+
readonly files: readonly {
|
|
125
|
+
readonly file: string;
|
|
126
|
+
readonly via: string;
|
|
127
|
+
}[];
|
|
128
|
+
/** Existing Markdown files listed as knowledge / rule sources — their entries cannot carry metadata. */
|
|
129
|
+
readonly markdownFiles: readonly string[];
|
|
130
|
+
/** `type: 'rule'` entries that came from Markdown. */
|
|
131
|
+
readonly markdownRules: number;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* The concrete surface the custom-checks registry scans: local `ruleFiles` /
|
|
135
|
+
* `knowledgeFiles` / `docsFiles` and every valid pack's `ruleFiles` /
|
|
136
|
+
* `knowledgeFiles` — split into TypeScript (scanned) and Markdown (cannot
|
|
137
|
+
* carry metadata).
|
|
138
|
+
*/
|
|
139
|
+
export declare function customCheckScanSurface(inspection: ISharkcraftInspection): ICustomCheckScanSurface;
|
|
89
140
|
export interface ICustomCheckDoctorReport {
|
|
90
141
|
schema: 'sharkcraft.custom-checks-doctor/v1';
|
|
91
142
|
generatedAt: string;
|
|
92
143
|
totalChecks: number;
|
|
93
144
|
warnings: number;
|
|
94
145
|
errors: number;
|
|
146
|
+
/** Declarations seen (registered + invalid + ignored) — 0 means nothing was declared. */
|
|
147
|
+
declaredChecks: number;
|
|
148
|
+
/** Declarations that can never run because the registry does not read them. */
|
|
149
|
+
ignored: number;
|
|
150
|
+
/** `type: 'rule'` entries scanned. */
|
|
151
|
+
scannedRules: number;
|
|
95
152
|
details: readonly {
|
|
96
153
|
ruleId: string;
|
|
97
154
|
checkId: string;
|
|
98
155
|
severity: 'error' | 'warning' | 'info';
|
|
99
156
|
message: string;
|
|
157
|
+
/** The declaring file, when known. */
|
|
158
|
+
source?: string;
|
|
100
159
|
}[];
|
|
101
160
|
}
|
|
102
161
|
export declare function doctorCustomChecks(registry: ICustomCheckRegistry): ICustomCheckDoctorReport;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"custom-checks.d.ts","sourceRoot":"","sources":["../src/custom-checks.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"custom-checks.d.ts","sourceRoot":"","sources":["../src/custom-checks.ts"],"names":[],"mappings":"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"}
|