@velum-labs/routekit-eval-setup 1.3.2 → 1.5.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/dist/adapters/authoring-responses-request.d.ts +5 -0
- package/dist/adapters/authoring-responses-request.js +38 -0
- package/dist/adapters/evaluation-evidence-freshness.d.ts +7 -0
- package/dist/adapters/evaluation-evidence-freshness.js +76 -0
- package/dist/adapters/git-task-history.d.ts +67 -0
- package/dist/adapters/git-task-history.js +171 -0
- package/dist/adapters/integrated-repository-history.d.ts +21 -0
- package/dist/adapters/integrated-repository-history.js +175 -0
- package/dist/adapters/repository-command-diagnostic.d.ts +8 -0
- package/dist/adapters/repository-command-diagnostic.js +46 -0
- package/dist/adapters/repository-command-evidence.d.ts +13 -0
- package/dist/adapters/repository-command-evidence.js +102 -0
- package/dist/adapters/repository-command-runner.d.ts +238 -0
- package/dist/adapters/repository-command-runner.js +1483 -0
- package/dist/adapters/repository-import-context.d.ts +47 -0
- package/dist/adapters/repository-import-context.js +469 -0
- package/dist/adapters/repository-node-test-reporter.d.ts +3 -0
- package/dist/adapters/repository-node-test-reporter.js +27 -0
- package/dist/adapters/repository-review-evidence.d.ts +39 -0
- package/dist/adapters/repository-review-evidence.js +632 -0
- package/dist/adapters/repository-seed-selection.d.ts +7 -0
- package/dist/adapters/repository-seed-selection.js +79 -0
- package/dist/adapters/repository-solution-edits.d.ts +49 -0
- package/dist/adapters/repository-solution-edits.js +136 -0
- package/dist/adapters/repository-vitest-phase-adapter.d.ts +8 -0
- package/dist/adapters/repository-vitest-phase-adapter.js +310 -0
- package/dist/adapters/repository-vitest-reporter.d.ts +24 -0
- package/dist/adapters/repository-vitest-reporter.js +314 -0
- package/dist/adapters/strict-authoring-schema.d.ts +5 -0
- package/dist/adapters/strict-authoring-schema.js +158 -0
- package/dist/adapters/test-discovery.d.ts +30 -0
- package/dist/adapters/test-discovery.js +124 -0
- package/dist/adapters/typescript-repository-index.d.ts +51 -0
- package/dist/adapters/typescript-repository-index.js +226 -0
- package/dist/agentic-capabilities-protocol.d.ts +1373 -0
- package/dist/agentic-capabilities-protocol.js +786 -0
- package/dist/case-checkpoint-store.d.ts +29 -0
- package/dist/case-checkpoint-store.js +133 -0
- package/dist/case-pipeline-protocol-v2.d.ts +184 -0
- package/dist/case-pipeline-protocol-v2.js +193 -0
- package/dist/case-pipeline-protocol.d.ts +2626 -0
- package/dist/case-pipeline-protocol.js +371 -0
- package/dist/effect-api.d.ts +74 -10
- package/dist/effect-api.js +56 -6
- package/dist/errors.d.ts +31 -0
- package/dist/errors.js +10 -0
- package/dist/eval-capability-execution-envelope.d.ts +64 -0
- package/dist/eval-capability-execution-envelope.js +98 -0
- package/dist/eval-capability-policy.d.ts +90 -0
- package/dist/eval-capability-policy.js +107 -0
- package/dist/eval-event-log.d.ts +140 -0
- package/dist/eval-event-log.js +220 -0
- package/dist/evaluation-authoring-policy.d.ts +18 -0
- package/dist/evaluation-authoring-policy.js +19 -0
- package/dist/evaluation-authoring-validation.d.ts +22 -0
- package/dist/evaluation-authoring-validation.js +72 -0
- package/dist/evaluation-evidence.d.ts +20 -0
- package/dist/evaluation-evidence.js +319 -0
- package/dist/evaluation-grader-calibration-protocol.d.ts +108 -0
- package/dist/evaluation-grader-calibration-protocol.js +80 -0
- package/dist/evaluation-grader-calibration.d.ts +18 -0
- package/dist/evaluation-grader-calibration.js +334 -0
- package/dist/evaluation-grading-policy.d.ts +24 -0
- package/dist/evaluation-grading-policy.js +54 -0
- package/dist/evaluation-proposal-policy.d.ts +4 -0
- package/dist/evaluation-proposal-policy.js +91 -0
- package/dist/evaluation-source-retrieval.d.ts +68 -0
- package/dist/evaluation-source-retrieval.js +513 -0
- package/dist/evaluation-structure-policy.d.ts +29 -0
- package/dist/evaluation-structure-policy.js +138 -0
- package/dist/index.d.ts +124 -17
- package/dist/index.js +69 -11
- package/dist/inspection.js +2 -3
- package/dist/project-artifacts.d.ts +7 -2
- package/dist/project-artifacts.js +49 -136
- package/dist/project-authoring.d.ts +66 -5
- package/dist/project-authoring.js +783 -109
- package/dist/project-contracts.d.ts +419 -84
- package/dist/project-contracts.js +160 -52
- package/dist/project-store.js +2 -1
- package/dist/project-workflow.d.ts +5 -4
- package/dist/project-workflow.js +154 -35
- package/dist/repository-adversary-protocol.d.ts +64 -0
- package/dist/repository-adversary-protocol.js +105 -0
- package/dist/repository-behavior-protocol.d.ts +188 -0
- package/dist/repository-behavior-protocol.js +202 -0
- package/dist/repository-benchmark-protocol.d.ts +487 -0
- package/dist/repository-benchmark-protocol.js +96 -0
- package/dist/repository-execution-protocol.d.ts +150 -0
- package/dist/repository-execution-protocol.js +38 -0
- package/dist/repository-fixture-instructions.d.ts +3 -0
- package/dist/repository-fixture-instructions.js +91 -0
- package/dist/repository-fixture-protocol.d.ts +79 -0
- package/dist/repository-fixture-protocol.js +79 -0
- package/dist/repository-foundry-plan-protocol.d.ts +118 -0
- package/dist/repository-foundry-plan-protocol.js +296 -0
- package/dist/repository-foundry-progress-protocol.d.ts +52 -0
- package/dist/repository-foundry-progress-protocol.js +52 -0
- package/dist/repository-improvement-protocol.d.ts +100 -0
- package/dist/repository-improvement-protocol.js +106 -0
- package/dist/repository-language-model-protocol.d.ts +43 -0
- package/dist/repository-language-model-protocol.js +146 -0
- package/dist/repository-oracle-coverage-protocol.d.ts +18 -0
- package/dist/repository-oracle-coverage-protocol.js +39 -0
- package/dist/repository-oracle-execution-binding.d.ts +27 -0
- package/dist/repository-oracle-execution-binding.js +59 -0
- package/dist/repository-oracle-protocol.d.ts +230 -0
- package/dist/repository-oracle-protocol.js +156 -0
- package/dist/repository-oracle-scope-policy.d.ts +22 -0
- package/dist/repository-oracle-scope-policy.js +92 -0
- package/dist/repository-quality-policy.d.ts +15 -0
- package/dist/repository-quality-policy.js +357 -0
- package/dist/repository-routing-benchmark-protocol.d.ts +176 -0
- package/dist/repository-routing-benchmark-protocol.js +103 -0
- package/dist/repository-routing-model-protocol.d.ts +36 -0
- package/dist/repository-routing-model-protocol.js +89 -0
- package/dist/repository-routing-plan-protocol.d.ts +112 -0
- package/dist/repository-routing-plan-protocol.js +58 -0
- package/dist/repository-routing-quality-policy.d.ts +9 -0
- package/dist/repository-routing-quality-policy.js +191 -0
- package/dist/repository-seed-qualification-progress-protocol.d.ts +205 -0
- package/dist/repository-seed-qualification-progress-protocol.js +28 -0
- package/dist/repository-semantic-calibration-protocol.d.ts +768 -0
- package/dist/repository-semantic-calibration-protocol.js +276 -0
- package/dist/repository-semantic-calibration.d.ts +163 -0
- package/dist/repository-semantic-calibration.js +581 -0
- package/dist/repository-specification-contract-facts-protocol.d.ts +224 -0
- package/dist/repository-specification-contract-facts-protocol.js +276 -0
- package/dist/repository-specification-critique-protocol.d.ts +189 -0
- package/dist/repository-specification-critique-protocol.js +103 -0
- package/dist/repository-task-family-protocol.d.ts +24 -0
- package/dist/repository-task-family-protocol.js +37 -0
- package/dist/repository-task-seed-protocol.d.ts +384 -0
- package/dist/repository-task-seed-protocol.js +236 -0
- package/dist/repository-trajectory-protocol.d.ts +20 -0
- package/dist/repository-trajectory-protocol.js +42 -0
- package/dist/service.js +1 -1
- package/dist/services/adversary/service.d.ts +64 -0
- package/dist/services/adversary/service.js +330 -0
- package/dist/services/benchmark-compiler/service.d.ts +450 -0
- package/dist/services/benchmark-compiler/service.js +9 -0
- package/dist/services/budgeted-model/service.d.ts +118 -0
- package/dist/services/budgeted-model/service.js +460 -0
- package/dist/services/case-authoring/service.d.ts +163 -0
- package/dist/services/case-authoring/service.js +1456 -0
- package/dist/services/case-finalization/service.d.ts +283 -0
- package/dist/services/case-finalization/service.js +370 -0
- package/dist/services/case-generation/service.d.ts +619 -0
- package/dist/services/case-generation/service.js +2628 -0
- package/dist/services/case-pipeline/service.d.ts +31 -0
- package/dist/services/case-pipeline/service.js +485 -0
- package/dist/services/case-pipeline-v2/service.d.ts +70 -0
- package/dist/services/case-pipeline-v2/service.js +477 -0
- package/dist/services/command-observability/service.d.ts +13 -0
- package/dist/services/command-observability/service.js +3 -0
- package/dist/services/dimension-labeling/service.d.ts +77 -0
- package/dist/services/dimension-labeling/service.js +188 -0
- package/dist/services/eval-candidate/service.d.ts +208 -0
- package/dist/services/eval-candidate/service.js +64 -0
- package/dist/services/eval-capabilities/service.d.ts +183 -0
- package/dist/services/eval-capabilities/service.js +1433 -0
- package/dist/services/eval-environment/service.d.ts +173 -0
- package/dist/services/eval-environment/service.js +127 -0
- package/dist/services/evidence-reconstruction/service.d.ts +36 -0
- package/dist/services/evidence-reconstruction/service.js +145 -0
- package/dist/services/fixture-builder/service.d.ts +62 -0
- package/dist/services/fixture-builder/service.js +36 -0
- package/dist/services/fixture-validation/service.d.ts +75 -0
- package/dist/services/fixture-validation/service.js +295 -0
- package/dist/services/foundry/service.d.ts +831 -0
- package/dist/services/foundry/service.js +442 -0
- package/dist/services/foundry-progress/service.d.ts +62 -0
- package/dist/services/foundry-progress/service.js +149 -0
- package/dist/services/foundry-v2/service.d.ts +54 -0
- package/dist/services/foundry-v2/service.js +28 -0
- package/dist/services/grounded-authoring/service.d.ts +126 -0
- package/dist/services/grounded-authoring/service.js +822 -0
- package/dist/services/historical-case/service.d.ts +722 -0
- package/dist/services/historical-case/service.js +177 -0
- package/dist/services/improvement-loop/service.d.ts +59 -0
- package/dist/services/improvement-loop/service.js +176 -0
- package/dist/services/language-model/service.d.ts +52 -0
- package/dist/services/language-model/service.js +194 -0
- package/dist/services/oracle-builder/service.d.ts +146 -0
- package/dist/services/oracle-builder/service.js +513 -0
- package/dist/services/oracle-coverage/service.d.ts +28 -0
- package/dist/services/oracle-coverage/service.js +50 -0
- package/dist/services/oracle-coverage-witness/service.d.ts +130 -0
- package/dist/services/oracle-coverage-witness/service.js +538 -0
- package/dist/services/pipeline-challenge/service.d.ts +551 -0
- package/dist/services/pipeline-challenge/service.js +427 -0
- package/dist/services/pipeline-controls/service.d.ts +130 -0
- package/dist/services/pipeline-controls/service.js +483 -0
- package/dist/services/pipeline-oracle/service.d.ts +8 -0
- package/dist/services/pipeline-oracle/service.js +256 -0
- package/dist/services/pipeline-seed/service.d.ts +298 -0
- package/dist/services/pipeline-seed/service.js +428 -0
- package/dist/services/pipeline-spec/service.d.ts +103 -0
- package/dist/services/pipeline-spec/service.js +619 -0
- package/dist/services/pipeline-tournament/service.d.ts +258 -0
- package/dist/services/pipeline-tournament/service.js +476 -0
- package/dist/services/quality-gate/service.d.ts +233 -0
- package/dist/services/quality-gate/service.js +136 -0
- package/dist/services/repository-bundle/service.d.ts +33 -0
- package/dist/services/repository-bundle/service.js +114 -0
- package/dist/services/repository-model/service.d.ts +105 -0
- package/dist/services/repository-model/service.js +250 -0
- package/dist/services/repository-public-artifact/service.d.ts +133 -0
- package/dist/services/repository-public-artifact/service.js +330 -0
- package/dist/services/routing-benchmark/service.d.ts +362 -0
- package/dist/services/routing-benchmark/service.js +96 -0
- package/dist/services/specification-critic/service.d.ts +92 -0
- package/dist/services/specification-critic/service.js +172 -0
- package/dist/services/task-family/service.d.ts +40 -0
- package/dist/services/task-family/service.js +55 -0
- package/dist/services/task-seed/service.d.ts +906 -0
- package/dist/services/task-seed/service.js +1406 -0
- package/dist/services/task-specification/service.d.ts +27 -0
- package/dist/services/task-specification/service.js +40 -0
- package/dist/services/trajectory-policy/service.d.ts +110 -0
- package/dist/services/trajectory-policy/service.js +216 -0
- package/dist/test/agentic-capabilities-protocol.test.d.ts +1 -0
- package/dist/test/agentic-capabilities-protocol.test.js +570 -0
- package/dist/test/agentic-capabilities.test.d.ts +1 -0
- package/dist/test/agentic-capabilities.test.js +1461 -0
- package/dist/test/agentic-environment.test.d.ts +1 -0
- package/dist/test/agentic-environment.test.js +213 -0
- package/dist/test/case-pipeline-foundation.test.d.ts +1 -0
- package/dist/test/case-pipeline-foundation.test.js +535 -0
- package/dist/test/case-pipeline-protocol-v2.test.d.ts +1 -0
- package/dist/test/case-pipeline-protocol-v2.test.js +124 -0
- package/dist/test/case-pipeline-v2.test.d.ts +1 -0
- package/dist/test/case-pipeline-v2.test.js +286 -0
- package/dist/test/case-pipeline.test.d.ts +1 -0
- package/dist/test/case-pipeline.test.js +851 -0
- package/dist/test/eval-capability-policy.test.d.ts +1 -0
- package/dist/test/eval-capability-policy.test.js +50 -0
- package/dist/test/eval-event-log.test.d.ts +1 -0
- package/dist/test/eval-event-log.test.js +125 -0
- package/dist/test/evaluation-evidence-freshness.test.d.ts +1 -0
- package/dist/test/evaluation-evidence-freshness.test.js +44 -0
- package/dist/test/evaluation-evidence.test.d.ts +1 -0
- package/dist/test/evaluation-evidence.test.js +230 -0
- package/dist/test/evaluation-grader-calibration.test.d.ts +1 -0
- package/dist/test/evaluation-grader-calibration.test.js +373 -0
- package/dist/test/evaluation-proposal-digest.test.d.ts +1 -0
- package/dist/test/evaluation-proposal-digest.test.js +187 -0
- package/dist/test/evaluation-source-retrieval.test.d.ts +1 -0
- package/dist/test/evaluation-source-retrieval.test.js +237 -0
- package/dist/test/evaluation-structure-policy.test.d.ts +1 -0
- package/dist/test/evaluation-structure-policy.test.js +196 -0
- package/dist/test/fixtures/repository-resource-panel.d.ts +39 -0
- package/dist/test/fixtures/repository-resource-panel.js +111 -0
- package/dist/test/fixtures/vitest-boundary-panel.d.ts +84 -0
- package/dist/test/fixtures/vitest-boundary-panel.js +120 -0
- package/dist/test/fixtures/vitest-phase-panel.d.ts +135 -0
- package/dist/test/fixtures/vitest-phase-panel.js +213 -0
- package/dist/test/fixtures/vitest-reporter-results.d.ts +76 -0
- package/dist/test/fixtures/vitest-reporter-results.js +94 -0
- package/dist/test/grounded-authoring.test.d.ts +1 -0
- package/dist/test/grounded-authoring.test.js +565 -0
- package/dist/test/integrated-repository-history.test.d.ts +1 -0
- package/dist/test/integrated-repository-history.test.js +227 -0
- package/dist/test/project-authoring.test.js +593 -43
- package/dist/test/project-workflow.test.js +419 -40
- package/dist/test/repository-authoring-artifacts.test.d.ts +1 -0
- package/dist/test/repository-authoring-artifacts.test.js +185 -0
- package/dist/test/repository-bundle.test.d.ts +1 -0
- package/dist/test/repository-bundle.test.js +52 -0
- package/dist/test/repository-case-generation.test.d.ts +1 -0
- package/dist/test/repository-case-generation.test.js +3465 -0
- package/dist/test/repository-command-diagnostic.test.d.ts +1 -0
- package/dist/test/repository-command-diagnostic.test.js +55 -0
- package/dist/test/repository-command-signals.test.d.ts +1 -0
- package/dist/test/repository-command-signals.test.js +124 -0
- package/dist/test/repository-fixture-scope-coverage.test.d.ts +1 -0
- package/dist/test/repository-fixture-scope-coverage.test.js +127 -0
- package/dist/test/repository-fixture-validation.test.d.ts +1 -0
- package/dist/test/repository-fixture-validation.test.js +362 -0
- package/dist/test/repository-foundry-progress.test.d.ts +1 -0
- package/dist/test/repository-foundry-progress.test.js +110 -0
- package/dist/test/repository-foundry-quality.test.d.ts +1 -0
- package/dist/test/repository-foundry-quality.test.js +1138 -0
- package/dist/test/repository-import-context.test.d.ts +1 -0
- package/dist/test/repository-import-context.test.js +354 -0
- package/dist/test/repository-model-authoring.test.d.ts +1 -0
- package/dist/test/repository-model-authoring.test.js +544 -0
- package/dist/test/repository-model.test.d.ts +1 -0
- package/dist/test/repository-model.test.js +2195 -0
- package/dist/test/repository-node-test-reporter.test.d.ts +1 -0
- package/dist/test/repository-node-test-reporter.test.js +104 -0
- package/dist/test/repository-oracle-concurrency.test.d.ts +1 -0
- package/dist/test/repository-oracle-concurrency.test.js +542 -0
- package/dist/test/repository-oracle-coverage-witness.test.d.ts +1 -0
- package/dist/test/repository-oracle-coverage-witness.test.js +511 -0
- package/dist/test/repository-oracle-coverage.test.d.ts +1 -0
- package/dist/test/repository-oracle-coverage.test.js +168 -0
- package/dist/test/repository-oracle-evidence.test.d.ts +1 -0
- package/dist/test/repository-oracle-evidence.test.js +185 -0
- package/dist/test/repository-oracle-plan.test.d.ts +1 -0
- package/dist/test/repository-oracle-plan.test.js +176 -0
- package/dist/test/repository-overlay-isolation.test.d.ts +1 -0
- package/dist/test/repository-overlay-isolation.test.js +85 -0
- package/dist/test/repository-preparation-cache.test.d.ts +1 -0
- package/dist/test/repository-preparation-cache.test.js +414 -0
- package/dist/test/repository-public-artifact.test.d.ts +1 -0
- package/dist/test/repository-public-artifact.test.js +273 -0
- package/dist/test/repository-qualification-diagnostics.test.d.ts +1 -0
- package/dist/test/repository-qualification-diagnostics.test.js +524 -0
- package/dist/test/repository-reference-authoring.test.d.ts +1 -0
- package/dist/test/repository-reference-authoring.test.js +1633 -0
- package/dist/test/repository-review-evidence-v2.test.d.ts +1 -0
- package/dist/test/repository-review-evidence-v2.test.js +183 -0
- package/dist/test/repository-review-evidence.test.d.ts +1 -0
- package/dist/test/repository-review-evidence.test.js +124 -0
- package/dist/test/repository-seed-exclusions.test.d.ts +1 -0
- package/dist/test/repository-seed-exclusions.test.js +96 -0
- package/dist/test/repository-seed-selection.test.d.ts +1 -0
- package/dist/test/repository-seed-selection.test.js +504 -0
- package/dist/test/repository-semantic-calibration.test.d.ts +1 -0
- package/dist/test/repository-semantic-calibration.test.js +688 -0
- package/dist/test/repository-solution-edits.test.d.ts +1 -0
- package/dist/test/repository-solution-edits.test.js +377 -0
- package/dist/test/repository-specification-budget.test.d.ts +1 -0
- package/dist/test/repository-specification-budget.test.js +171 -0
- package/dist/test/repository-specification-contract-checkpoint.test.d.ts +1 -0
- package/dist/test/repository-specification-contract-checkpoint.test.js +228 -0
- package/dist/test/repository-specification-contract-facts.test.d.ts +1 -0
- package/dist/test/repository-specification-contract-facts.test.js +177 -0
- package/dist/test/repository-trajectory-authoring.test.d.ts +1 -0
- package/dist/test/repository-trajectory-authoring.test.js +176 -0
- package/dist/test/repository-valid-control-plan.test.d.ts +1 -0
- package/dist/test/repository-valid-control-plan.test.js +45 -0
- package/dist/test/repository-vitest-phase.test.d.ts +1 -0
- package/dist/test/repository-vitest-phase.test.js +848 -0
- package/dist/test/repository-vitest-reporter.test.d.ts +1 -0
- package/dist/test/repository-vitest-reporter.test.js +158 -0
- package/dist/test/repository-workspace-build.test.d.ts +1 -0
- package/dist/test/repository-workspace-build.test.js +160 -0
- package/dist/test/strict-authoring-schema.test.d.ts +1 -0
- package/dist/test/strict-authoring-schema.test.js +169 -0
- package/package.json +48 -6
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { stripVTControlCharacters } from "node:util";
|
|
2
|
+
import { repositoryVitestTestEvidenceV1 } from "./repository-vitest-reporter.js";
|
|
3
|
+
/** Process completion and evidence completeness are prerequisites, not grades. */
|
|
4
|
+
export const repositoryCommandExecutionIncompleteV1 = (result) => result.timedOut || result.exitCode === null || result.outputTruncated;
|
|
5
|
+
export const repositoryCommandTestEvidenceV1 = (result, recipeId) => {
|
|
6
|
+
const unknown = (detail) => ({ outcome: "unknown", detail });
|
|
7
|
+
if (result === undefined ||
|
|
8
|
+
result.recipeId !== recipeId ||
|
|
9
|
+
!result.gradeExecuted ||
|
|
10
|
+
result.stage !== "grade") {
|
|
11
|
+
return unknown("the reviewed grading command did not execute");
|
|
12
|
+
}
|
|
13
|
+
if (repositoryCommandExecutionIncompleteV1(result)) {
|
|
14
|
+
return unknown("grading did not produce a complete, non-timeout result");
|
|
15
|
+
}
|
|
16
|
+
if (result.trustedPreparationResults.some((preparation) => preparation.exitCode !== 0 || repositoryCommandExecutionIncompleteV1(preparation))) {
|
|
17
|
+
return unknown("trusted preparation did not complete before grading");
|
|
18
|
+
}
|
|
19
|
+
if (result.candidateValidationResults.some((validation) => validation.exitCode !== 0 || repositoryCommandExecutionIncompleteV1(validation))) {
|
|
20
|
+
return unknown("candidate validation did not pass before grading");
|
|
21
|
+
}
|
|
22
|
+
const output = stripVTControlCharacters(`${result.stdout}\n${result.stderr}`);
|
|
23
|
+
if (result.testReporter === "vitest-v1") {
|
|
24
|
+
return (repositoryVitestTestEvidenceV1(result, output) ??
|
|
25
|
+
unknown("the host-selected Vitest reporter did not emit complete execution evidence"));
|
|
26
|
+
}
|
|
27
|
+
if (result.testReporter !== undefined)
|
|
28
|
+
return unknown("unsupported host-selected test reporter");
|
|
29
|
+
// Node's TAP and spec reporters expose completed test counts. Other reporters
|
|
30
|
+
// need their own host-selected evidence adapter; exit status alone is not an oracle.
|
|
31
|
+
// Reporter evidence does not prove that an assertion covers the target
|
|
32
|
+
// behavior: that still requires independent review of fixtures and controls.
|
|
33
|
+
const summaries = [
|
|
34
|
+
...output.matchAll(/^(?:#|ℹ) (tests|pass|fail|cancelled|skipped|todo) (\d+)\s*$/gmu)
|
|
35
|
+
];
|
|
36
|
+
const counts = new Map(summaries.map((match) => [match[1], Number(match[2])]));
|
|
37
|
+
const tests = counts.get("tests");
|
|
38
|
+
const passed = counts.get("pass");
|
|
39
|
+
const failed = counts.get("fail");
|
|
40
|
+
const cancelled = counts.get("cancelled");
|
|
41
|
+
const skipped = counts.get("skipped");
|
|
42
|
+
const todo = counts.get("todo");
|
|
43
|
+
const namedTests = [
|
|
44
|
+
...output.matchAll(/^(?:\s*# Subtest: |\s*[✔✖] )(.+?)(?: \([\d.]+m?s\))?$/gmu)
|
|
45
|
+
].some((match) => !/\.[cm]?[jt]sx?$/u.test(match[1]) && match[1] !== "failing tests:");
|
|
46
|
+
if (summaries.length !== 6 ||
|
|
47
|
+
counts.size !== 6 ||
|
|
48
|
+
tests === undefined ||
|
|
49
|
+
passed === undefined ||
|
|
50
|
+
failed === undefined ||
|
|
51
|
+
cancelled === undefined ||
|
|
52
|
+
skipped === undefined ||
|
|
53
|
+
todo === undefined ||
|
|
54
|
+
tests !== passed + failed + cancelled + skipped + todo ||
|
|
55
|
+
passed + failed === 0 ||
|
|
56
|
+
cancelled > 0 ||
|
|
57
|
+
!namedTests) {
|
|
58
|
+
return unknown("no complete, unambiguous Node test discovery and execution evidence");
|
|
59
|
+
}
|
|
60
|
+
if (result.exitCode === 0 && failed === 0) {
|
|
61
|
+
return { outcome: "pass", detail: `executed=${String(passed)}; failed=0; reporter=node` };
|
|
62
|
+
}
|
|
63
|
+
const assertionFailures = [...output.matchAll(/^\s+code: ['"]ERR_ASSERTION['"],?\s*$/gmu)].length;
|
|
64
|
+
const tap = /^TAP version 13$/mu.test(output);
|
|
65
|
+
const assertionErrors = tap
|
|
66
|
+
? [...output.matchAll(/^\s+name: ['"]AssertionError['"]\s*$/gmu)].length
|
|
67
|
+
: [...output.matchAll(/^\s+AssertionError \[ERR_ASSERTION\]:/gmu)].length;
|
|
68
|
+
// A failed nested test also fails its parent. Attribute leaf failures rather
|
|
69
|
+
// than mistaking the parent's propagated failure for a second runtime error.
|
|
70
|
+
const leafFailures = [...output.matchAll(/^\s+failureType: ['"]([^'"]+)['"]\s*$/gmu)].filter((match) => match[1] !== "subtestsFailed");
|
|
71
|
+
if (tap &&
|
|
72
|
+
result.exitCode === 1 &&
|
|
73
|
+
failed > 0 &&
|
|
74
|
+
assertionFailures > 0 &&
|
|
75
|
+
leafFailures.every((match) => match[1] === "testCodeFailure") &&
|
|
76
|
+
assertionFailures <= failed &&
|
|
77
|
+
assertionFailures === leafFailures.length &&
|
|
78
|
+
assertionErrors === assertionFailures) {
|
|
79
|
+
return {
|
|
80
|
+
outcome: "fail",
|
|
81
|
+
detail: `executed=${String(passed + failed)}; assertionFailures=${String(assertionFailures)}; reporter=node`
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
const testBodyFailure = tap &&
|
|
85
|
+
result.exitCode === 1 &&
|
|
86
|
+
leafFailures.length > 0 &&
|
|
87
|
+
leafFailures.every((match) => match[1] === "testCodeFailure") &&
|
|
88
|
+
!/^\s+(?:exitCode|signal):/mu.test(output);
|
|
89
|
+
return {
|
|
90
|
+
...unknown("grading failed without attributable test-body assertion failures for every failed test"),
|
|
91
|
+
...(testBodyFailure ? { inconclusiveReason: "unattributed-test-failure" } : {})
|
|
92
|
+
};
|
|
93
|
+
};
|
|
94
|
+
/** A diagnostic probe uses the same evidence rules as admission, never exit status alone. */
|
|
95
|
+
export const repositoryCommandProbeOutcomeV1 = (results) => {
|
|
96
|
+
const evidence = results.map((result) => repositoryCommandTestEvidenceV1(result, result.recipeId));
|
|
97
|
+
if (evidence.length === 0 || evidence.some((entry) => entry.outcome === "unknown"))
|
|
98
|
+
return "environment_blocked";
|
|
99
|
+
return evidence.every((entry) => entry.outcome === "pass")
|
|
100
|
+
? "completed"
|
|
101
|
+
: "scientific_rejection";
|
|
102
|
+
};
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
import { Context, Effect } from "effect";
|
|
2
|
+
import { RepositoryFoundryError } from "../errors.js";
|
|
3
|
+
import type { RepositoryCommandRecipeV1 } from "../repository-behavior-protocol.js";
|
|
4
|
+
import type { RepositoryCommandFileOverrideV1, RepositoryCommandInvocationResultV1 } from "../repository-execution-protocol.js";
|
|
5
|
+
export type { RepositoryCommandExecutionStageV1, RepositoryCommandFileOverrideV1, RepositoryCommandInvocationResultV1, RepositoryCommandResultV1 } from "../repository-execution-protocol.js";
|
|
6
|
+
/** Optional platform command executor. Checkout, overlays, recipes and grading remain owned here. */
|
|
7
|
+
export type RepositoryCommandExecutionPortV1 = {
|
|
8
|
+
readonly run: (input: {
|
|
9
|
+
readonly operationId: string;
|
|
10
|
+
readonly cwd: string;
|
|
11
|
+
readonly executable: string;
|
|
12
|
+
readonly args: readonly string[];
|
|
13
|
+
readonly environment: Readonly<Record<string, string>>;
|
|
14
|
+
readonly timeoutMs: number;
|
|
15
|
+
}) => Effect.Effect<{
|
|
16
|
+
readonly exitCode: number | null;
|
|
17
|
+
readonly stdout: string;
|
|
18
|
+
readonly stderr: string;
|
|
19
|
+
readonly timedOut?: boolean;
|
|
20
|
+
}, RepositoryFoundryError>;
|
|
21
|
+
};
|
|
22
|
+
export declare const RepositoryCommandExecutionPort: Context.Reference<RepositoryCommandExecutionPortV1 | undefined>;
|
|
23
|
+
/** Host-provided, versioned pnpm store populated before an offline invocation. */
|
|
24
|
+
export declare const RepositoryReadOnlyPnpmStore: Context.Reference<string | undefined>;
|
|
25
|
+
type IsolatedRepositoryCheckout = {
|
|
26
|
+
readonly root: string;
|
|
27
|
+
readonly checkout: string;
|
|
28
|
+
readonly home: string;
|
|
29
|
+
readonly temporary: string;
|
|
30
|
+
readonly candidateSandboxProfile?: string;
|
|
31
|
+
readonly trustedPreparationSandboxProfile?: string;
|
|
32
|
+
readonly trustedPnpmStore?: string;
|
|
33
|
+
readonly trustedPnpmStoreReadOnly?: boolean;
|
|
34
|
+
readonly materializationDurationMs: number;
|
|
35
|
+
readonly timings: {
|
|
36
|
+
checkoutDurationMs: number;
|
|
37
|
+
overlayDurationMs: number;
|
|
38
|
+
cleanupDurationMs: number;
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
type PreparedRepositoryTemplate = {
|
|
42
|
+
readonly isolated: IsolatedRepositoryCheckout;
|
|
43
|
+
readonly key: string;
|
|
44
|
+
readonly preparationResults: readonly RepositoryCommandInvocationResultV1[];
|
|
45
|
+
readonly relocatedFiles: readonly string[];
|
|
46
|
+
};
|
|
47
|
+
/** Scoped, pristine installation resources; never contains a candidate execution. */
|
|
48
|
+
export type RepositoryPreparationCacheV1 = {
|
|
49
|
+
readonly get: (input: {
|
|
50
|
+
readonly repositoryRoot: string;
|
|
51
|
+
readonly commit: string;
|
|
52
|
+
readonly recipes: readonly RepositoryCommandRecipeV1[];
|
|
53
|
+
}) => Effect.Effect<PreparedRepositoryTemplate | undefined, RepositoryFoundryError>;
|
|
54
|
+
};
|
|
55
|
+
export type RepositoryCommandOverlayV1 = {
|
|
56
|
+
readonly path: string;
|
|
57
|
+
readonly sourceCommit: string;
|
|
58
|
+
};
|
|
59
|
+
export type RepositoryCommandContentOverlayV1 = {
|
|
60
|
+
readonly path: string;
|
|
61
|
+
readonly content: string;
|
|
62
|
+
};
|
|
63
|
+
export type RepositoryPathInspectionKindV1 = "file" | "directory" | "symlink" | "missing";
|
|
64
|
+
export type RepositoryPathInspectionV1 = {
|
|
65
|
+
readonly commit: string;
|
|
66
|
+
readonly repetition: number;
|
|
67
|
+
readonly path: string;
|
|
68
|
+
readonly kind: RepositoryPathInspectionKindV1;
|
|
69
|
+
};
|
|
70
|
+
/** Installation reuse is bounded to these immutable commits and this owning Effect scope. */
|
|
71
|
+
export declare const makeRepositoryPreparationCacheV1: (input: {
|
|
72
|
+
readonly repositoryRoot: string;
|
|
73
|
+
readonly commits: readonly string[];
|
|
74
|
+
readonly trustedPreparationRecipes: readonly RepositoryCommandRecipeV1[];
|
|
75
|
+
}) => Effect.Effect<RepositoryPreparationCacheV1, RepositoryFoundryError, import("effect/Scope").Scope>;
|
|
76
|
+
export declare const replayRepositoryCommandsV1: (input: {
|
|
77
|
+
readonly repositoryRoot: string;
|
|
78
|
+
readonly commit: string;
|
|
79
|
+
readonly recipes: readonly RepositoryCommandRecipeV1[];
|
|
80
|
+
readonly repetitions?: number;
|
|
81
|
+
/** Diagnostic sequences may need post-failure controls in the same checkout. */
|
|
82
|
+
readonly continueAfterIncompleteGrade?: boolean;
|
|
83
|
+
/** Preserve the scientific repetition identity when a durable caller resumes mid-phase. */
|
|
84
|
+
readonly repetitionStart?: number;
|
|
85
|
+
readonly overlays?: readonly RepositoryCommandOverlayV1[];
|
|
86
|
+
readonly contentOverlays?: readonly RepositoryCommandContentOverlayV1[];
|
|
87
|
+
readonly fileOverrides?: readonly RepositoryCommandFileOverrideV1[];
|
|
88
|
+
readonly patch?: string;
|
|
89
|
+
readonly trustedPreparationRecipes?: readonly RepositoryCommandRecipeV1[];
|
|
90
|
+
readonly candidateValidationRecipes?: readonly RepositoryCommandRecipeV1[];
|
|
91
|
+
readonly preparationCache?: RepositoryPreparationCacheV1;
|
|
92
|
+
}) => Effect.Effect<readonly {
|
|
93
|
+
readonly recipeId: string;
|
|
94
|
+
readonly commit: string;
|
|
95
|
+
readonly repetition: number;
|
|
96
|
+
readonly stdout: string;
|
|
97
|
+
readonly stderr: string;
|
|
98
|
+
readonly exitCode: number | null;
|
|
99
|
+
readonly stage: "trusted-preparation" | "candidate-validation" | "grade";
|
|
100
|
+
readonly timedOut: boolean;
|
|
101
|
+
readonly outputTruncated: boolean;
|
|
102
|
+
readonly durationMs: number;
|
|
103
|
+
readonly trustedPreparationResults: readonly {
|
|
104
|
+
readonly recipeId: string;
|
|
105
|
+
readonly commit: string;
|
|
106
|
+
readonly repetition: number;
|
|
107
|
+
readonly stdout: string;
|
|
108
|
+
readonly stderr: string;
|
|
109
|
+
readonly exitCode: number | null;
|
|
110
|
+
readonly stage: "trusted-preparation" | "candidate-validation" | "grade";
|
|
111
|
+
readonly timedOut: boolean;
|
|
112
|
+
readonly outputTruncated: boolean;
|
|
113
|
+
readonly durationMs: number;
|
|
114
|
+
readonly testReporter?: "vitest-v1" | undefined;
|
|
115
|
+
}[];
|
|
116
|
+
readonly candidateValidationResults: readonly {
|
|
117
|
+
readonly recipeId: string;
|
|
118
|
+
readonly commit: string;
|
|
119
|
+
readonly repetition: number;
|
|
120
|
+
readonly stdout: string;
|
|
121
|
+
readonly stderr: string;
|
|
122
|
+
readonly exitCode: number | null;
|
|
123
|
+
readonly stage: "trusted-preparation" | "candidate-validation" | "grade";
|
|
124
|
+
readonly timedOut: boolean;
|
|
125
|
+
readonly outputTruncated: boolean;
|
|
126
|
+
readonly durationMs: number;
|
|
127
|
+
readonly testReporter?: "vitest-v1" | undefined;
|
|
128
|
+
}[];
|
|
129
|
+
readonly gradeExecuted: boolean;
|
|
130
|
+
readonly testReporter?: "vitest-v1" | undefined;
|
|
131
|
+
readonly isolationTimings?: {
|
|
132
|
+
readonly checkoutDurationMs: number;
|
|
133
|
+
readonly overlayDurationMs: number;
|
|
134
|
+
readonly cleanupDurationMs: number;
|
|
135
|
+
} | undefined;
|
|
136
|
+
readonly preparation?: {
|
|
137
|
+
readonly kind: "pristine-install-template";
|
|
138
|
+
readonly templateKey: string;
|
|
139
|
+
readonly sourceCommit: string;
|
|
140
|
+
readonly cloneDurationMs: number;
|
|
141
|
+
readonly sharedResults: readonly {
|
|
142
|
+
readonly recipeId: string;
|
|
143
|
+
readonly commit: string;
|
|
144
|
+
readonly repetition: number;
|
|
145
|
+
readonly stdout: string;
|
|
146
|
+
readonly stderr: string;
|
|
147
|
+
readonly exitCode: number | null;
|
|
148
|
+
readonly stage: "trusted-preparation" | "candidate-validation" | "grade";
|
|
149
|
+
readonly timedOut: boolean;
|
|
150
|
+
readonly outputTruncated: boolean;
|
|
151
|
+
readonly durationMs: number;
|
|
152
|
+
readonly testReporter?: "vitest-v1" | undefined;
|
|
153
|
+
}[];
|
|
154
|
+
} | undefined;
|
|
155
|
+
}[], RepositoryFoundryError, never>;
|
|
156
|
+
export declare const replayRepositoryCommandV1: (input: {
|
|
157
|
+
readonly repositoryRoot: string;
|
|
158
|
+
readonly commit: string;
|
|
159
|
+
readonly recipe: RepositoryCommandRecipeV1;
|
|
160
|
+
readonly repetitions?: number;
|
|
161
|
+
readonly overlays?: readonly RepositoryCommandOverlayV1[];
|
|
162
|
+
readonly contentOverlays?: readonly RepositoryCommandContentOverlayV1[];
|
|
163
|
+
readonly fileOverrides?: readonly RepositoryCommandFileOverrideV1[];
|
|
164
|
+
readonly patch?: string;
|
|
165
|
+
readonly trustedPreparationRecipes?: readonly RepositoryCommandRecipeV1[];
|
|
166
|
+
readonly candidateValidationRecipes?: readonly RepositoryCommandRecipeV1[];
|
|
167
|
+
}) => Effect.Effect<readonly {
|
|
168
|
+
readonly recipeId: string;
|
|
169
|
+
readonly commit: string;
|
|
170
|
+
readonly repetition: number;
|
|
171
|
+
readonly stdout: string;
|
|
172
|
+
readonly stderr: string;
|
|
173
|
+
readonly exitCode: number | null;
|
|
174
|
+
readonly stage: "trusted-preparation" | "candidate-validation" | "grade";
|
|
175
|
+
readonly timedOut: boolean;
|
|
176
|
+
readonly outputTruncated: boolean;
|
|
177
|
+
readonly durationMs: number;
|
|
178
|
+
readonly trustedPreparationResults: readonly {
|
|
179
|
+
readonly recipeId: string;
|
|
180
|
+
readonly commit: string;
|
|
181
|
+
readonly repetition: number;
|
|
182
|
+
readonly stdout: string;
|
|
183
|
+
readonly stderr: string;
|
|
184
|
+
readonly exitCode: number | null;
|
|
185
|
+
readonly stage: "trusted-preparation" | "candidate-validation" | "grade";
|
|
186
|
+
readonly timedOut: boolean;
|
|
187
|
+
readonly outputTruncated: boolean;
|
|
188
|
+
readonly durationMs: number;
|
|
189
|
+
readonly testReporter?: "vitest-v1" | undefined;
|
|
190
|
+
}[];
|
|
191
|
+
readonly candidateValidationResults: readonly {
|
|
192
|
+
readonly recipeId: string;
|
|
193
|
+
readonly commit: string;
|
|
194
|
+
readonly repetition: number;
|
|
195
|
+
readonly stdout: string;
|
|
196
|
+
readonly stderr: string;
|
|
197
|
+
readonly exitCode: number | null;
|
|
198
|
+
readonly stage: "trusted-preparation" | "candidate-validation" | "grade";
|
|
199
|
+
readonly timedOut: boolean;
|
|
200
|
+
readonly outputTruncated: boolean;
|
|
201
|
+
readonly durationMs: number;
|
|
202
|
+
readonly testReporter?: "vitest-v1" | undefined;
|
|
203
|
+
}[];
|
|
204
|
+
readonly gradeExecuted: boolean;
|
|
205
|
+
readonly testReporter?: "vitest-v1" | undefined;
|
|
206
|
+
readonly isolationTimings?: {
|
|
207
|
+
readonly checkoutDurationMs: number;
|
|
208
|
+
readonly overlayDurationMs: number;
|
|
209
|
+
readonly cleanupDurationMs: number;
|
|
210
|
+
} | undefined;
|
|
211
|
+
readonly preparation?: {
|
|
212
|
+
readonly kind: "pristine-install-template";
|
|
213
|
+
readonly templateKey: string;
|
|
214
|
+
readonly sourceCommit: string;
|
|
215
|
+
readonly cloneDurationMs: number;
|
|
216
|
+
readonly sharedResults: readonly {
|
|
217
|
+
readonly recipeId: string;
|
|
218
|
+
readonly commit: string;
|
|
219
|
+
readonly repetition: number;
|
|
220
|
+
readonly stdout: string;
|
|
221
|
+
readonly stderr: string;
|
|
222
|
+
readonly exitCode: number | null;
|
|
223
|
+
readonly stage: "trusted-preparation" | "candidate-validation" | "grade";
|
|
224
|
+
readonly timedOut: boolean;
|
|
225
|
+
readonly outputTruncated: boolean;
|
|
226
|
+
readonly durationMs: number;
|
|
227
|
+
readonly testReporter?: "vitest-v1" | undefined;
|
|
228
|
+
}[];
|
|
229
|
+
} | undefined;
|
|
230
|
+
}[], RepositoryFoundryError, never>;
|
|
231
|
+
export declare const inspectRepositorySolutionPathsV1: (input: {
|
|
232
|
+
readonly repositoryRoot: string;
|
|
233
|
+
readonly commit: string;
|
|
234
|
+
readonly paths: readonly string[];
|
|
235
|
+
readonly repetitions?: number;
|
|
236
|
+
readonly fileOverrides?: readonly RepositoryCommandFileOverrideV1[];
|
|
237
|
+
readonly patch?: string;
|
|
238
|
+
}) => Effect.Effect<RepositoryPathInspectionV1[], RepositoryFoundryError, never>;
|