@sanity/ailf 0.1.0
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/README.md +89 -0
- package/bin/ailf.js +64 -0
- package/canonical/grader-references/README.md +88 -0
- package/canonical/grader-references/groq.yaml +234 -0
- package/canonical/grader-references/studio-setup.yaml +275 -0
- package/canonical/reference-solutions/.gitkeep +1 -0
- package/canonical/reference-solutions/frameworks/nuxt.ts +119 -0
- package/canonical/reference-solutions/frameworks/remix.tsx +100 -0
- package/canonical/reference-solutions/functions/publish-webhook.ts +60 -0
- package/canonical/reference-solutions/groq/advanced-filtering.ts +379 -0
- package/canonical/reference-solutions/groq/blog-queries.ts +137 -0
- package/canonical/reference-solutions/groq/joins-references.ts +300 -0
- package/canonical/reference-solutions/nextjs/app-router-integration.tsx +128 -0
- package/canonical/reference-solutions/studio-setup/blog-schema.ts +143 -0
- package/canonical/reference-solutions/studio-setup/custom-tool.tsx +78 -0
- package/canonical/reference-solutions/visual-editing/live-preview.tsx +137 -0
- package/canonical/reference-solutions/visual-editing/presentation-nextjs.tsx +130 -0
- package/config/airbyte/ai_literacy_framework.connector.yaml +639 -0
- package/config/bigquery/README.md +74 -0
- package/config/bigquery/views/area_scores.sql +87 -0
- package/config/bigquery/views/reports.sql +49 -0
- package/config/features.yaml +116 -0
- package/config/models.yaml +115 -0
- package/config/prompts.yaml +75 -0
- package/config/rubrics.yaml +62 -0
- package/config/schedules.yaml +43 -0
- package/config/sinks.yaml +54 -0
- package/config/sources.yaml +51 -0
- package/config/thresholds.yaml +49 -0
- package/dist/_vendor/ailf-core/examples/index.d.ts +190 -0
- package/dist/_vendor/ailf-core/examples/index.js +285 -0
- package/dist/_vendor/ailf-core/index.d.ts +17 -0
- package/dist/_vendor/ailf-core/index.js +17 -0
- package/dist/_vendor/ailf-core/ports/cache-store.d.ts +72 -0
- package/dist/_vendor/ailf-core/ports/cache-store.js +17 -0
- package/dist/_vendor/ailf-core/ports/config-source.d.ts +33 -0
- package/dist/_vendor/ailf-core/ports/config-source.js +15 -0
- package/dist/_vendor/ailf-core/ports/context.d.ts +172 -0
- package/dist/_vendor/ailf-core/ports/context.js +14 -0
- package/dist/_vendor/ailf-core/ports/doc-fetcher.d.ts +131 -0
- package/dist/_vendor/ailf-core/ports/doc-fetcher.js +12 -0
- package/dist/_vendor/ailf-core/ports/eval-runner.d.ts +24 -0
- package/dist/_vendor/ailf-core/ports/eval-runner.js +8 -0
- package/dist/_vendor/ailf-core/ports/index.d.ts +15 -0
- package/dist/_vendor/ailf-core/ports/index.js +7 -0
- package/dist/_vendor/ailf-core/ports/logger.d.ts +36 -0
- package/dist/_vendor/ailf-core/ports/logger.js +11 -0
- package/dist/_vendor/ailf-core/ports/pipeline-step.d.ts +46 -0
- package/dist/_vendor/ailf-core/ports/pipeline-step.js +8 -0
- package/dist/_vendor/ailf-core/ports/task-source.d.ts +159 -0
- package/dist/_vendor/ailf-core/ports/task-source.js +72 -0
- package/dist/_vendor/ailf-core/schemas/callback-payload.d.ts +24 -0
- package/dist/_vendor/ailf-core/schemas/callback-payload.js +29 -0
- package/dist/_vendor/ailf-core/schemas/eval-config.d.ts +55 -0
- package/dist/_vendor/ailf-core/schemas/eval-config.js +78 -0
- package/dist/_vendor/ailf-core/schemas/index.d.ts +16 -0
- package/dist/_vendor/ailf-core/schemas/index.js +16 -0
- package/dist/_vendor/ailf-core/schemas/pipeline-request.d.ts +125 -0
- package/dist/_vendor/ailf-core/schemas/pipeline-request.js +67 -0
- package/dist/_vendor/ailf-core/schemas/pipeline.d.ts +531 -0
- package/dist/_vendor/ailf-core/schemas/pipeline.js +318 -0
- package/dist/_vendor/ailf-core/schemas/schedules.d.ts +68 -0
- package/dist/_vendor/ailf-core/schemas/schedules.js +74 -0
- package/dist/_vendor/ailf-core/schemas/sinks.d.ts +207 -0
- package/dist/_vendor/ailf-core/schemas/sinks.js +108 -0
- package/dist/_vendor/ailf-core/services/comparison-formatters.d.ts +18 -0
- package/dist/_vendor/ailf-core/services/comparison-formatters.js +189 -0
- package/dist/_vendor/ailf-core/services/config-helpers.d.ts +41 -0
- package/dist/_vendor/ailf-core/services/config-helpers.js +86 -0
- package/dist/_vendor/ailf-core/services/index.d.ts +12 -0
- package/dist/_vendor/ailf-core/services/index.js +12 -0
- package/dist/_vendor/ailf-core/services/scoring.d.ts +49 -0
- package/dist/_vendor/ailf-core/services/scoring.js +222 -0
- package/dist/_vendor/ailf-core/types/index.d.ts +1082 -0
- package/dist/_vendor/ailf-core/types/index.js +21 -0
- package/dist/_vendor/ailf-core/types/scoring-input.d.ts +54 -0
- package/dist/_vendor/ailf-core/types/scoring-input.js +9 -0
- package/dist/_vendor/ailf-shared/dimension-names.d.ts +21 -0
- package/dist/_vendor/ailf-shared/dimension-names.js +27 -0
- package/dist/_vendor/ailf-shared/document-ref.d.ts +29 -0
- package/dist/_vendor/ailf-shared/document-ref.js +1 -0
- package/dist/_vendor/ailf-shared/eval-modes.d.ts +12 -0
- package/dist/_vendor/ailf-shared/eval-modes.js +8 -0
- package/dist/_vendor/ailf-shared/index.d.ts +16 -0
- package/dist/_vendor/ailf-shared/index.js +16 -0
- package/dist/_vendor/ailf-shared/noise-threshold.d.ts +9 -0
- package/dist/_vendor/ailf-shared/noise-threshold.js +9 -0
- package/dist/_vendor/ailf-shared/score-grades.d.ts +17 -0
- package/dist/_vendor/ailf-shared/score-grades.js +23 -0
- package/dist/adapters/cache/content-lake-cache.d.ts +24 -0
- package/dist/adapters/cache/content-lake-cache.js +59 -0
- package/dist/adapters/cache/filesystem-cache.d.ts +18 -0
- package/dist/adapters/cache/filesystem-cache.js +54 -0
- package/dist/adapters/cache/index.d.ts +2 -0
- package/dist/adapters/cache/index.js +2 -0
- package/dist/adapters/config-sources/cli-config-adapter.d.ts +17 -0
- package/dist/adapters/config-sources/cli-config-adapter.js +23 -0
- package/dist/adapters/config-sources/file-config-adapter.d.ts +26 -0
- package/dist/adapters/config-sources/file-config-adapter.js +96 -0
- package/dist/adapters/config-sources/index.d.ts +2 -0
- package/dist/adapters/config-sources/index.js +2 -0
- package/dist/adapters/doc-fetchers/index.d.ts +1 -0
- package/dist/adapters/doc-fetchers/index.js +1 -0
- package/dist/adapters/doc-fetchers/sanity-doc-fetcher.d.ts +76 -0
- package/dist/adapters/doc-fetchers/sanity-doc-fetcher.js +620 -0
- package/dist/adapters/eval-runners/index.d.ts +1 -0
- package/dist/adapters/eval-runners/index.js +1 -0
- package/dist/adapters/eval-runners/promptfoo-eval-adapter.d.ts +14 -0
- package/dist/adapters/eval-runners/promptfoo-eval-adapter.js +63 -0
- package/dist/adapters/index.d.ts +12 -0
- package/dist/adapters/index.js +12 -0
- package/dist/adapters/loggers/console-logger.d.ts +22 -0
- package/dist/adapters/loggers/console-logger.js +54 -0
- package/dist/adapters/loggers/index.d.ts +9 -0
- package/dist/adapters/loggers/index.js +9 -0
- package/dist/adapters/loggers/json-logger.d.ts +18 -0
- package/dist/adapters/loggers/json-logger.js +33 -0
- package/dist/adapters/loggers/quiet-logger.d.ts +16 -0
- package/dist/adapters/loggers/quiet-logger.js +30 -0
- package/dist/adapters/task-sources/composite-task-source.d.ts +20 -0
- package/dist/adapters/task-sources/composite-task-source.js +59 -0
- package/dist/adapters/task-sources/content-lake-task-source.d.ts +20 -0
- package/dist/adapters/task-sources/content-lake-task-source.js +219 -0
- package/dist/adapters/task-sources/index.d.ts +7 -0
- package/dist/adapters/task-sources/index.js +7 -0
- package/dist/adapters/task-sources/repo-schemas.d.ts +245 -0
- package/dist/adapters/task-sources/repo-schemas.js +234 -0
- package/dist/adapters/task-sources/repo-task-source.d.ts +22 -0
- package/dist/adapters/task-sources/repo-task-source.js +104 -0
- package/dist/adapters/task-sources/repo-trigger.d.ts +52 -0
- package/dist/adapters/task-sources/repo-trigger.js +153 -0
- package/dist/adapters/task-sources/repo-validation.d.ts +49 -0
- package/dist/adapters/task-sources/repo-validation.js +164 -0
- package/dist/adapters/task-sources/yaml-task-source.d.ts +18 -0
- package/dist/adapters/task-sources/yaml-task-source.js +136 -0
- package/dist/agent-observer/agentic-provider.d.ts +132 -0
- package/dist/agent-observer/agentic-provider.js +983 -0
- package/dist/agent-observer/classifier.d.ts +62 -0
- package/dist/agent-observer/classifier.js +269 -0
- package/dist/agent-observer/index.d.ts +7 -0
- package/dist/agent-observer/index.js +4 -0
- package/dist/agent-observer/pricing.d.ts +35 -0
- package/dist/agent-observer/pricing.js +82 -0
- package/dist/agent-observer/provider.d.ts +77 -0
- package/dist/agent-observer/provider.js +151 -0
- package/dist/agent-observer/proxy.d.ts +91 -0
- package/dist/agent-observer/proxy.js +321 -0
- package/dist/agent-observer/test-imports.d.ts +7 -0
- package/dist/agent-observer/test-imports.js +185 -0
- package/dist/agent-observer/types.d.ts +137 -0
- package/dist/agent-observer/types.js +16 -0
- package/dist/assertions/source-isolation.d.ts +72 -0
- package/dist/assertions/source-isolation.js +117 -0
- package/dist/cli.d.ts +24 -0
- package/dist/cli.js +199 -0
- package/dist/commands/agent-report.d.ts +5 -0
- package/dist/commands/agent-report.js +69 -0
- package/dist/commands/baseline.d.ts +9 -0
- package/dist/commands/baseline.js +141 -0
- package/dist/commands/cache.d.ts +13 -0
- package/dist/commands/cache.js +135 -0
- package/dist/commands/calculate-scores.d.ts +8 -0
- package/dist/commands/calculate-scores.js +48 -0
- package/dist/commands/compare.d.ts +8 -0
- package/dist/commands/compare.js +120 -0
- package/dist/commands/completion.d.ts +18 -0
- package/dist/commands/completion.js +260 -0
- package/dist/commands/coverage-audit.d.ts +7 -0
- package/dist/commands/coverage-audit.js +40 -0
- package/dist/commands/discovery-report.d.ts +10 -0
- package/dist/commands/discovery-report.js +44 -0
- package/dist/commands/eval.d.ts +9 -0
- package/dist/commands/eval.js +35 -0
- package/dist/commands/explain-handler.d.ts +34 -0
- package/dist/commands/explain-handler.js +719 -0
- package/dist/commands/fetch-docs.d.ts +8 -0
- package/dist/commands/fetch-docs.js +128 -0
- package/dist/commands/generate-configs.d.ts +8 -0
- package/dist/commands/generate-configs.js +46 -0
- package/dist/commands/grader/index.d.ts +11 -0
- package/dist/commands/grader/index.js +118 -0
- package/dist/commands/init.d.ts +19 -0
- package/dist/commands/init.js +150 -0
- package/dist/commands/interactive.d.ts +12 -0
- package/dist/commands/interactive.js +238 -0
- package/dist/commands/lookup-doc.d.ts +15 -0
- package/dist/commands/lookup-doc.js +84 -0
- package/dist/commands/measure-retrieval.d.ts +5 -0
- package/dist/commands/measure-retrieval.js +65 -0
- package/dist/commands/pipeline-action.d.ts +71 -0
- package/dist/commands/pipeline-action.js +305 -0
- package/dist/commands/pipeline.d.ts +62 -0
- package/dist/commands/pipeline.js +53 -0
- package/dist/commands/pr-comment.d.ts +8 -0
- package/dist/commands/pr-comment.js +47 -0
- package/dist/commands/publish.d.ts +26 -0
- package/dist/commands/publish.js +253 -0
- package/dist/commands/readiness-report.d.ts +10 -0
- package/dist/commands/readiness-report.js +104 -0
- package/dist/commands/shared/options.d.ts +29 -0
- package/dist/commands/shared/options.js +57 -0
- package/dist/commands/update-quality-scores.d.ts +5 -0
- package/dist/commands/update-quality-scores.js +20 -0
- package/dist/commands/validate-tasks.d.ts +16 -0
- package/dist/commands/validate-tasks.js +93 -0
- package/dist/commands/validate.d.ts +9 -0
- package/dist/commands/validate.js +73 -0
- package/dist/commands/webhook-server.d.ts +5 -0
- package/dist/commands/webhook-server.js +30 -0
- package/dist/commands/weekly-digest.d.ts +10 -0
- package/dist/commands/weekly-digest.js +104 -0
- package/dist/composition-root.d.ts +26 -0
- package/dist/composition-root.js +107 -0
- package/dist/interpolate.d.ts +26 -0
- package/dist/interpolate.js +70 -0
- package/dist/job-store.d.ts +104 -0
- package/dist/job-store.js +188 -0
- package/dist/lib/agent-behavior-report.d.ts +8 -0
- package/dist/lib/agent-behavior-report.js +185 -0
- package/dist/lib/baseline.d.ts +19 -0
- package/dist/lib/baseline.js +153 -0
- package/dist/lib/calculate-scores.d.ts +23 -0
- package/dist/lib/calculate-scores.js +42 -0
- package/dist/lib/compare.d.ts +18 -0
- package/dist/lib/compare.js +170 -0
- package/dist/lib/coverage-audit.d.ts +4 -0
- package/dist/lib/coverage-audit.js +42 -0
- package/dist/lib/discovery-report.d.ts +13 -0
- package/dist/lib/discovery-report.js +57 -0
- package/dist/lib/fetch-docs.d.ts +30 -0
- package/dist/lib/fetch-docs.js +171 -0
- package/dist/lib/generate-configs.d.ts +25 -0
- package/dist/lib/generate-configs.js +42 -0
- package/dist/lib/grader-api.d.ts +21 -0
- package/dist/lib/grader-api.js +34 -0
- package/dist/lib/grader-compare.d.ts +19 -0
- package/dist/lib/grader-compare.js +91 -0
- package/dist/lib/grader-consistency.d.ts +27 -0
- package/dist/lib/grader-consistency.js +79 -0
- package/dist/lib/grader-sensitivity.d.ts +19 -0
- package/dist/lib/grader-sensitivity.js +75 -0
- package/dist/lib/grader-validate.d.ts +19 -0
- package/dist/lib/grader-validate.js +78 -0
- package/dist/lib/measure-retrieval.d.ts +14 -0
- package/dist/lib/measure-retrieval.js +71 -0
- package/dist/lib/pr-comment.d.ts +16 -0
- package/dist/lib/pr-comment.js +28 -0
- package/dist/lib/readiness-report.d.ts +13 -0
- package/dist/lib/readiness-report.js +108 -0
- package/dist/lib/webhook-server.d.ts +11 -0
- package/dist/lib/webhook-server.js +24 -0
- package/dist/lib/weekly-digest.d.ts +24 -0
- package/dist/lib/weekly-digest.js +148 -0
- package/dist/orchestration/build-app-context.d.ts +27 -0
- package/dist/orchestration/build-app-context.js +81 -0
- package/dist/orchestration/build-step-sequence.d.ts +15 -0
- package/dist/orchestration/build-step-sequence.js +84 -0
- package/dist/orchestration/config-to-source-overrides.d.ts +9 -0
- package/dist/orchestration/config-to-source-overrides.js +28 -0
- package/dist/orchestration/env-bridge.d.ts +21 -0
- package/dist/orchestration/env-bridge.js +66 -0
- package/dist/orchestration/index.d.ts +11 -0
- package/dist/orchestration/index.js +11 -0
- package/dist/orchestration/pipeline-orchestrator.d.ts +24 -0
- package/dist/orchestration/pipeline-orchestrator.js +153 -0
- package/dist/orchestration/step-runner.d.ts +20 -0
- package/dist/orchestration/step-runner.js +88 -0
- package/dist/orchestration/steps/calculate-scores-step.d.ts +13 -0
- package/dist/orchestration/steps/calculate-scores-step.js +95 -0
- package/dist/orchestration/steps/callback-step.d.ts +24 -0
- package/dist/orchestration/steps/callback-step.js +76 -0
- package/dist/orchestration/steps/compare-step.d.ts +14 -0
- package/dist/orchestration/steps/compare-step.js +92 -0
- package/dist/orchestration/steps/discovery-report-step.d.ts +13 -0
- package/dist/orchestration/steps/discovery-report-step.js +55 -0
- package/dist/orchestration/steps/fetch-docs-shell.d.ts +17 -0
- package/dist/orchestration/steps/fetch-docs-shell.js +30 -0
- package/dist/orchestration/steps/fetch-docs-step.d.ts +14 -0
- package/dist/orchestration/steps/fetch-docs-step.js +135 -0
- package/dist/orchestration/steps/gap-analysis-step.d.ts +16 -0
- package/dist/orchestration/steps/gap-analysis-step.js +136 -0
- package/dist/orchestration/steps/generate-configs-step.d.ts +14 -0
- package/dist/orchestration/steps/generate-configs-step.js +85 -0
- package/dist/orchestration/steps/grader-consistency-step.d.ts +13 -0
- package/dist/orchestration/steps/grader-consistency-step.js +64 -0
- package/dist/orchestration/steps/index.d.ts +19 -0
- package/dist/orchestration/steps/index.js +19 -0
- package/dist/orchestration/steps/mirror-repo-tasks-step.d.ts +21 -0
- package/dist/orchestration/steps/mirror-repo-tasks-step.js +94 -0
- package/dist/orchestration/steps/publish-report-step.d.ts +26 -0
- package/dist/orchestration/steps/publish-report-step.js +216 -0
- package/dist/orchestration/steps/readiness-step.d.ts +13 -0
- package/dist/orchestration/steps/readiness-step.js +91 -0
- package/dist/orchestration/steps/report-step.d.ts +12 -0
- package/dist/orchestration/steps/report-step.js +49 -0
- package/dist/orchestration/steps/run-eval-step.d.ts +17 -0
- package/dist/orchestration/steps/run-eval-step.js +195 -0
- package/dist/orchestration/steps/validate-step.d.ts +12 -0
- package/dist/orchestration/steps/validate-step.js +41 -0
- package/dist/pipeline/agent-behavior-report.d.ts +53 -0
- package/dist/pipeline/agent-behavior-report.js +132 -0
- package/dist/pipeline/attribution.d.ts +47 -0
- package/dist/pipeline/attribution.js +226 -0
- package/dist/pipeline/baseline.d.ts +37 -0
- package/dist/pipeline/baseline.js +141 -0
- package/dist/pipeline/cache.d.ts +101 -0
- package/dist/pipeline/cache.js +283 -0
- package/dist/pipeline/calculate-scores.d.ts +102 -0
- package/dist/pipeline/calculate-scores.js +1128 -0
- package/dist/pipeline/callback-delivery.d.ts +50 -0
- package/dist/pipeline/callback-delivery.js +89 -0
- package/dist/pipeline/checks.d.ts +39 -0
- package/dist/pipeline/checks.js +280 -0
- package/dist/pipeline/classify-url.d.ts +61 -0
- package/dist/pipeline/classify-url.js +93 -0
- package/dist/pipeline/compare.d.ts +31 -0
- package/dist/pipeline/compare.js +208 -0
- package/dist/pipeline/coverage-audit.d.ts +39 -0
- package/dist/pipeline/coverage-audit.js +165 -0
- package/dist/pipeline/degradations.d.ts +85 -0
- package/dist/pipeline/degradations.js +242 -0
- package/dist/pipeline/discovery-report.d.ts +55 -0
- package/dist/pipeline/discovery-report.js +178 -0
- package/dist/pipeline/eval-constants.d.ts +68 -0
- package/dist/pipeline/eval-constants.js +111 -0
- package/dist/pipeline/eval-fingerprint.d.ts +66 -0
- package/dist/pipeline/eval-fingerprint.js +175 -0
- package/dist/pipeline/expand-tasks.d.ts +220 -0
- package/dist/pipeline/expand-tasks.js +421 -0
- package/dist/pipeline/failure-modes.d.ts +46 -0
- package/dist/pipeline/failure-modes.js +348 -0
- package/dist/pipeline/fetch-url-content.d.ts +44 -0
- package/dist/pipeline/fetch-url-content.js +93 -0
- package/dist/pipeline/gap-analysis.d.ts +48 -0
- package/dist/pipeline/gap-analysis.js +231 -0
- package/dist/pipeline/generate-configs.d.ts +72 -0
- package/dist/pipeline/generate-configs.js +395 -0
- package/dist/pipeline/grader-api.d.ts +49 -0
- package/dist/pipeline/grader-api.js +200 -0
- package/dist/pipeline/grader-compare-runner.d.ts +44 -0
- package/dist/pipeline/grader-compare-runner.js +301 -0
- package/dist/pipeline/grader-comparison.d.ts +111 -0
- package/dist/pipeline/grader-comparison.js +161 -0
- package/dist/pipeline/grader-consistency-runner.d.ts +60 -0
- package/dist/pipeline/grader-consistency-runner.js +270 -0
- package/dist/pipeline/grader-consistency.d.ts +103 -0
- package/dist/pipeline/grader-consistency.js +146 -0
- package/dist/pipeline/grader-sensitivity-runner.d.ts +40 -0
- package/dist/pipeline/grader-sensitivity-runner.js +282 -0
- package/dist/pipeline/grader-sensitivity.d.ts +94 -0
- package/dist/pipeline/grader-sensitivity.js +144 -0
- package/dist/pipeline/grader-validate-runner.d.ts +38 -0
- package/dist/pipeline/grader-validate-runner.js +229 -0
- package/dist/pipeline/grader-validation.d.ts +107 -0
- package/dist/pipeline/grader-validation.js +169 -0
- package/dist/pipeline/map-request-to-config.d.ts +19 -0
- package/dist/pipeline/map-request-to-config.js +80 -0
- package/dist/pipeline/measure-retrieval.d.ts +59 -0
- package/dist/pipeline/measure-retrieval.js +111 -0
- package/dist/pipeline/mirror-repo-tasks.d.ts +86 -0
- package/dist/pipeline/mirror-repo-tasks.js +350 -0
- package/dist/pipeline/plan-format.d.ts +33 -0
- package/dist/pipeline/plan-format.js +202 -0
- package/dist/pipeline/plan.d.ts +169 -0
- package/dist/pipeline/plan.js +708 -0
- package/dist/pipeline/pr-comment.d.ts +19 -0
- package/dist/pipeline/pr-comment.js +502 -0
- package/dist/pipeline/probe.d.ts +52 -0
- package/dist/pipeline/probe.js +390 -0
- package/dist/pipeline/provenance.d.ts +47 -0
- package/dist/pipeline/provenance.js +146 -0
- package/dist/pipeline/readiness-report.d.ts +87 -0
- package/dist/pipeline/readiness-report.js +205 -0
- package/dist/pipeline/release-classification.d.ts +54 -0
- package/dist/pipeline/release-classification.js +238 -0
- package/dist/pipeline/release-report.d.ts +37 -0
- package/dist/pipeline/release-report.js +222 -0
- package/dist/pipeline/repo-eval-comment.d.ts +37 -0
- package/dist/pipeline/repo-eval-comment.js +165 -0
- package/dist/pipeline/repo-threshold-evaluator.d.ts +89 -0
- package/dist/pipeline/repo-threshold-evaluator.js +162 -0
- package/dist/pipeline/resolve-mappings.d.ts +35 -0
- package/dist/pipeline/resolve-mappings.js +72 -0
- package/dist/pipeline/retrieval-metrics.d.ts +39 -0
- package/dist/pipeline/retrieval-metrics.js +136 -0
- package/dist/pipeline/reverse-mapping.d.ts +67 -0
- package/dist/pipeline/reverse-mapping.js +88 -0
- package/dist/pipeline/schemas.d.ts +9 -0
- package/dist/pipeline/schemas.js +9 -0
- package/dist/pipeline/steps/calculate-scores-step.d.ts +11 -0
- package/dist/pipeline/steps/calculate-scores-step.js +89 -0
- package/dist/pipeline/steps/compare-step.d.ts +18 -0
- package/dist/pipeline/steps/compare-step.js +90 -0
- package/dist/pipeline/steps/eval-step.d.ts +53 -0
- package/dist/pipeline/steps/eval-step.js +347 -0
- package/dist/pipeline/steps/fetch-docs-step.d.ts +11 -0
- package/dist/pipeline/steps/fetch-docs-step.js +84 -0
- package/dist/pipeline/steps/generate-configs-step.d.ts +11 -0
- package/dist/pipeline/steps/generate-configs-step.js +98 -0
- package/dist/pipeline/steps/grader-consistency-step.d.ts +21 -0
- package/dist/pipeline/steps/grader-consistency-step.js +74 -0
- package/dist/pipeline/steps/publish-report-step.d.ts +57 -0
- package/dist/pipeline/steps/publish-report-step.js +243 -0
- package/dist/pipeline/steps/report-step.d.ts +13 -0
- package/dist/pipeline/steps/report-step.js +56 -0
- package/dist/pipeline/steps/update-scores-step.d.ts +11 -0
- package/dist/pipeline/steps/update-scores-step.js +42 -0
- package/dist/pipeline/targeted-loo.d.ts +88 -0
- package/dist/pipeline/targeted-loo.js +203 -0
- package/dist/pipeline/thresholds.d.ts +27 -0
- package/dist/pipeline/thresholds.js +245 -0
- package/dist/pipeline/types.d.ts +10 -0
- package/dist/pipeline/types.js +10 -0
- package/dist/pipeline/validate.d.ts +67 -0
- package/dist/pipeline/validate.js +406 -0
- package/dist/pipeline/webhook-server.d.ts +37 -0
- package/dist/pipeline/webhook-server.js +133 -0
- package/dist/report-store.d.ts +84 -0
- package/dist/report-store.js +208 -0
- package/dist/sanity/client.d.ts +38 -0
- package/dist/sanity/client.js +86 -0
- package/dist/sanity/portable-text.d.ts +11 -0
- package/dist/sanity/portable-text.js +211 -0
- package/dist/sanity/queries.d.ts +133 -0
- package/dist/sanity/queries.js +300 -0
- package/dist/schedules/digest.d.ts +116 -0
- package/dist/schedules/digest.js +156 -0
- package/dist/schedules/index.d.ts +12 -0
- package/dist/schedules/index.js +10 -0
- package/dist/schedules/loader.d.ts +31 -0
- package/dist/schedules/loader.js +73 -0
- package/dist/schedules/schema.d.ts +9 -0
- package/dist/schedules/schema.js +9 -0
- package/dist/scripts/agent-behavior-report.d.ts +19 -0
- package/dist/scripts/agent-behavior-report.js +315 -0
- package/dist/scripts/baseline.d.ts +43 -0
- package/dist/scripts/baseline.js +267 -0
- package/dist/scripts/calculate-scores.d.ts +166 -0
- package/dist/scripts/calculate-scores.js +1296 -0
- package/dist/scripts/compare.d.ts +22 -0
- package/dist/scripts/compare.js +334 -0
- package/dist/scripts/coverage-audit.d.ts +44 -0
- package/dist/scripts/coverage-audit.js +209 -0
- package/dist/scripts/debug-eval.d.ts +19 -0
- package/dist/scripts/debug-eval.js +73 -0
- package/dist/scripts/discovery-report.d.ts +58 -0
- package/dist/scripts/discovery-report.js +250 -0
- package/dist/scripts/fetch-docs.d.ts +35 -0
- package/dist/scripts/fetch-docs.js +472 -0
- package/dist/scripts/generate-configs.d.ts +66 -0
- package/dist/scripts/generate-configs.js +459 -0
- package/dist/scripts/grader-api.d.ts +27 -0
- package/dist/scripts/grader-api.js +206 -0
- package/dist/scripts/grader-compare.d.ts +22 -0
- package/dist/scripts/grader-compare.js +368 -0
- package/dist/scripts/grader-consistency.d.ts +20 -0
- package/dist/scripts/grader-consistency.js +313 -0
- package/dist/scripts/grader-sensitivity.d.ts +22 -0
- package/dist/scripts/grader-sensitivity.js +354 -0
- package/dist/scripts/grader-validate.d.ts +19 -0
- package/dist/scripts/grader-validate.js +267 -0
- package/dist/scripts/measure-retrieval.d.ts +10 -0
- package/dist/scripts/measure-retrieval.js +145 -0
- package/dist/scripts/migrate-tasks-to-content-lake.d.ts +24 -0
- package/dist/scripts/migrate-tasks-to-content-lake.js +327 -0
- package/dist/scripts/pipeline.d.ts +76 -0
- package/dist/scripts/pipeline.js +1031 -0
- package/dist/scripts/pr-comment.d.ts +10 -0
- package/dist/scripts/pr-comment.js +510 -0
- package/dist/scripts/readiness-report.d.ts +88 -0
- package/dist/scripts/readiness-report.js +342 -0
- package/dist/scripts/update-quality-scores.d.ts +15 -0
- package/dist/scripts/update-quality-scores.js +184 -0
- package/dist/scripts/validate-task-sources.d.ts +21 -0
- package/dist/scripts/validate-task-sources.js +210 -0
- package/dist/scripts/validate.d.ts +13 -0
- package/dist/scripts/validate.js +79 -0
- package/dist/scripts/webhook-server.d.ts +26 -0
- package/dist/scripts/webhook-server.js +147 -0
- package/dist/scripts/weekly-digest.d.ts +24 -0
- package/dist/scripts/weekly-digest.js +144 -0
- package/dist/sinks/bigquery/index.d.ts +131 -0
- package/dist/sinks/bigquery/index.js +222 -0
- package/dist/sinks/format-slack.d.ts +64 -0
- package/dist/sinks/format-slack.js +306 -0
- package/dist/sinks/index.d.ts +23 -0
- package/dist/sinks/index.js +18 -0
- package/dist/sinks/loader.d.ts +18 -0
- package/dist/sinks/loader.js +82 -0
- package/dist/sinks/retry.d.ts +24 -0
- package/dist/sinks/retry.js +52 -0
- package/dist/sinks/schema.d.ts +9 -0
- package/dist/sinks/schema.js +9 -0
- package/dist/sinks/slack/format.d.ts +65 -0
- package/dist/sinks/slack/format.js +327 -0
- package/dist/sinks/slack/index.d.ts +27 -0
- package/dist/sinks/slack/index.js +78 -0
- package/dist/sinks/slack-sink.d.ts +27 -0
- package/dist/sinks/slack-sink.js +78 -0
- package/dist/sinks/types.d.ts +59 -0
- package/dist/sinks/types.js +44 -0
- package/dist/sinks/webhook/index.d.ts +19 -0
- package/dist/sinks/webhook/index.js +50 -0
- package/dist/sinks/webhook-sink.d.ts +19 -0
- package/dist/sinks/webhook-sink.js +50 -0
- package/dist/sources.d.ts +104 -0
- package/dist/sources.js +292 -0
- package/dist/webhook/budget.d.ts +42 -0
- package/dist/webhook/budget.js +60 -0
- package/dist/webhook/debounce.d.ts +67 -0
- package/dist/webhook/debounce.js +76 -0
- package/dist/webhook/dispatch.d.ts +45 -0
- package/dist/webhook/dispatch.js +84 -0
- package/dist/webhook/eval-request-handler.d.ts +87 -0
- package/dist/webhook/eval-request-handler.js +181 -0
- package/dist/webhook/handler.d.ts +88 -0
- package/dist/webhook/handler.js +203 -0
- package/dist/webhook/index.d.ts +17 -0
- package/dist/webhook/index.js +12 -0
- package/dist/webhook/types.d.ts +109 -0
- package/dist/webhook/types.js +10 -0
- package/package.json +72 -0
- package/tasks/.expanded.agentic.yaml +51 -0
- package/tasks/.expanded.yaml +66 -0
- package/tasks/frameworks.yaml +98 -0
- package/tasks/functions.yaml +51 -0
- package/tasks/groq.yaml +216 -0
- package/tasks/nextjs-live.yaml +62 -0
- package/tasks/studio-setup.yaml +111 -0
- package/tasks/visual-editing.yaml +120 -0
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pipeline/readiness-report.ts
|
|
3
|
+
*
|
|
4
|
+
* Pure computation module for launch readiness reports.
|
|
5
|
+
*
|
|
6
|
+
* Combines threshold evaluation, ceiling decomposition, and gap analysis
|
|
7
|
+
* into a single actionable readiness checklist for a given feature area.
|
|
8
|
+
*
|
|
9
|
+
* This module has NO side effects — no file I/O, no process.argv, no env vars.
|
|
10
|
+
* Callers (command handlers, orchestration steps) handle I/O and pass data in.
|
|
11
|
+
*
|
|
12
|
+
* Exports pure functions:
|
|
13
|
+
* - generateReadinessReport() — builds the structured report
|
|
14
|
+
* - formatReadinessMarkdown() — renders the report as markdown
|
|
15
|
+
*
|
|
16
|
+
* @see docs/exec-plans/completed/scenario-matrix-implementation/phase-5-readiness-thresholds.md
|
|
17
|
+
* @see docs/exec-plans/active/eliminate-lib-layer.md
|
|
18
|
+
*/
|
|
19
|
+
import { evaluateThresholds } from "./thresholds.js";
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
21
|
+
// Pure functions (exported for testing)
|
|
22
|
+
// ---------------------------------------------------------------------------
|
|
23
|
+
/**
|
|
24
|
+
* Format a readiness report as markdown.
|
|
25
|
+
*
|
|
26
|
+
* Pure function — takes a structured report and returns a markdown string.
|
|
27
|
+
*/
|
|
28
|
+
export function formatReadinessMarkdown(report) {
|
|
29
|
+
const lines = [];
|
|
30
|
+
const areaLabel = formatAreaLabel(report.area);
|
|
31
|
+
// Header
|
|
32
|
+
const statusEmoji = report.pass ? "✅" : "❌";
|
|
33
|
+
const statusLabel = report.pass ? "READY" : "NOT READY";
|
|
34
|
+
lines.push(`## 🚀 Launch Readiness: ${areaLabel}`);
|
|
35
|
+
lines.push("");
|
|
36
|
+
lines.push(`**Overall:** ${statusEmoji} ${statusLabel} (${fmt(report.score)}/100, threshold: ${report.threshold})`);
|
|
37
|
+
lines.push("");
|
|
38
|
+
// Dimension Checklist
|
|
39
|
+
lines.push("### Dimension Checklist");
|
|
40
|
+
lines.push("");
|
|
41
|
+
lines.push("| Dimension | Score | Threshold | Status |");
|
|
42
|
+
lines.push("|---|---|---|---|");
|
|
43
|
+
for (const dim of report.dimensions) {
|
|
44
|
+
const status = dim.pass ? "✅ Meets threshold" : "❌ Below threshold";
|
|
45
|
+
lines.push(`| ${dim.dimension} | ${fmt(dim.score)} | ${fmt(dim.threshold)} | ${status} |`);
|
|
46
|
+
}
|
|
47
|
+
lines.push("");
|
|
48
|
+
// Ceiling Analysis
|
|
49
|
+
lines.push("### Ceiling Analysis");
|
|
50
|
+
lines.push("");
|
|
51
|
+
lines.push("| Metric | Value | Assessment |");
|
|
52
|
+
lines.push("|---|---|---|");
|
|
53
|
+
const ceilingAssessment = report.ceiling.ceilingScore >= 60
|
|
54
|
+
? "✅ Docs enable reasonable performance"
|
|
55
|
+
: "⚠️ Below 60 — docs need improvement";
|
|
56
|
+
lines.push(`| Ceiling Score | ${fmt(report.ceiling.ceilingScore)} | ${ceilingAssessment} |`);
|
|
57
|
+
const floorAssessment = report.ceiling.floorScore >= 30
|
|
58
|
+
? "Model has moderate baseline knowledge"
|
|
59
|
+
: "Model has limited baseline knowledge";
|
|
60
|
+
lines.push(`| Floor Score | ${fmt(report.ceiling.floorScore)} | ${floorAssessment} |`);
|
|
61
|
+
const liftSign = report.ceiling.docLift >= 0 ? "+" : "";
|
|
62
|
+
const liftAssessment = report.ceiling.docLift < 0
|
|
63
|
+
? "❌ Docs are hurting performance"
|
|
64
|
+
: report.ceiling.docLift >= 10
|
|
65
|
+
? "✅ Docs add significant value"
|
|
66
|
+
: "⚠️ Docs add minimal value";
|
|
67
|
+
lines.push(`| Doc Lift | ${liftSign}${fmt(report.ceiling.docLift)} | ${liftAssessment} |`);
|
|
68
|
+
lines.push(`| Doc Quality Gap | ${fmt(report.ceiling.docQualityGap)} | ${report.ceiling.docQualityGap > 30 ? "Room for improvement via documentation" : "✅ Docs are high quality"} |`);
|
|
69
|
+
lines.push("");
|
|
70
|
+
// Failing Criteria (only shown when there are violations)
|
|
71
|
+
if (report.violations.length > 0) {
|
|
72
|
+
lines.push("### Failing Criteria");
|
|
73
|
+
for (let i = 0; i < report.violations.length; i++) {
|
|
74
|
+
const v = report.violations[i];
|
|
75
|
+
lines.push(`${i + 1}. **${v.description}**`);
|
|
76
|
+
}
|
|
77
|
+
lines.push("");
|
|
78
|
+
lines.push("### Recommendation");
|
|
79
|
+
const count = report.violations.length;
|
|
80
|
+
const itemWord = count === 1 ? "item" : "items";
|
|
81
|
+
lines.push(`Fix the ${count} ${itemWord} above and re-evaluate.`);
|
|
82
|
+
lines.push("");
|
|
83
|
+
}
|
|
84
|
+
// Gap Analysis (if available)
|
|
85
|
+
if (report.gaps.length > 0) {
|
|
86
|
+
lines.push("### Gap Analysis");
|
|
87
|
+
lines.push("");
|
|
88
|
+
lines.push("| Failure Mode | Est. Lift | Confidence | Remediation |");
|
|
89
|
+
lines.push("|---|---|---|---|");
|
|
90
|
+
for (const gap of report.gaps) {
|
|
91
|
+
const confIcon = gap.confidence === "high"
|
|
92
|
+
? "🟢"
|
|
93
|
+
: gap.confidence === "medium"
|
|
94
|
+
? "🟡"
|
|
95
|
+
: "🔴";
|
|
96
|
+
lines.push(`| ${gap.failureMode} | +${gap.estimatedLift.toFixed(1)} | ${confIcon} ${gap.confidence} | ${gap.remediation} |`);
|
|
97
|
+
}
|
|
98
|
+
lines.push("");
|
|
99
|
+
}
|
|
100
|
+
// Historical Progress (if available)
|
|
101
|
+
if (report.history.length > 0) {
|
|
102
|
+
lines.push("### Historical Progress");
|
|
103
|
+
lines.push("");
|
|
104
|
+
lines.push("| Date | Score | Tag |");
|
|
105
|
+
lines.push("|---|---|---|");
|
|
106
|
+
for (const entry of report.history) {
|
|
107
|
+
const date = entry.timestamp.slice(0, 10);
|
|
108
|
+
const tag = entry.tag ?? "—";
|
|
109
|
+
lines.push(`| ${date} | ${fmt(entry.score)} | ${tag} |`);
|
|
110
|
+
}
|
|
111
|
+
// Show current score as the last row
|
|
112
|
+
lines.push(`| ${new Date().toISOString().slice(0, 10)} | ${fmt(report.score)} | *current* |`);
|
|
113
|
+
lines.push("");
|
|
114
|
+
}
|
|
115
|
+
return lines.join("\n");
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Generate a structured readiness report for a given feature area.
|
|
119
|
+
*
|
|
120
|
+
* This is a pure function — it takes all data as parameters and produces
|
|
121
|
+
* a structured report. No I/O.
|
|
122
|
+
*/
|
|
123
|
+
export function generateReadinessReport(opts) {
|
|
124
|
+
const { area, gapAnalysis, history = [], scoreSummary, thresholdConfig, } = opts;
|
|
125
|
+
// Find the area's scores
|
|
126
|
+
const areaScore = scoreSummary.scores.find((s) => s.feature === area);
|
|
127
|
+
if (!areaScore) {
|
|
128
|
+
throw new Error(`Area "${area}" not found in score summary. Available areas: ${scoreSummary.scores.map((s) => s.feature).join(", ")}`);
|
|
129
|
+
}
|
|
130
|
+
// Evaluate thresholds for the full summary (to get violations)
|
|
131
|
+
const thresholdEvaluation = evaluateThresholds(scoreSummary, thresholdConfig);
|
|
132
|
+
// Filter violations to only this area
|
|
133
|
+
const areaViolations = thresholdEvaluation.violations.filter((v) => v.area === area);
|
|
134
|
+
// Resolve per-area thresholds (with defaults)
|
|
135
|
+
const areaOverrides = thresholdConfig.areas?.[area];
|
|
136
|
+
const compositeThreshold = areaOverrides?.composite ?? thresholdConfig.defaults.composite;
|
|
137
|
+
const dimDefaults = thresholdConfig.defaults.dimensions ?? {};
|
|
138
|
+
const dimOverrides = areaOverrides?.dimensions ?? {};
|
|
139
|
+
// Build dimension checks
|
|
140
|
+
const dimensions = [
|
|
141
|
+
{
|
|
142
|
+
dimension: "Task Completion",
|
|
143
|
+
pass: areaScore.taskCompletion >=
|
|
144
|
+
(dimOverrides["task-completion"] ??
|
|
145
|
+
dimDefaults["task-completion"] ??
|
|
146
|
+
0),
|
|
147
|
+
score: areaScore.taskCompletion,
|
|
148
|
+
threshold: dimOverrides["task-completion"] ?? dimDefaults["task-completion"] ?? 0,
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
dimension: "Code Correctness",
|
|
152
|
+
pass: areaScore.codeCorrectness >=
|
|
153
|
+
(dimOverrides["code-correctness"] ??
|
|
154
|
+
dimDefaults["code-correctness"] ??
|
|
155
|
+
0),
|
|
156
|
+
score: areaScore.codeCorrectness,
|
|
157
|
+
threshold: dimOverrides["code-correctness"] ??
|
|
158
|
+
dimDefaults["code-correctness"] ??
|
|
159
|
+
0,
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
dimension: "Doc Coverage",
|
|
163
|
+
pass: areaScore.docCoverage >=
|
|
164
|
+
(dimOverrides["doc-coverage"] ?? dimDefaults["doc-coverage"] ?? 0),
|
|
165
|
+
score: areaScore.docCoverage,
|
|
166
|
+
threshold: dimOverrides["doc-coverage"] ?? dimDefaults["doc-coverage"] ?? 0,
|
|
167
|
+
},
|
|
168
|
+
];
|
|
169
|
+
// Filter gap analysis to this area
|
|
170
|
+
const areaGaps = gapAnalysis?.gaps.filter((g) => g.area === area) ?? [];
|
|
171
|
+
// Ceiling decomposition
|
|
172
|
+
const ceiling = {
|
|
173
|
+
ceilingScore: areaScore.ceilingScore,
|
|
174
|
+
docLift: areaScore.docLift,
|
|
175
|
+
docQualityGap: areaScore.docQualityGap,
|
|
176
|
+
floorScore: areaScore.floorScore,
|
|
177
|
+
};
|
|
178
|
+
const pass = areaViolations.length === 0;
|
|
179
|
+
return {
|
|
180
|
+
area,
|
|
181
|
+
ceiling,
|
|
182
|
+
dimensions,
|
|
183
|
+
gaps: areaGaps,
|
|
184
|
+
history,
|
|
185
|
+
pass,
|
|
186
|
+
score: areaScore.totalScore,
|
|
187
|
+
threshold: compositeThreshold,
|
|
188
|
+
thresholdEvaluation,
|
|
189
|
+
violations: areaViolations,
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
// ---------------------------------------------------------------------------
|
|
193
|
+
// Formatting helpers (private)
|
|
194
|
+
// ---------------------------------------------------------------------------
|
|
195
|
+
/** Format a score for display (round to nearest integer) */
|
|
196
|
+
function fmt(n) {
|
|
197
|
+
return String(Math.round(n));
|
|
198
|
+
}
|
|
199
|
+
/** Convert kebab-case area name to title case */
|
|
200
|
+
function formatAreaLabel(area) {
|
|
201
|
+
return area
|
|
202
|
+
.split("-")
|
|
203
|
+
.map((w) => w.charAt(0).toUpperCase() + w.slice(1))
|
|
204
|
+
.join(" ");
|
|
205
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pipeline/release-classification.ts
|
|
3
|
+
*
|
|
4
|
+
* Classifies documents in a content release for evaluation tier assignment.
|
|
5
|
+
*
|
|
6
|
+
* Phase 4a of the Scenario Matrix implementation.
|
|
7
|
+
*
|
|
8
|
+
* Given a ReleaseImpact (added/modified/removed/unchanged) and the task
|
|
9
|
+
* mappings, this module classifies each document as:
|
|
10
|
+
*
|
|
11
|
+
* - **Tier A**: New document in an area that has existing evaluation tasks.
|
|
12
|
+
* The document can be injected into existing task contexts and evaluated.
|
|
13
|
+
* - **Tier B**: New document in an area with no evaluation tasks.
|
|
14
|
+
* Only a directional probe is possible (no scored evaluation).
|
|
15
|
+
* - **not-applicable**: Updated, removed, or unchanged documents (these
|
|
16
|
+
* follow the standard before/after comparison flow from Phase 2).
|
|
17
|
+
*
|
|
18
|
+
* @see docs/exec-plans/completed/scenario-matrix-implementation/phase-4-content-release-integration.md
|
|
19
|
+
*/
|
|
20
|
+
import type { ClassifiedReleaseDocument, ProductFeature, ReleaseClassification } from "./types.js";
|
|
21
|
+
import type { ReverseMapping } from "./reverse-mapping.js";
|
|
22
|
+
/**
|
|
23
|
+
* Classify all documents in a content release for evaluation.
|
|
24
|
+
*
|
|
25
|
+
* @param releaseImpact - Added/modified/removed/unchanged slugs from the release
|
|
26
|
+
* @param reverseMapping - Slug → affected area/task mapping
|
|
27
|
+
* @param featureAreas - Set of area names that have task files
|
|
28
|
+
* @param features - Product feature registry (optional, for section-based area inference)
|
|
29
|
+
* @returns Release classification with per-document tier assignment
|
|
30
|
+
*/
|
|
31
|
+
export declare function classifyRelease(releaseImpact: {
|
|
32
|
+
added: string[];
|
|
33
|
+
modified: string[];
|
|
34
|
+
removed: string[];
|
|
35
|
+
unchanged?: string[];
|
|
36
|
+
}, reverseMapping: ReverseMapping, featureAreas: Set<string>, features?: ProductFeature[]): ReleaseClassification;
|
|
37
|
+
/**
|
|
38
|
+
* Format a release classification for console output.
|
|
39
|
+
*/
|
|
40
|
+
export declare function formatReleaseClassificationConsole(classification: ReleaseClassification): string;
|
|
41
|
+
/**
|
|
42
|
+
* Format a release classification as markdown for PR comments.
|
|
43
|
+
*/
|
|
44
|
+
export declare function formatReleaseClassificationMarkdown(classification: ReleaseClassification): string;
|
|
45
|
+
/**
|
|
46
|
+
* Extract Tier A documents — new documents that can be injected into
|
|
47
|
+
* existing task contexts for evaluation.
|
|
48
|
+
*/
|
|
49
|
+
export declare function getTierADocuments(classification: ReleaseClassification): ClassifiedReleaseDocument[];
|
|
50
|
+
/**
|
|
51
|
+
* Extract Tier B documents — new documents in areas without tasks,
|
|
52
|
+
* suitable for directional probes only.
|
|
53
|
+
*/
|
|
54
|
+
export declare function getTierBDocuments(classification: ReleaseClassification): ClassifiedReleaseDocument[];
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pipeline/release-classification.ts
|
|
3
|
+
*
|
|
4
|
+
* Classifies documents in a content release for evaluation tier assignment.
|
|
5
|
+
*
|
|
6
|
+
* Phase 4a of the Scenario Matrix implementation.
|
|
7
|
+
*
|
|
8
|
+
* Given a ReleaseImpact (added/modified/removed/unchanged) and the task
|
|
9
|
+
* mappings, this module classifies each document as:
|
|
10
|
+
*
|
|
11
|
+
* - **Tier A**: New document in an area that has existing evaluation tasks.
|
|
12
|
+
* The document can be injected into existing task contexts and evaluated.
|
|
13
|
+
* - **Tier B**: New document in an area with no evaluation tasks.
|
|
14
|
+
* Only a directional probe is possible (no scored evaluation).
|
|
15
|
+
* - **not-applicable**: Updated, removed, or unchanged documents (these
|
|
16
|
+
* follow the standard before/after comparison flow from Phase 2).
|
|
17
|
+
*
|
|
18
|
+
* @see docs/exec-plans/completed/scenario-matrix-implementation/phase-4-content-release-integration.md
|
|
19
|
+
*/
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
21
|
+
// Public API
|
|
22
|
+
// ---------------------------------------------------------------------------
|
|
23
|
+
/**
|
|
24
|
+
* Classify all documents in a content release for evaluation.
|
|
25
|
+
*
|
|
26
|
+
* @param releaseImpact - Added/modified/removed/unchanged slugs from the release
|
|
27
|
+
* @param reverseMapping - Slug → affected area/task mapping
|
|
28
|
+
* @param featureAreas - Set of area names that have task files
|
|
29
|
+
* @param features - Product feature registry (optional, for section-based area inference)
|
|
30
|
+
* @returns Release classification with per-document tier assignment
|
|
31
|
+
*/
|
|
32
|
+
export function classifyRelease(releaseImpact, reverseMapping, featureAreas, features) {
|
|
33
|
+
const documents = [];
|
|
34
|
+
// Build a section → area lookup from features registry
|
|
35
|
+
const sectionToAreas = buildSectionMapping(features);
|
|
36
|
+
// Classify added documents (new in the release)
|
|
37
|
+
for (const slug of releaseImpact.added) {
|
|
38
|
+
const doc = classifyDocument(slug, "new", reverseMapping, featureAreas, sectionToAreas);
|
|
39
|
+
documents.push(doc);
|
|
40
|
+
}
|
|
41
|
+
// Classify modified documents (updated in the release)
|
|
42
|
+
for (const slug of releaseImpact.modified) {
|
|
43
|
+
const doc = classifyDocument(slug, "updated", reverseMapping, featureAreas, sectionToAreas);
|
|
44
|
+
documents.push(doc);
|
|
45
|
+
}
|
|
46
|
+
// Classify removed documents
|
|
47
|
+
for (const slug of releaseImpact.removed) {
|
|
48
|
+
const doc = classifyDocument(slug, "removed", reverseMapping, featureAreas, sectionToAreas);
|
|
49
|
+
documents.push(doc);
|
|
50
|
+
}
|
|
51
|
+
// Compute summary
|
|
52
|
+
const tierA = documents.filter((d) => d.tier === "A").length;
|
|
53
|
+
const tierB = documents.filter((d) => d.tier === "B").length;
|
|
54
|
+
const tracked = documents.filter((d) => d.tracked).length;
|
|
55
|
+
const updated = documents.filter((d) => d.changeType === "updated").length;
|
|
56
|
+
const untracked = documents.filter((d) => !d.tracked).length;
|
|
57
|
+
return {
|
|
58
|
+
documents,
|
|
59
|
+
generatedAt: new Date().toISOString(),
|
|
60
|
+
summary: {
|
|
61
|
+
tierA,
|
|
62
|
+
tierB,
|
|
63
|
+
total: documents.length,
|
|
64
|
+
tracked,
|
|
65
|
+
untracked,
|
|
66
|
+
updated,
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Format a release classification for console output.
|
|
72
|
+
*/
|
|
73
|
+
export function formatReleaseClassificationConsole(classification) {
|
|
74
|
+
const lines = [];
|
|
75
|
+
const { summary } = classification;
|
|
76
|
+
lines.push("📦 RELEASE DOCUMENT CLASSIFICATION");
|
|
77
|
+
lines.push("");
|
|
78
|
+
lines.push(` ${summary.total} documents: ${summary.tracked} tracked, ${summary.untracked} untracked`);
|
|
79
|
+
if (summary.tierA > 0 || summary.tierB > 0) {
|
|
80
|
+
lines.push(` New documents: ${summary.tierA} Tier A (evaluable), ${summary.tierB} Tier B (probe only)`);
|
|
81
|
+
}
|
|
82
|
+
lines.push("");
|
|
83
|
+
// Group by change type
|
|
84
|
+
const byType = groupByChangeType(classification.documents);
|
|
85
|
+
if (byType.new.length > 0) {
|
|
86
|
+
lines.push(" NEW DOCUMENTS:");
|
|
87
|
+
for (const doc of byType.new) {
|
|
88
|
+
const tierLabel = doc.tier === "A" ? "Tier A" : "Tier B";
|
|
89
|
+
const areas = doc.affectedAreas.length > 0
|
|
90
|
+
? doc.affectedAreas.join(", ")
|
|
91
|
+
: "(no matching area)";
|
|
92
|
+
lines.push(` ${tierIcon(doc.tier)} ${doc.slug} → ${tierLabel} [${areas}]`);
|
|
93
|
+
}
|
|
94
|
+
lines.push("");
|
|
95
|
+
}
|
|
96
|
+
if (byType.updated.length > 0) {
|
|
97
|
+
lines.push(" UPDATED DOCUMENTS:");
|
|
98
|
+
for (const doc of byType.updated) {
|
|
99
|
+
const tracked = doc.tracked ? "tracked" : "untracked";
|
|
100
|
+
const areas = doc.affectedAreas.length > 0
|
|
101
|
+
? doc.affectedAreas.join(", ")
|
|
102
|
+
: "(no tasks)";
|
|
103
|
+
lines.push(` 📝 ${doc.slug} → ${tracked} [${areas}]`);
|
|
104
|
+
}
|
|
105
|
+
lines.push("");
|
|
106
|
+
}
|
|
107
|
+
if (byType.removed.length > 0) {
|
|
108
|
+
lines.push(" REMOVED DOCUMENTS:");
|
|
109
|
+
for (const doc of byType.removed) {
|
|
110
|
+
lines.push(` 🗑️ ${doc.slug}`);
|
|
111
|
+
}
|
|
112
|
+
lines.push("");
|
|
113
|
+
}
|
|
114
|
+
return lines.join("\n");
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Format a release classification as markdown for PR comments.
|
|
118
|
+
*/
|
|
119
|
+
export function formatReleaseClassificationMarkdown(classification) {
|
|
120
|
+
const lines = [];
|
|
121
|
+
const { summary } = classification;
|
|
122
|
+
lines.push("### 📦 Release Document Classification");
|
|
123
|
+
lines.push("");
|
|
124
|
+
lines.push(`**${summary.total} documents**: ${summary.tracked} tracked, ${summary.untracked} untracked`);
|
|
125
|
+
lines.push("");
|
|
126
|
+
if (classification.documents.length > 0) {
|
|
127
|
+
lines.push("| Document | Change | Tier | Areas |");
|
|
128
|
+
lines.push("|----------|--------|------|-------|");
|
|
129
|
+
for (const doc of classification.documents) {
|
|
130
|
+
const tierLabel = doc.tier === "A" ? "🟢 A" : doc.tier === "B" ? "🟡 B" : "—";
|
|
131
|
+
const areas = doc.affectedAreas.length > 0 ? doc.affectedAreas.join(", ") : "—";
|
|
132
|
+
lines.push(`| \`${doc.slug}\` | ${doc.changeType} | ${tierLabel} | ${areas} |`);
|
|
133
|
+
}
|
|
134
|
+
lines.push("");
|
|
135
|
+
}
|
|
136
|
+
return lines.join("\n");
|
|
137
|
+
}
|
|
138
|
+
// ---------------------------------------------------------------------------
|
|
139
|
+
// Formatting
|
|
140
|
+
// ---------------------------------------------------------------------------
|
|
141
|
+
/**
|
|
142
|
+
* Extract Tier A documents — new documents that can be injected into
|
|
143
|
+
* existing task contexts for evaluation.
|
|
144
|
+
*/
|
|
145
|
+
export function getTierADocuments(classification) {
|
|
146
|
+
return classification.documents.filter((d) => d.tier === "A");
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Extract Tier B documents — new documents in areas without tasks,
|
|
150
|
+
* suitable for directional probes only.
|
|
151
|
+
*/
|
|
152
|
+
export function getTierBDocuments(classification) {
|
|
153
|
+
return classification.documents.filter((d) => d.tier === "B");
|
|
154
|
+
}
|
|
155
|
+
// ---------------------------------------------------------------------------
|
|
156
|
+
// Internal helpers
|
|
157
|
+
// ---------------------------------------------------------------------------
|
|
158
|
+
/** Build a section → area names lookup from the feature registry */
|
|
159
|
+
function buildSectionMapping(features) {
|
|
160
|
+
const mapping = new Map();
|
|
161
|
+
if (!features)
|
|
162
|
+
return mapping;
|
|
163
|
+
for (const feature of features) {
|
|
164
|
+
if (feature.status !== "covered" || !feature.area)
|
|
165
|
+
continue;
|
|
166
|
+
for (const section of feature.sections) {
|
|
167
|
+
const existing = mapping.get(section) ?? [];
|
|
168
|
+
if (!existing.includes(feature.area)) {
|
|
169
|
+
existing.push(feature.area);
|
|
170
|
+
}
|
|
171
|
+
mapping.set(section, existing);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
return mapping;
|
|
175
|
+
}
|
|
176
|
+
/** Classify a single document */
|
|
177
|
+
function classifyDocument(slug, changeType, reverseMapping, featureAreas, _sectionToAreas) {
|
|
178
|
+
const targets = reverseMapping.get(slug) ?? [];
|
|
179
|
+
const affectedAreas = [...new Set(targets.map((t) => t.area))].sort();
|
|
180
|
+
const tracked = targets.length > 0;
|
|
181
|
+
// Determine tier for new documents
|
|
182
|
+
let tier = "not-applicable";
|
|
183
|
+
if (changeType === "new") {
|
|
184
|
+
if (affectedAreas.length > 0) {
|
|
185
|
+
// New doc matches existing tasks → Tier A
|
|
186
|
+
tier = "A";
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
// Check if any feature area exists for this document
|
|
190
|
+
// Try to infer area from slug prefix
|
|
191
|
+
const inferredArea = inferAreaFromSlug(slug, featureAreas);
|
|
192
|
+
if (inferredArea) {
|
|
193
|
+
tier = "A";
|
|
194
|
+
affectedAreas.push(inferredArea);
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
tier = "B";
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
return {
|
|
202
|
+
affectedAreas,
|
|
203
|
+
changeType,
|
|
204
|
+
slug,
|
|
205
|
+
tier,
|
|
206
|
+
tracked,
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
/** Group documents by change type */
|
|
210
|
+
function groupByChangeType(docs) {
|
|
211
|
+
return {
|
|
212
|
+
new: docs.filter((d) => d.changeType === "new"),
|
|
213
|
+
removed: docs.filter((d) => d.changeType === "removed"),
|
|
214
|
+
updated: docs.filter((d) => d.changeType === "updated"),
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
/** Try to infer a feature area from a document slug prefix */
|
|
218
|
+
function inferAreaFromSlug(slug, featureAreas) {
|
|
219
|
+
// Try progressively shorter prefixes of the slug
|
|
220
|
+
const parts = slug.split("-");
|
|
221
|
+
for (let i = parts.length; i >= 1; i--) {
|
|
222
|
+
const candidate = parts.slice(0, i).join("-");
|
|
223
|
+
if (featureAreas.has(candidate))
|
|
224
|
+
return candidate;
|
|
225
|
+
}
|
|
226
|
+
return undefined;
|
|
227
|
+
}
|
|
228
|
+
/** Get icon for a tier */
|
|
229
|
+
function tierIcon(tier) {
|
|
230
|
+
switch (tier) {
|
|
231
|
+
case "A":
|
|
232
|
+
return "🟢";
|
|
233
|
+
case "B":
|
|
234
|
+
return "🟡";
|
|
235
|
+
case "not-applicable":
|
|
236
|
+
return "⚪";
|
|
237
|
+
}
|
|
238
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pipeline/release-report.ts
|
|
3
|
+
*
|
|
4
|
+
* Cross-area release impact reports.
|
|
5
|
+
*
|
|
6
|
+
* Phase 4c of the Scenario Matrix implementation.
|
|
7
|
+
*
|
|
8
|
+
* Consolidates impact data from multi-area content releases into a single
|
|
9
|
+
* report that combines document classification (4a), before/after deltas (2b),
|
|
10
|
+
* attribution (2c), and probe results (4b) into the document × area × task
|
|
11
|
+
* impact matrix specified by Scenario 2.4.
|
|
12
|
+
*
|
|
13
|
+
* @see docs/exec-plans/completed/scenario-matrix-implementation/phase-4-content-release-integration.md
|
|
14
|
+
*/
|
|
15
|
+
import type { AttributionReport, ComparisonReport, ProbeResult, ReleaseClassification, ReleaseImpactReport } from "./types.js";
|
|
16
|
+
/**
|
|
17
|
+
* Build a cross-area release impact report.
|
|
18
|
+
*
|
|
19
|
+
* Combines classification, comparison, attribution, and probe data into
|
|
20
|
+
* a single consolidated report.
|
|
21
|
+
*
|
|
22
|
+
* @param classification - Document classification from Phase 4a
|
|
23
|
+
* @param comparison - Before/after comparison (if available)
|
|
24
|
+
* @param attribution - Per-document attribution (if available)
|
|
25
|
+
* @param probes - Tier B probe results (if any)
|
|
26
|
+
* @param noiseThreshold - Threshold for "unchanged" classification
|
|
27
|
+
* @returns Consolidated release impact report
|
|
28
|
+
*/
|
|
29
|
+
export declare function buildReleaseImpactReport(classification: ReleaseClassification, comparison?: ComparisonReport, attribution?: AttributionReport, probes?: ProbeResult[], noiseThreshold?: number): ReleaseImpactReport;
|
|
30
|
+
/**
|
|
31
|
+
* Format a release impact report for console output.
|
|
32
|
+
*/
|
|
33
|
+
export declare function formatReleaseImpactConsole(report: ReleaseImpactReport): string;
|
|
34
|
+
/**
|
|
35
|
+
* Format a release impact report as markdown.
|
|
36
|
+
*/
|
|
37
|
+
export declare function formatReleaseImpactMarkdown(report: ReleaseImpactReport): string;
|