@mutagent/helix 0.1.0-alpha.14
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/.claude/skills/mutagent-helix/SKILL.md +113 -0
- package/.claude/skills/mutagent-helix/scripts/cli/codex-transcode.ts +143 -0
- package/.claude/skills/mutagent-helix/scripts/cli/doctor.ts +111 -0
- package/.claude/skills/mutagent-helix/scripts/cli/init.ts +382 -0
- package/.claude/skills/mutagent-helix/scripts/cli/run.sh +61 -0
- package/CLAUDE.md +193 -0
- package/LICENSE +201 -0
- package/NOTICE +22 -0
- package/README.md +209 -0
- package/assets/adl-loop.svg +162 -0
- package/assets/system-status.svg +422 -0
- package/bin/mutagent-cli.mjs +9950 -0
- package/bin/mutagent-helix.mjs +78 -0
- package/mutagent-agentspec/.claude/skills/mutagent-agentspec/CLAUDE.md +28 -0
- package/mutagent-agentspec/.claude/skills/mutagent-agentspec/SKILL.md +138 -0
- package/mutagent-agentspec/.claude/skills/mutagent-agentspec/assets/templates/agentspec.yaml.tpl +247 -0
- package/mutagent-agentspec/.claude/skills/mutagent-agentspec/references/frameworks/doc-pins.md +53 -0
- package/mutagent-agentspec/.claude/skills/mutagent-agentspec/references/principles.md +91 -0
- package/mutagent-agentspec/.claude/skills/mutagent-agentspec/references/requirements.yaml +295 -0
- package/mutagent-agentspec/.claude/skills/mutagent-agentspec/references/workflows/orchestrator-protocol.md +302 -0
- package/mutagent-agentspec/.claude/skills/mutagent-agentspec/scripts/cli/doctor.ts +116 -0
- package/mutagent-agentspec/.claude/skills/mutagent-agentspec/scripts/cli/init.ts +230 -0
- package/mutagent-agentspec/.claude/skills/mutagent-agentspec/scripts/cli/run.sh +60 -0
- package/mutagent-agentspec/.claude/skills/mutagent-agentspec/scripts/config/resolve-spec-dir.ts +199 -0
- package/mutagent-agentspec/.claude/skills/mutagent-agentspec/scripts/contract/agentspec.schema.ts +455 -0
- package/mutagent-agentspec/.claude/skills/mutagent-agentspec/scripts/setup/detect.ts +67 -0
- package/mutagent-agentspec/.claude/skills/mutagent-agentspec/scripts/validate/validate-spec.ts +93 -0
- package/mutagent-agentspec/LICENSE +201 -0
- package/mutagent-agentspec/NOTICE +19 -0
- package/mutagent-agentspec/README.md +44 -0
- package/mutagent-builder/.claude/skills/mutagent-builder/SKILL.md +100 -0
- package/mutagent-builder/.claude/skills/mutagent-builder/assets/agents/ai-architect.md +312 -0
- package/mutagent-builder/.claude/skills/mutagent-builder/assets/agents/ai-engineer.md +357 -0
- package/mutagent-builder/.claude/skills/mutagent-builder/assets/templates/build-report.md.tpl +39 -0
- package/mutagent-builder/.claude/skills/mutagent-builder/references/principles.md +31 -0
- package/mutagent-builder/.claude/skills/mutagent-builder/references/workflows/build-protocol.md +61 -0
- package/mutagent-builder/.claude/skills/mutagent-builder/references/workflows/improve-handoff.md +23 -0
- package/mutagent-builder/.claude/skills/mutagent-builder/scripts/cli/run.sh +60 -0
- package/mutagent-builder/.claude/skills/mutagent-builder/scripts/handoff/validate-build-input.ts +72 -0
- package/mutagent-builder/.claude/skills/mutagent-builder/scripts/sync-spec/check-sync-spec.ts +499 -0
- package/mutagent-builder/.claude/skills/mutagent-builder/scripts/verify/spec-impl-coverage.ts +182 -0
- package/mutagent-builder/CLAUDE.md +25 -0
- package/mutagent-builder/README.md +26 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/README.md +192 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/SKILL.md +352 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/agents/ai-architect.md +256 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/agents/ai-engineer.md +344 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/agents/diagnostics-analyzer.md +576 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/agents/discovery.md +425 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/templates/audit.json.tpl +24 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/templates/audit.md.tpl +49 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/templates/config.yaml.tpl +100 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/templates/pr-body.md.tpl +56 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/templates/report.html.tpl +327 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/templates/shared/README.md +27 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/templates/shared/iter-N-handover.md.tpl +125 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/templates/shared/self-diagnosis-contract.v0.1.0.yaml.tpl +234 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/templates/shared/spec.yaml.tpl +152 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/templates/shared/team.yaml.tpl +127 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/templates/shared/wave-N-dashboard.html.tpl +1712 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/wireframes/diagnostics/WF-2.1-nl-query.md +59 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/wireframes/diagnostics/WF-2.2-tier0-progress.md +58 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/wireframes/diagnostics/WF-2.3-analysis-progress.md +44 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/wireframes/diagnostics/WF-2.4-html-report.md +61 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/wireframes/diagnostics/WF-2.5-rca-detail.md +69 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/wireframes/diagnostics/WF-2.6-stale-warning.md +53 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/wireframes/onboarding/WF-1.1-welcome.md +60 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/wireframes/onboarding/WF-1.2-source-platform-picker.md +41 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/wireframes/onboarding/WF-1.3-source-auth.md +75 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/wireframes/onboarding/WF-1.4-target-picker.md +48 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/wireframes/onboarding/WF-1.5-ask-tool.md +43 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/wireframes/onboarding/WF-1.6-config-review.md +57 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/wireframes/onboarding/WF-1.7-filter-defaults.md +52 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/wireframes/onboarding/WF-1.8-first-run.md +59 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/examples/sample-findings.json +92 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/examples/sample-meta.json +47 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/adapter-strategy.md +75 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/config-migration.md +84 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/config.md +159 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/filter-search-matrix.md +66 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/harness-knowledge.md +22 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/memory-format.md +78 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/onboarding-decisions.yaml +187 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/operation-inventory.md +59 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/overview.md +167 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/reference.md +119 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/script-index.md +101 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/source-adapter-contract.md +93 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/source-platforms/claude-code-transcripts.md +66 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/source-platforms/codex-transcripts.md +78 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/source-platforms/codex.md +145 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/source-platforms/install-paths.md +57 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/source-platforms/langfuse.md +178 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/source-platforms/local-jsonl.md +55 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/source-platforms/openobserve.md +102 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/source-platforms/otel.md +63 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/target-platforms/cloud-rest.md +84 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/target-platforms/local-claude.md +65 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/target-platforms/local-cloud-agent-sdk.md +92 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/target-platforms/local-codex.md +72 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/target-platforms/local-cursor.md +108 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/target-platforms/local-mastra.md +77 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/target-platforms/local-opencode.md +70 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/workflows/apply-pr-comment-format.md +82 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/workflows/diagnostics.md +35 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/workflows/handover-contract.md +247 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/workflows/onboarding.md +300 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/workflows/orchestrator-protocol.md +1861 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/workflows/rca.md +331 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/workflows/rendering-anatomy.md +314 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/workflows/schedule-prep.md +100 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/workflows/scope-model.md +128 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/workflows/verification-methodology.md +174 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/aggregate/sort-findings.ts +0 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/awareness/blind-spots.ts +167 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/awareness/llm-sample.ts +681 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/cli/doctor.ts +215 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/cli/init.ts +1013 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/cli/install-agents.ts +350 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/cli/run.sh +61 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/cli/shared-templates.ts +79 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/config/load.ts +392 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/config/resolve-credential.ts +120 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/config/schema.ts +641 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/config/validate.ts +134 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/context/build-diagnosis-context.ts +417 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/context/load-context.ts +105 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/contract/types.ts +166 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/enrich/build-render-input.ts +1964 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/enrich/corpus-severity.ts +172 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/enrich/dismissal-match.ts +270 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/enrich/rank-remedies.ts +75 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/hooks/install-hooks.sh +46 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/hooks/pre-push.sh +78 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/invocation/parse-brief.ts +188 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/library/match.ts +114 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/library/paths.ts +95 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/library/store.ts +535 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/library/types.ts +181 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/lint/template-inline-js.ts +267 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/memory/append.ts +188 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/memory/read.ts +218 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/normalize/platforms/entity-context.ts +686 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/normalize/read-unitf.ts +267 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/normalize/trace.ts +1078 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/normalize/unitf-adapter.ts +0 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/normalize/unitf-types.ts +213 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/report/persist-selections.ts +174 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/report/render.ts +3254 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/run/diagnose.ts +64 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/run/session.ts +167 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/sample/caps.ts +345 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/sample/deep-read-gate.ts +424 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/sample/representative.ts +584 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/scan/objection.ts +224 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/scan/trajectory.ts +489 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/self-diagnostics/dispatch.ts +135 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/self-diagnostics/probe.ts +170 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/setup/detect.ts +307 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/setup/ensure-cli.ts +315 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/setup/reconfigure.ts +77 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/setup/verify-agents.ts +207 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/slicer.ts +166 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/source/adapters/claude-code.ts +17 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/source/adapters/codex.ts +11 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/source/adapters/langfuse.ts +17 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/source/adapters/local-jsonl.ts +12 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/source/adapters/otel.ts +12 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/source/index.ts +54 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/source/registry.ts +45 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/source/types.ts +86 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/stale-detector.ts +74 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/test/render-playwright.cli.ts +477 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/tier0/claude-code.ts +133 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/tier0/langfuse.ts +143 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/tier0-scan.ts +423 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/validate/completeness-check.ts +436 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/validate/doc-refs.ts +190 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/validate/finalize-gate.ts +417 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/validate/findings-contract.ts +628 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/validate/render-js-syntax.ts +188 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/validate/report-checklist.yaml +217 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/validate/trace-shape.ts +262 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/validate/wave6-checklist.ts +326 -0
- package/mutagent-diagnostics/CLAUDE.md +41 -0
- package/mutagent-diagnostics/LICENSE +201 -0
- package/mutagent-diagnostics/NOTICE +18 -0
- package/mutagent-diagnostics/README.md +343 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/SKILL.md +548 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/assets/agents/audit-executor.md +169 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/assets/agents/dataset-builder.md +160 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/assets/agents/discovery.md +425 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/assets/agents/evaluator.md +1108 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/assets/brand/theme.css +213 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/assets/brand/wordmark.html +9 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/lenses/context-flow-lens.md +85 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/lenses/data-lens.md +47 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/lenses/decision-lens.md +48 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/lenses/methodology-critic-lens.md +53 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/lenses/trajectory-lens.md +44 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/references/build-review-interface.md +83 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/references/edd-loop.md +134 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/references/error-analysis.md +113 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/references/eval-audit.md +154 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/references/eval-stage.md +168 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/references/generate-synthetic-data.md +81 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/references/grounded-adjudication.md +221 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/references/memory-format.md +65 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/references/methodology.md +201 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/references/operation-inventory.md +197 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/references/validate-evaluator.md +125 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/references/workflows/orchestrator-protocol.md +300 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/references/write-judge-prompt.md +123 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/schemas/behavior-tree.schema.yaml +73 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/schemas/dataset.schema.yaml +66 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/schemas/edd-change-request.schema.yaml +114 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/schemas/eval-matrix.schema.yaml +74 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/schemas/flow-graph.schema.yaml +69 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/schemas/flow-profile.schema.yaml +49 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/schemas/methodology-review.schema.yaml +40 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/schemas/scorecard.schema.yaml +85 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/agent-dispatch.ts +0 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/aggregate-discover.ts +543 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/artifact-paths.ts +115 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/assemble-scorecard.ts +172 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/build-dataset.ts +186 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/build-evals.ts +93 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/build-review-ui.ts +393 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/check-method-router.ts +170 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/cli/aggregate.ts +112 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/cli/audit-run.ts +182 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/cli/doctor.ts +211 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/cli/dogfood.ts +133 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/cli/init.ts +601 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/cli/methodology-review.ts +122 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/cli/prep.ts +295 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/cli/profile-subject.ts +165 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/cli/run.sh +56 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/cli/variance-check.ts +105 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/code-eval.ts +248 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/code-quality-verdict.ts +285 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/codegen-evals.ts +173 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/cold-start-project.ts +151 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/cold-start-sampler.ts +267 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/config/load.ts +343 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/config/schema.ts +380 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/contracts/agentspec-evals.ts +85 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/contracts/dataset.ts +149 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/contracts/eval-engine.ts +118 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/contracts/eval-matrix.ts +577 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/contracts/eval-types.ts +1074 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/contracts/flow-graph.ts +194 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/contracts/types.ts +303 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/contracts/validation.ts +193 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/derive-dataset.ts +152 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/determine-outcome.ts +219 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/diff-discriminate.ts +160 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/discover-criteria.ts +348 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/edd/change-request.ts +232 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/edd/edd-types.ts +210 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/edd/variance-gate.ts +186 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/emit-completeness.ts +111 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/eval-engine.ts +160 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/evaluate.ts +333 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/flow-graph.ts +230 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/judge-prompt-template.ts +253 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/judge-provider.ts +135 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/lint-grounding.ts +229 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/lint-uniformity.ts +168 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/living-suite.ts +109 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/load-bundle.ts +203 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/load-profile-vocab.ts +64 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/load-profile.ts +106 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/mask.ts +138 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/materialize-dataset.ts +113 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/matrix-judge.ts +750 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/memory/append.ts +215 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/memory/read.ts +168 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/persist-eval-criteria.ts +232 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/prep-tasks.ts +125 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/profile-subject.ts +310 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/publish-report.ts +131 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/read-unitf-traces.ts +81 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/render-build-cards.ts +195 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/render-discover-report.ts +1640 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/render-eval-report.ts +3838 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/render-report.ts +212 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/resolve-credential.ts +110 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/resolve-ref.ts +98 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/result-verify.ts +129 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/route-failures.ts +330 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/run-deterministic.ts +367 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/run-evaluate.ts +719 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/run-judge.ts +155 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/run-pipeline.ts +175 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/sample-traces.ts +210 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/self-audit.ts +387 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/source-map.ts +106 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/subject-profile.ts +134 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/substrate.ts +162 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/sync-eval-criteria.ts +244 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/ui-slots.ts +119 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/unitf-to-evaltrace.ts +284 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/validate-judge.ts +358 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/variance-compare.ts +177 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/subjects/mutagent-diagnostics/behavior-tree.yaml +140 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/subjects/mutagent-diagnostics/eval-matrix.yaml +1270 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/subjects/mutagent-diagnostics/methodology-review.yaml +105 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/workflows/audit.workflow.js +82 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/workflows/data-leak.workflow.js +236 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/workflows/variance.workflow.js +163 -0
- package/mutagent-evaluator/CLAUDE.md +45 -0
- package/mutagent-evaluator/LICENSE +201 -0
- package/mutagent-evaluator/NOTICE +23 -0
- package/mutagent-evaluator/README.md +88 -0
- package/mutagent-optimize/.claude/skills/mutagent-optimize/SKILL.md +287 -0
- package/mutagent-optimize/.claude/skills/mutagent-optimize/scripts/contracts/amend-request.ts +503 -0
- package/mutagent-optimize/.claude/skills/mutagent-optimize/scripts/improve-loop-run.ts +304 -0
- package/mutagent-optimize/.claude/skills/mutagent-optimize/scripts/loop-state-cli.ts +300 -0
- package/mutagent-optimize/.claude/skills/mutagent-optimize/scripts/loop-state.ts +440 -0
- package/mutagent-optimize/CLAUDE.md +49 -0
- package/mutagent-optimize/README.md +26 -0
- package/mutagent-orchestrator/CLAUDE.md +102 -0
- package/mutagent-orchestrator/README.md +20 -0
- package/mutagent-orchestrator/assets/agents/discovery.md +425 -0
- package/mutagent-orchestrator/assets/agents/dogfood-monitor.md +266 -0
- package/mutagent-orchestrator/assets/agents/monitor.md +258 -0
- package/mutagent-orchestrator/orchestrator.md +782 -0
- package/mutagent-orchestrator/references/MONITORING.md +209 -0
- package/mutagent-orchestrator/references/config-fields.md +132 -0
- package/mutagent-orchestrator/references/config-migration.md +132 -0
- package/mutagent-orchestrator/references/index-registry.md +92 -0
- package/mutagent-orchestrator/routing.yaml +391 -0
- package/mutagent-orchestrator/scripts/config-schema.ts +1010 -0
- package/mutagent-orchestrator/scripts/dispatch.ts +439 -0
- package/mutagent-orchestrator/scripts/dogfood/extract-feedback.ts +203 -0
- package/mutagent-orchestrator/scripts/dogfood/reconstruct-trajectory.ts +327 -0
- package/mutagent-orchestrator/scripts/dogfood/render-dogfood-report.ts +347 -0
- package/mutagent-orchestrator/scripts/dogfood/resolve-subagents.ts +160 -0
- package/mutagent-orchestrator/scripts/dogfood/run-report.ts +264 -0
- package/mutagent-orchestrator/scripts/dogfood/slack-thread.ts +106 -0
- package/mutagent-orchestrator/scripts/dogfood/types.ts +257 -0
- package/mutagent-orchestrator/scripts/eval-routing.ts +753 -0
- package/mutagent-orchestrator/scripts/gate.ts +219 -0
- package/mutagent-orchestrator/scripts/handover-contract.ts +362 -0
- package/mutagent-orchestrator/scripts/index/build-index.ts +351 -0
- package/mutagent-orchestrator/scripts/index/render-index.ts +110 -0
- package/mutagent-orchestrator/scripts/monitor/slack-notify.ts +111 -0
- package/mutagent-orchestrator/scripts/monitor/triggers.ts +162 -0
- package/mutagent-orchestrator/scripts/onboarding-check.ts +369 -0
- package/mutagent-orchestrator/scripts/render-roster.ts +308 -0
- package/mutagent-orchestrator/scripts/resolve-credential.ts +185 -0
- package/mutagent-orchestrator/scripts/resolve-paths.ts +114 -0
- package/mutagent-orchestrator/scripts/slack/format.ts +63 -0
- package/mutagent-orchestrator/scripts/slack/post.ts +115 -0
- package/mutagent-orchestrator/scripts/sync-index.ts +311 -0
- package/package.json +64 -0
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* scripts/render-report.ts
|
|
3
|
+
* ---------------------------------------------------------------------------
|
|
4
|
+
* The color-coded renderer — composes the 4-tab master-audit HTML from the
|
|
5
|
+
* assembled scorecard + the tab fragments (data-leak Tab-2, variance Tab-3,
|
|
6
|
+
* methodology Tab-4). Renders from the evaluator's OWN bundled Mutagent brand
|
|
7
|
+
* asset (assets/brand/theme.css + wordmark.html) so the report is visually
|
|
8
|
+
* consistent with the diagnostics gold-standard report (dark theme, MUTAGENT
|
|
9
|
+
* wordmark, same tokens) WITHOUT referencing the diagnostics package at runtime.
|
|
10
|
+
*
|
|
11
|
+
* Deterministic + null-guarded: every dereference is guarded so a contract-
|
|
12
|
+
* incomplete input fails-loud at the assembler, never crashes the renderer. The
|
|
13
|
+
* only non-deterministic input is the injected generatedAt (passed in), so two
|
|
14
|
+
* renders of the same scorecard are byte-identical after the generatedAt mask.
|
|
15
|
+
*/
|
|
16
|
+
import { readFileSync } from "node:fs";
|
|
17
|
+
import { dirname, join } from "node:path";
|
|
18
|
+
import { fileURLToPath } from "node:url";
|
|
19
|
+
import {
|
|
20
|
+
type GateComponent,
|
|
21
|
+
type Scorecard,
|
|
22
|
+
type ScorecardCriterion,
|
|
23
|
+
} from "./contracts/types.ts";
|
|
24
|
+
|
|
25
|
+
const HERE = dirname(fileURLToPath(import.meta.url));
|
|
26
|
+
const BRAND_DIR = join(HERE, "..", "assets", "brand");
|
|
27
|
+
|
|
28
|
+
/** HTML-escape (null-guarded — no throw on undefined). */
|
|
29
|
+
export function esc(s: unknown): string {
|
|
30
|
+
return String(s ?? "")
|
|
31
|
+
.replace(/&/g, "&")
|
|
32
|
+
.replace(/</g, "<")
|
|
33
|
+
.replace(/>/g, ">")
|
|
34
|
+
.replace(/"/g, """);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function sevBadge(sev: string): string {
|
|
38
|
+
const cls =
|
|
39
|
+
sev === "CRIT"
|
|
40
|
+
? "b-crit"
|
|
41
|
+
: sev === "HIGH"
|
|
42
|
+
? "b-high"
|
|
43
|
+
: sev === "MED"
|
|
44
|
+
? "b-med"
|
|
45
|
+
: "b-low";
|
|
46
|
+
return `<span class="badge ${cls}">${esc(sev)}</span>`;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function resultBadge(result: string): string {
|
|
50
|
+
const cls =
|
|
51
|
+
result === "pass" ? "b-pass" : result === "fail" ? "b-fail" : "b-skip";
|
|
52
|
+
return `<span class="badge ${cls}">${esc(result)}</span>`;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function criterionRow(c: ScorecardCriterion): string {
|
|
56
|
+
return (
|
|
57
|
+
`<tr><td>${esc(c.dimension)}</td>` +
|
|
58
|
+
`<td>${sevBadge(c.severity)}</td>` +
|
|
59
|
+
`<td><code>${esc(c.checkMethod)}</code></td>` +
|
|
60
|
+
`<td>${esc(c.track)}</td>` +
|
|
61
|
+
`<td>${resultBadge(c.result)}</td>` +
|
|
62
|
+
`<td>${esc(c.detail)}</td></tr>`
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function componentSection(g: GateComponent): string {
|
|
67
|
+
const passBadge = g.pass
|
|
68
|
+
? `<span class="badge b-pass">PASS</span>`
|
|
69
|
+
: `<span class="badge b-fail">FAIL</span>`;
|
|
70
|
+
const rows = g.criteria.map(criterionRow).join("");
|
|
71
|
+
return (
|
|
72
|
+
`<h3>${esc(g.componentId)} ${passBadge}</h3>` +
|
|
73
|
+
`<table><thead><tr><th>Dimension</th><th>Sev</th><th>Check</th><th>Track</th><th>Result</th><th>Detail</th></tr></thead>` +
|
|
74
|
+
`<tbody>${rows}</tbody></table>`
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export interface RenderTabs {
|
|
79
|
+
/** Tab-2 data-leak HTML fragment (body of the panel). */
|
|
80
|
+
dataLeakHtml?: string;
|
|
81
|
+
/** Tab-4 methodology-review HTML fragment. */
|
|
82
|
+
methodologyHtml?: string;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
function evalMatrixTab(scorecard: Scorecard): string {
|
|
86
|
+
const t = scorecard.gate.totals;
|
|
87
|
+
// GA — ternary fail ▸ incomplete ▸ pass (back-compat: derive from runPass when
|
|
88
|
+
// runVerdict is absent, e.g. legacy v1 scorecards never carry incomplete rows).
|
|
89
|
+
const runVerdict = scorecard.gate.runVerdict ?? (scorecard.gate.runPass ? "pass" : "fail");
|
|
90
|
+
const incompleteN = t.incomplete ?? 0;
|
|
91
|
+
const verdictClass = runVerdict === "pass" ? "pass" : runVerdict === "incomplete" ? "skip" : "fail";
|
|
92
|
+
const verdictText =
|
|
93
|
+
runVerdict === "pass"
|
|
94
|
+
? "Run PASS — every component cleared the severity gate (0 CRIT/HIGH fail or indeterminate)."
|
|
95
|
+
: runVerdict === "incomplete"
|
|
96
|
+
? `Run INCOMPLETE — ${incompleteN} CRIT/HIGH criteria indeterminate (no CRIT/HIGH fail). The run cannot be certified — NOT a pass.`
|
|
97
|
+
: `Run FAIL — ${t.critFail} CRIT + ${t.highFail} HIGH criteria failed the gate.`;
|
|
98
|
+
const tiles = [
|
|
99
|
+
["Components", String(scorecard.gate.components.length)],
|
|
100
|
+
["Pass", String(t.pass)],
|
|
101
|
+
["Fail", String(t.fail)],
|
|
102
|
+
["Skip (seam)", String(t.skip)],
|
|
103
|
+
["CRIT fail", String(t.critFail)],
|
|
104
|
+
["HIGH fail", String(t.highFail)],
|
|
105
|
+
]
|
|
106
|
+
.map(
|
|
107
|
+
([l, v]) =>
|
|
108
|
+
`<div class="s"><div class="v">${esc(v)}</div><div class="l">${esc(l)}</div></div>`,
|
|
109
|
+
)
|
|
110
|
+
.join("");
|
|
111
|
+
const components = scorecard.gate.components.map(componentSection).join("");
|
|
112
|
+
return (
|
|
113
|
+
`<h2>Eval Matrix — Track-1 GATE</h2>` +
|
|
114
|
+
`<div class="sub">Binary, severity-gated. Component PASS iff 0 CRIT/HIGH fail. Run PASS iff all components pass. Advisory.</div>` +
|
|
115
|
+
`<div class="verdict ${verdictClass}"><strong>${esc(verdictText)}</strong></div>` +
|
|
116
|
+
`<div class="big-stat">${tiles}</div>` +
|
|
117
|
+
components
|
|
118
|
+
);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
function varianceTab(scorecard: Scorecard): string {
|
|
122
|
+
const dims = scorecard.trend.dimensions ?? [];
|
|
123
|
+
const rows = dims
|
|
124
|
+
.map(
|
|
125
|
+
(d) =>
|
|
126
|
+
`<tr><td>${esc(d.name)}</td><td>${esc(d.measure)}</td><td>${esc(d.target)}</td><td>${esc(d.divergence)}</td></tr>`,
|
|
127
|
+
)
|
|
128
|
+
.join("");
|
|
129
|
+
const pairNote = scorecard.trend.runPair
|
|
130
|
+
? `run-pair: <code>${esc(scorecard.trend.runPair.a)}</code> vs <code>${esc(scorecard.trend.runPair.b)}</code>`
|
|
131
|
+
: "single-run audit — no run-pair compared (variance dimensions not-evaluated)";
|
|
132
|
+
return (
|
|
133
|
+
`<h2>Variance Trend — Track-2 TREND</h2>` +
|
|
134
|
+
`<div class="sub">The 15-dim determinism score, SEPARATE from GATE, never merged. ${pairNote}.</div>` +
|
|
135
|
+
`<div class="big-stat"><div class="s"><div class="v">${esc(scorecard.trend.varianceScore)}</div><div class="l">Variance score (diverged dims)</div></div></div>` +
|
|
136
|
+
`<table><thead><tr><th>Dimension</th><th>Measure</th><th>Target</th><th>Divergence</th></tr></thead><tbody>${rows}</tbody></table>`
|
|
137
|
+
);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Render the full 4-tab report HTML. Pure string assembly; no I/O except reading
|
|
142
|
+
* the bundled brand assets.
|
|
143
|
+
*/
|
|
144
|
+
export function renderReport(
|
|
145
|
+
scorecard: Scorecard,
|
|
146
|
+
tabs: RenderTabs = {},
|
|
147
|
+
): string {
|
|
148
|
+
const theme = readFileSync(join(BRAND_DIR, "theme.css"), "utf8");
|
|
149
|
+
const wordmark = readFileSync(join(BRAND_DIR, "wordmark.html"), "utf8");
|
|
150
|
+
|
|
151
|
+
const headerTitle = "Evaluator — Master Audit";
|
|
152
|
+
const headerMeta =
|
|
153
|
+
`<span class="mk">subject</span> <span class="mv">${esc(scorecard.subject)}</span>` +
|
|
154
|
+
`<span class="sep">·</span><span class="mk">runId</span> <span class="mv">${esc(scorecard.runId)}</span>` +
|
|
155
|
+
`<span class="sep">·</span><span class="mk">generated</span> <span class="mv">${esc(scorecard.generatedAt)}</span>`;
|
|
156
|
+
const header = wordmark
|
|
157
|
+
.replaceAll("{{HEADER_TITLE}}", esc(headerTitle))
|
|
158
|
+
.replaceAll("{{HEADER_META}}", headerMeta);
|
|
159
|
+
|
|
160
|
+
const dataLeak =
|
|
161
|
+
tabs.dataLeakHtml ??
|
|
162
|
+
`<h2>Data-Leak Graph</h2><div class="sub">Tab-2 — pipeline-with-leak-edges (C2C/UI x class x formal-structure).</div><div class="warn"><strong>Not composed:</strong> run workflows/data-leak.workflow.js to populate this tab (judge-execution seam).</div>`;
|
|
163
|
+
const methodology =
|
|
164
|
+
tabs.methodologyHtml ??
|
|
165
|
+
`<h2>Methodology Review</h2><div class="sub">Tab-4 — fitness, not conformance. Decision-tree fitness · data-flow efficiency · process self-feedback.</div><div class="warn"><strong>Not composed:</strong> run the methodology-critic lens to populate this tab (judge-execution seam).</div>`;
|
|
166
|
+
|
|
167
|
+
return `<!DOCTYPE html>
|
|
168
|
+
<html lang="en" data-theme="dark">
|
|
169
|
+
<head>
|
|
170
|
+
<meta charset="UTF-8">
|
|
171
|
+
<title>${esc(headerTitle)} — ${esc(scorecard.subject)}</title>
|
|
172
|
+
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
173
|
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
174
|
+
<link href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=IBM+Plex+Mono:wght@400;500;600&display=swap" rel="stylesheet">
|
|
175
|
+
<style>
|
|
176
|
+
${theme}
|
|
177
|
+
</style>
|
|
178
|
+
</head>
|
|
179
|
+
<body>
|
|
180
|
+
${header}
|
|
181
|
+
<nav class="tabs">
|
|
182
|
+
<button class="tab-btn active" data-tab="t1">Eval Matrix</button>
|
|
183
|
+
<button class="tab-btn" data-tab="t2">Data-Leak</button>
|
|
184
|
+
<button class="tab-btn" data-tab="t3">Variance Trend</button>
|
|
185
|
+
<button class="tab-btn internal" data-tab="t4">Methodology Review</button>
|
|
186
|
+
</nav>
|
|
187
|
+
<main>
|
|
188
|
+
<section class="panel active" id="t1">${evalMatrixTab(scorecard)}</section>
|
|
189
|
+
<section class="panel" id="t2">${dataLeak}</section>
|
|
190
|
+
<section class="panel" id="t3">${varianceTab(scorecard)}</section>
|
|
191
|
+
<section class="panel" id="t4">${methodology}</section>
|
|
192
|
+
</main>
|
|
193
|
+
<script>
|
|
194
|
+
(function(){
|
|
195
|
+
var btns = document.querySelectorAll('nav.tabs button');
|
|
196
|
+
var panels = document.querySelectorAll('main .panel');
|
|
197
|
+
for (var i = 0; i < btns.length; i++) {
|
|
198
|
+
btns[i].addEventListener('click', function(){
|
|
199
|
+
var tab = this.getAttribute('data-tab');
|
|
200
|
+
for (var j = 0; j < btns.length; j++) btns[j].classList.remove('active');
|
|
201
|
+
for (var k = 0; k < panels.length; k++) panels[k].classList.remove('active');
|
|
202
|
+
this.classList.add('active');
|
|
203
|
+
var panel = document.getElementById(tab);
|
|
204
|
+
if (panel) panel.classList.add('active');
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
})();
|
|
208
|
+
</script>
|
|
209
|
+
</body>
|
|
210
|
+
</html>
|
|
211
|
+
`;
|
|
212
|
+
}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* scripts/resolve-credential.ts
|
|
3
|
+
* The shared secret resolver (operator decision 2026-06-29). PORTED IN — standalone
|
|
4
|
+
* copy (no cross-skill import; mirrors the orchestrator's canonical impl).
|
|
5
|
+
*
|
|
6
|
+
* A `creds_ref` / `credential_ref` in `.mutagent/config.yaml` is NEVER a raw secret
|
|
7
|
+
* — it names where the value lives. This turns the ref into the value by a fixed
|
|
8
|
+
* PRECEDENCE:
|
|
9
|
+
*
|
|
10
|
+
* 1. process.env[name] — the running environment wins (CI / shell export).
|
|
11
|
+
* 2. local `.env` — projectRoot/.env (the conventional dev secret file).
|
|
12
|
+
* 3. `.mutagentrc` — projectRoot/.mutagentrc (the credential/provider store;
|
|
13
|
+
* the fallback when no `.env` is around — it STAYS).
|
|
14
|
+
*
|
|
15
|
+
* Raw secret VALUES never enter config.yaml. Pure core with INJECTED deps (env map
|
|
16
|
+
* + file reader) → deterministic tests. Secret-safety: this module returns the
|
|
17
|
+
* value only to its caller; it never logs it.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
import { readFileSync } from "node:fs";
|
|
21
|
+
import { resolve } from "node:path";
|
|
22
|
+
|
|
23
|
+
export type CredentialRef = string | { env: string; path?: string };
|
|
24
|
+
export type CredentialSource = "env" | ".env" | ".mutagentrc" | "ref-path";
|
|
25
|
+
|
|
26
|
+
export type ResolveCredentialResult =
|
|
27
|
+
| { found: true; value: string; source: CredentialSource; from: string }
|
|
28
|
+
| { found: false; name: string; tried: string[] };
|
|
29
|
+
|
|
30
|
+
export interface ResolveCredentialDeps {
|
|
31
|
+
env: Record<string, string | undefined>;
|
|
32
|
+
/** File contents, or null if unreadable/absent. Never throws. */
|
|
33
|
+
readFile: (p: string) => string | null;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const ENV_LINE = /^\s*(?:export\s+)?([A-Za-z_][A-Za-z0-9_]*)\s*=\s*(.*)\s*$/;
|
|
37
|
+
|
|
38
|
+
/** Parse a dotenv-style file (`.env` / `.mutagentrc`). Pure — string in, map out. */
|
|
39
|
+
export function parseDotenv(content: string): Record<string, string> {
|
|
40
|
+
const out: Record<string, string> = {};
|
|
41
|
+
for (const rawLine of content.split(/\r?\n/)) {
|
|
42
|
+
const line = rawLine.trim();
|
|
43
|
+
if (line === "" || line.startsWith("#")) continue;
|
|
44
|
+
const m = ENV_LINE.exec(line);
|
|
45
|
+
if (!m) continue;
|
|
46
|
+
const key = m[1];
|
|
47
|
+
let val = m[2];
|
|
48
|
+
const quoted =
|
|
49
|
+
(val.startsWith('"') && val.endsWith('"') && val.length >= 2) ||
|
|
50
|
+
(val.startsWith("'") && val.endsWith("'") && val.length >= 2);
|
|
51
|
+
if (quoted) {
|
|
52
|
+
val = val.slice(1, -1);
|
|
53
|
+
} else {
|
|
54
|
+
const hash = val.indexOf(" #");
|
|
55
|
+
if (hash >= 0) val = val.slice(0, hash).trim();
|
|
56
|
+
}
|
|
57
|
+
out[key] = val;
|
|
58
|
+
}
|
|
59
|
+
return out;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function normalizeRef(ref: CredentialRef): { name: string; refPath?: string } {
|
|
63
|
+
if (typeof ref === "string") return { name: ref };
|
|
64
|
+
return { name: ref.env, refPath: ref.path };
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Resolve a credential ref to its secret by precedence (env → .env → .mutagentrc),
|
|
69
|
+
* with an optional ref-pinned file tried FIRST among files. Pure: I/O injected.
|
|
70
|
+
*/
|
|
71
|
+
export function resolveCredential(
|
|
72
|
+
ref: CredentialRef,
|
|
73
|
+
projectRoot: string,
|
|
74
|
+
deps: ResolveCredentialDeps,
|
|
75
|
+
): ResolveCredentialResult {
|
|
76
|
+
const { name, refPath } = normalizeRef(ref);
|
|
77
|
+
const tried: string[] = [];
|
|
78
|
+
|
|
79
|
+
const envVal = deps.env[name];
|
|
80
|
+
if (envVal !== undefined && envVal !== "") {
|
|
81
|
+
return { found: true, value: envVal, source: "env", from: `process.env.${name}` };
|
|
82
|
+
}
|
|
83
|
+
tried.push(`process.env.${name}`);
|
|
84
|
+
|
|
85
|
+
const fileTiers: { label: CredentialSource; file: string }[] = [];
|
|
86
|
+
if (refPath) fileTiers.push({ label: "ref-path", file: resolve(projectRoot, refPath) });
|
|
87
|
+
fileTiers.push({ label: ".env", file: resolve(projectRoot, ".env") });
|
|
88
|
+
fileTiers.push({ label: ".mutagentrc", file: resolve(projectRoot, ".mutagentrc") });
|
|
89
|
+
|
|
90
|
+
for (const tier of fileTiers) {
|
|
91
|
+
tried.push(tier.file);
|
|
92
|
+
const content = deps.readFile(tier.file);
|
|
93
|
+
if (content === null) continue;
|
|
94
|
+
const val = parseDotenv(content)[name];
|
|
95
|
+
if (val !== undefined && val !== "") {
|
|
96
|
+
return { found: true, value: val, source: tier.label, from: tier.file };
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
return { found: false, name, tried };
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/** Real-fs reader: contents or null (never throws). */
|
|
104
|
+
export function readFileOrNull(p: string): string | null {
|
|
105
|
+
try {
|
|
106
|
+
return readFileSync(p, "utf-8");
|
|
107
|
+
} catch {
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* scripts/resolve-ref.ts — GA-1/GA-2 the resolve-ref primitive (named CLI + lib).
|
|
3
|
+
* ---------------------------------------------------------------------------
|
|
4
|
+
* The single deterministic guard both GA edges ride:
|
|
5
|
+
* · GA-1 GATHER — an `observed` criterion's evidence refs must RE-RESOLVE
|
|
6
|
+
* exact-match against the trace (else inferred-as-observed).
|
|
7
|
+
* · GA-2 BIND — at judge time every criterion TERM (its referents) must
|
|
8
|
+
* resolve to a grounded referent in the SITUATION trace; an
|
|
9
|
+
* unbound term ⇒ indeterminate(factual-intent), NOT a fail.
|
|
10
|
+
*
|
|
11
|
+
* The pure core (`resolveRef` / `bindCriterionTerms` / `normalizeRefText`) lives
|
|
12
|
+
* in the contract (`contracts/eval-types.ts`) so it is import-safe everywhere
|
|
13
|
+
* (the gate `assertGroundingHonest` rides it too). This script RE-EXPORTS that
|
|
14
|
+
* core under the spec's `resolve-ref` name, adds the BIND verdict-shaping helper,
|
|
15
|
+
* and a thin CLI for ad-hoc resolution. PURE — no clock/random/network.
|
|
16
|
+
*/
|
|
17
|
+
import { readFileSync } from "node:fs";
|
|
18
|
+
import {
|
|
19
|
+
AssumptionKind,
|
|
20
|
+
OutcomeVerdict,
|
|
21
|
+
bindCriterionTerms,
|
|
22
|
+
resolveRef,
|
|
23
|
+
type CriterionVerdict,
|
|
24
|
+
type DiscoveryRef,
|
|
25
|
+
type EvalTrace,
|
|
26
|
+
type MinedCriterion,
|
|
27
|
+
type VerdictBlock,
|
|
28
|
+
} from "./contracts/eval-types.ts";
|
|
29
|
+
|
|
30
|
+
export {
|
|
31
|
+
bindCriterionTerms,
|
|
32
|
+
normalizeRefText,
|
|
33
|
+
resolveRef,
|
|
34
|
+
type BindResult,
|
|
35
|
+
type RefResolution,
|
|
36
|
+
} from "./contracts/eval-types.ts";
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* GA-2 L1 — bind a criterion to a SITUATION before judging. Returns either
|
|
40
|
+
* `{ bound: true }` (judge may proceed) or a ready-made INDETERMINATE verdict
|
|
41
|
+
* (`uncertain` + `blockedBy: { kind: factual-intent }`) naming the unbound terms.
|
|
42
|
+
* The judge NEVER returns a fail on an unbound term — abstention is the contract.
|
|
43
|
+
* PURE.
|
|
44
|
+
*/
|
|
45
|
+
export function bindBeforeJudge(
|
|
46
|
+
criterion: MinedCriterion,
|
|
47
|
+
traceId: string,
|
|
48
|
+
situation: EvalTrace[],
|
|
49
|
+
extraTerms: DiscoveryRef[] = [],
|
|
50
|
+
): { bound: true } | { bound: false; verdict: CriterionVerdict } {
|
|
51
|
+
const refs = criterion.discovery.evidence.refs;
|
|
52
|
+
const res = bindCriterionTerms(refs, situation, extraTerms);
|
|
53
|
+
if (res.bound) return { bound: true };
|
|
54
|
+
const unboundList = res.unbound.map((r) => `${r.obs}/${r.path}:"${r.value}"`).join(", ");
|
|
55
|
+
const blockedBy: VerdictBlock = {
|
|
56
|
+
kind: AssumptionKind.FactualIntent,
|
|
57
|
+
text: `unbound criterion term(s) — no referent in this situation: ${unboundList}`,
|
|
58
|
+
};
|
|
59
|
+
return {
|
|
60
|
+
bound: false,
|
|
61
|
+
verdict: {
|
|
62
|
+
criterionId: criterion.id,
|
|
63
|
+
traceId,
|
|
64
|
+
result: OutcomeVerdict.Uncertain,
|
|
65
|
+
confidence: 0,
|
|
66
|
+
critique:
|
|
67
|
+
"BIND failed (GA-2 L1): a term this criterion presupposes has no grounded " +
|
|
68
|
+
`referent in the situation — abstaining (indeterminate), not failing. ${blockedBy.text}`,
|
|
69
|
+
blockedBy,
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// ── CLI: bun scripts/resolve-ref.ts <traces.json> <obs> <path> <value> ───────
|
|
75
|
+
declare const Bun: { argv: string[] } | undefined;
|
|
76
|
+
|
|
77
|
+
function main(): void {
|
|
78
|
+
const argv = typeof Bun !== "undefined" ? Bun.argv.slice(2) : process.argv.slice(2);
|
|
79
|
+
const [tracesPath, obs, path, value] = argv;
|
|
80
|
+
if (!tracesPath || obs === undefined || value === undefined) {
|
|
81
|
+
console.error("usage: resolve-ref.ts <traces.json> <obs> <path> <value>");
|
|
82
|
+
process.exit(2);
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
const raw = JSON.parse(readFileSync(tracesPath, "utf8")) as unknown;
|
|
86
|
+
const traces = (Array.isArray(raw) ? raw : [raw]) as EvalTrace[];
|
|
87
|
+
const ref: DiscoveryRef = { obs, path: path ?? "", value };
|
|
88
|
+
const res = resolveRef(ref, traces);
|
|
89
|
+
console.info(JSON.stringify(res, null, 2));
|
|
90
|
+
process.exit(res.resolved ? 0 : 1);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
const isMain =
|
|
94
|
+
typeof import.meta !== "undefined" &&
|
|
95
|
+
(import.meta as unknown as { main?: boolean }).main === true;
|
|
96
|
+
if (isMain) {
|
|
97
|
+
main();
|
|
98
|
+
}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* scripts/result-verify.ts — GA-5 the result-verifier (reviewer ≠ judge · downgrade-only).
|
|
3
|
+
* ---------------------------------------------------------------------------
|
|
4
|
+
* The ⑤ VERIFY guard: an INDEPENDENT pass over a decided verdict that asks the
|
|
5
|
+
* one question sourcing can't secure — does the CLAIM actually ENTAIL the
|
|
6
|
+
* VERDICT, or is there an inferential leap (a hidden, ungrounded premise)?
|
|
7
|
+
*
|
|
8
|
+
* Two hard invariants (the contract):
|
|
9
|
+
* 1. DOWNGRADE-ONLY — the verifier may only move a verdict DOWN the lattice
|
|
10
|
+
* `pass|fail → uncertain(blockedBy)`. It NEVER flips pass↔fail and NEVER
|
|
11
|
+
* promotes uncertain→pass/fail. `uncertain` is the floor (returned as-is).
|
|
12
|
+
* 2. NEVER FIXES — it is a reviewer, not a judge and not a remediator (EV-051);
|
|
13
|
+
* it emits a (possibly-downgraded) verdict, nothing else.
|
|
14
|
+
*
|
|
15
|
+
* The deterministic skeleton here re-resolves the verdict's cited refs (GA-1) and
|
|
16
|
+
* applies the independent reviewer's `entails` judgement (the LLM leaf). On a
|
|
17
|
+
* dead ref OR an inferential leap → downgrade to `uncertain` + a typed
|
|
18
|
+
* `blockedBy`. PURE — no clock/random/network.
|
|
19
|
+
*/
|
|
20
|
+
import {
|
|
21
|
+
AssumptionKind,
|
|
22
|
+
OutcomeVerdict,
|
|
23
|
+
resolveRef,
|
|
24
|
+
type AssumptionKindValue,
|
|
25
|
+
type CriterionVerdict,
|
|
26
|
+
type EvalTrace,
|
|
27
|
+
type VerdictBlock,
|
|
28
|
+
} from "./contracts/eval-types.ts";
|
|
29
|
+
|
|
30
|
+
/** The independent reviewer's judgement (produced by the LLM verify leaf). */
|
|
31
|
+
export interface VerifierSignal {
|
|
32
|
+
/** does the CLAIM entail the VERDICT? false ⇒ inferential leap ⇒ downgrade. */
|
|
33
|
+
entails: boolean;
|
|
34
|
+
/** when !entails: the residual (ungrounded) premise — becomes blockedBy.text. */
|
|
35
|
+
leap?: string;
|
|
36
|
+
/** the kind of the residual assumption (default `normative`). */
|
|
37
|
+
leapKind?: AssumptionKindValue;
|
|
38
|
+
/** the reviewer identity (≠ the judge that produced the verdict). */
|
|
39
|
+
reviewerId?: string;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export interface VerifyResult {
|
|
43
|
+
verdict: CriterionVerdict;
|
|
44
|
+
downgraded: boolean;
|
|
45
|
+
reason: string;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function downgrade(
|
|
49
|
+
verdict: CriterionVerdict,
|
|
50
|
+
blockedBy: VerdictBlock,
|
|
51
|
+
reason: string,
|
|
52
|
+
): VerifyResult {
|
|
53
|
+
return {
|
|
54
|
+
verdict: {
|
|
55
|
+
...verdict,
|
|
56
|
+
result: OutcomeVerdict.Uncertain,
|
|
57
|
+
// confidence is meaningless on an abstain — zero it.
|
|
58
|
+
confidence: 0,
|
|
59
|
+
critique: `${verdict.critique}\n\n[VERIFY downgrade] ${reason}`,
|
|
60
|
+
blockedBy,
|
|
61
|
+
},
|
|
62
|
+
downgraded: true,
|
|
63
|
+
reason,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Verify ONE decided verdict against its situation + the independent reviewer
|
|
69
|
+
* signal. DOWNGRADE-ONLY. PURE.
|
|
70
|
+
*
|
|
71
|
+
* @param verdict the judge's decided verdict (pass | fail | uncertain).
|
|
72
|
+
* @param situation the trace(s) the verdict was rendered over (for re-resolution).
|
|
73
|
+
* @param signal the independent reviewer's entailment judgement.
|
|
74
|
+
*/
|
|
75
|
+
export function verifyVerdict(
|
|
76
|
+
verdict: CriterionVerdict,
|
|
77
|
+
situation: EvalTrace[],
|
|
78
|
+
signal: VerifierSignal,
|
|
79
|
+
): VerifyResult {
|
|
80
|
+
// `uncertain` is the lattice floor — nothing to downgrade.
|
|
81
|
+
if (verdict.result === OutcomeVerdict.Uncertain) {
|
|
82
|
+
return { verdict, downgraded: false, reason: "already uncertain (lattice floor) — unchanged." };
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// (a) re-resolve cited refs — a dead ref means the evidence no longer supports
|
|
86
|
+
// the claim ⇒ downgrade to uncertain(factual-intent).
|
|
87
|
+
const refs = verdict.refs ?? [];
|
|
88
|
+
if (refs.length > 0 && situation.length > 0) {
|
|
89
|
+
const anyResolves = refs.some((r) => resolveRef(r, situation).resolved);
|
|
90
|
+
if (!anyResolves) {
|
|
91
|
+
return downgrade(
|
|
92
|
+
verdict,
|
|
93
|
+
{
|
|
94
|
+
kind: AssumptionKind.FactualIntent,
|
|
95
|
+
text: "cited evidence no longer re-resolves against the situation (dead ref).",
|
|
96
|
+
},
|
|
97
|
+
"VERIFY: none of the verdict's cited refs re-resolve — evidence does not support the claim.",
|
|
98
|
+
);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// (b) entailment — the master switch. claim true ≠ verdict true.
|
|
103
|
+
if (!signal.entails) {
|
|
104
|
+
return downgrade(
|
|
105
|
+
verdict,
|
|
106
|
+
{
|
|
107
|
+
kind: signal.leapKind ?? AssumptionKind.Normative,
|
|
108
|
+
text: signal.leap ?? "claim does not entail the verdict (residual ungrounded premise).",
|
|
109
|
+
},
|
|
110
|
+
`VERIFY (${signal.reviewerId ?? "reviewer"}): inferential leap — the claim does not ` +
|
|
111
|
+
"entail the verdict; downgrading to indeterminate (not flipping).",
|
|
112
|
+
);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// entails ∧ refs resolve → grounded; verdict stands (verifier never promotes).
|
|
116
|
+
return { verdict, downgraded: false, reason: "VERIFY: claim entails verdict ∧ refs resolve — grounded." };
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/** Batch verify — keyed by criterionId; verdicts with no signal default to
|
|
120
|
+
* `entails: true` (no reviewer objection ⇒ stands). DOWNGRADE-ONLY. PURE. */
|
|
121
|
+
export function verifyVerdicts(
|
|
122
|
+
verdicts: CriterionVerdict[],
|
|
123
|
+
situation: EvalTrace[],
|
|
124
|
+
signals: Record<string, VerifierSignal>,
|
|
125
|
+
): VerifyResult[] {
|
|
126
|
+
return verdicts.map((v) =>
|
|
127
|
+
verifyVerdict(v, situation, signals[v.criterionId] ?? { entails: true }),
|
|
128
|
+
);
|
|
129
|
+
}
|