@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,1270 @@
|
|
|
1
|
+
# subjects/mutagent-diagnostics/eval-matrix.yaml
|
|
2
|
+
# ============================================================================
|
|
3
|
+
# The FIRST generated subject profile (Mode B output) — data, NOT code in the
|
|
4
|
+
# agent. 137 criteria across 71 components, conforming to
|
|
5
|
+
# schemas/eval-matrix.schema.yaml. Ordered skill -> agents -> commands ->
|
|
6
|
+
# scripts -> gates. The agent ships ZERO subject-specific logic; this is the data.
|
|
7
|
+
#
|
|
8
|
+
# NDA: synthetic subject identifiers only — no production dataset is named.
|
|
9
|
+
# generatedAt is a fixed sentinel (masked for byte-identity).
|
|
10
|
+
# ============================================================================
|
|
11
|
+
subject: mutagent-diagnostics
|
|
12
|
+
version: v1
|
|
13
|
+
generatedAt: '1970-01-01T00:00:00.000Z'
|
|
14
|
+
designPrinciples:
|
|
15
|
+
- 'Determinism-before-judgment: prefer deterministic-script / typebox-schema / gate checks; reserve llm-judge and trajectory-diff only for criteria that genuinely need runtime-behavior or semantic judgment (sequence order, scope-grounding, model-pin verification). The vast majority of rows are mechanically checkable.'
|
|
16
|
+
- 'Severity by variance-impact, not code size (manual §3.3): CRIT = flips a headline/primary signal, crashes render, blocks the deliverable, or is a dominant inter-run variance driver (model/temperature pin, configRoot, runId, latency short-circuit, OOM ingest). HIGH = materially changes sample composition/finding count/coverage honesty. MED/LOW = interpretation/capability/escalation gaps.'
|
|
17
|
+
- 'Recurring dogfood deviations are the proven checklist rows: any deviation marked recurring:true is treated as a load-bearing, must-have criterion (graded at its observed severity) rather than a nice-to-have; one-off deviations are still included but weighted lower.'
|
|
18
|
+
- 'Three-dimension MECE coverage per component: every component is graded on operation-correctness (sequence right + op did its job), data-correctness (input AND output contracts), and operational-deviation (expected-vs-observed trajectory). A dimension is omitted for a component only when it has no checkable surface there, never to pad.'
|
|
19
|
+
- 'Full-dereference-surface gate principle (C-GATE): a validation gate must cover the ENTIRE contract its downstream consumer dereferences and fail-loud ONCE listing all gaps — partial gates (presence-only while the consumer reads sub-fields) are themselves graded as defects (completeness-check, findings-contract, deep-read-gate attestation).'
|
|
20
|
+
- 'Pin-and-record every stochastic/environmental variable (C-PIN), honoring model-intent-sacred: model ID + temperature=0, seed, runId-namespace, configRoot, injected --generated-at are pinned AND written into runMeta.decisions so the Methodology tab is the audit surface. No silent model swaps; fallbacks surface as variance warnings.'
|
|
21
|
+
- 'Byte-identity masking contract as the determinism acceptance test: the run-pair scorecard diffs each artifact across two back-to-back runs (then a second machine) AFTER masking the declared injected-timestamp + runId fields; the variance score = count of differing scorecard dimensions, and that score (not vibes) is the pass/fail signal.'
|
|
22
|
+
- 'Expected-trajectory captured as a golden spec: the self-diagnosis-contract.yaml 10-category success_criteria is the integration-level golden the end-to-end *diagnose run is scored against; per-step trajectory sentinels (per-run stamps) verify the protocol executed in declared dependency order.'
|
|
23
|
+
- 'Scope-locus attribution for every criterion (MECE SKILL/AGENT/COMMAND): each criterion''s checkMethod follows the root-cause locus — code bugs → deterministic-script on the .ts (COMMAND); missing/ambiguous spec or unwired contract → typebox-schema/gate on the contract (SKILL); runtime improvisation → trajectory-diff/trace-cross-ref on the orchestrator behavior (AGENT). Cure-the-twin: an AGENT criterion passes only when its SKILL/COMMAND twin also holds.'
|
|
24
|
+
- 'Existing-coverage honesty: each row declares covered/partial/none against the actual test+gate inventory; ''partial'' is reserved for gates that exist but under-validate (e.g. findings-contract checks failureOrigin presence but not its sub-fields), making the partial gates the highest-leverage hardening targets.'
|
|
25
|
+
- 'Per-run scorecard rolls up per-component: a single RUN is graded by aggregating each component''s 3-dimension criteria into the fixed determinism scorecard, appended to the metalearn JOURNAL each round so variance reduction is tracked longitudinally and the operator does not re-give feedback per run.'
|
|
26
|
+
- 'No-filler rule: every criterion is grounded in a cited intended behavior or an observed deviation (evidenceSource is mandatory and traceable to the registry, the deviation catalog, the manual, or an enumerated coverage gap); criteria with FAIL-today notes are spot-verified against HEAD loci (e.g. render.ts:632, langfuse.ts:119, buildSignalCensus:223).'
|
|
27
|
+
components:
|
|
28
|
+
- componentId: orchestrator-step-0
|
|
29
|
+
componentName: Step 0 - Capability Check
|
|
30
|
+
componentType: skill-orchestrator-step
|
|
31
|
+
criteria:
|
|
32
|
+
- dimension: operation-correctness
|
|
33
|
+
statement: Boot probe verifies Agent + AskUserQuestion capability before any dispatch; on unsupported runtime it HALTs with actionable guidance rather than failing mid-pipeline.
|
|
34
|
+
checkMethod: deterministic-script
|
|
35
|
+
passCondition: Probe returns a capability verdict; missing capability → halt+guidance, never silent proceed to Step 6 dispatch.
|
|
36
|
+
severity: MED
|
|
37
|
+
existingCoverage: none
|
|
38
|
+
evidenceSource: intendedBehavior Step 0 (P3 DEFERRED, currently assumes available)
|
|
39
|
+
- componentId: orchestrator-step-1
|
|
40
|
+
componentName: Step 1 - Config Detection
|
|
41
|
+
componentType: skill-orchestrator-step
|
|
42
|
+
criteria:
|
|
43
|
+
- dimension: operation-correctness
|
|
44
|
+
statement: 'detect.ts routes correctly on agentsBoundary state: missing→install, pending-restart→restart, invalid→reinstall, ready→proceed; partial/missing config routes to onboarding.'
|
|
45
|
+
checkMethod: deterministic-script
|
|
46
|
+
passCondition: For each SetupState input, the emitted route matches the declared mapping (unit matrix over the 4 boundary states × 3 config states).
|
|
47
|
+
severity: MED
|
|
48
|
+
existingCoverage: covered
|
|
49
|
+
evidenceSource: intendedBehavior; existing CLI routing unit tests (init-scope, install-agents)
|
|
50
|
+
- dimension: data-correctness
|
|
51
|
+
statement: SetupState output validates against schema (state∈{complete,partial,missing}, agentsBoundary∈{ready,missing,pending-restart,invalid}); config.yaml validated against TypeBox ConfigSchema before proceed.
|
|
52
|
+
checkMethod: typebox-schema
|
|
53
|
+
passCondition: config validate.ts exit 0 against schema.ts; SetupState enum-conformant.
|
|
54
|
+
severity: MED
|
|
55
|
+
existingCoverage: covered
|
|
56
|
+
evidenceSource: script-config-validate; schema.ts single source of truth PR-009
|
|
57
|
+
- componentId: orchestrator-step-2
|
|
58
|
+
componentName: Step 2 - Score-Scale Auto-Discovery
|
|
59
|
+
componentType: skill-orchestrator-step
|
|
60
|
+
criteria:
|
|
61
|
+
- dimension: data-correctness
|
|
62
|
+
statement: Scale classification (boolean/discrete-1-5/discrete-1-10/continuous-0-1/categorical) and negative-threshold mapping match the source platform's actual scale; categorical scales prompt operator rather than auto-guessing.
|
|
63
|
+
checkMethod: deterministic-script
|
|
64
|
+
passCondition: ScaleType + threshold derived from {source-cli} scores output; categorical→AskUserQuestion path taken; cached value matches platform.
|
|
65
|
+
severity: MED
|
|
66
|
+
existingCoverage: none
|
|
67
|
+
evidenceSource: intendedBehavior Step 2 auto-discovery; downstream score-filter correctness depends on it
|
|
68
|
+
- dimension: operational-deviation
|
|
69
|
+
statement: Weekly cache is keyed by platform and not staler than its TTL; a stale or cross-platform cache entry is not silently reused.
|
|
70
|
+
checkMethod: deterministic-script
|
|
71
|
+
passCondition: cache/scale-{platform}.json carries a timestamp; reuse only within TTL; cross-platform key never read.
|
|
72
|
+
severity: LOW
|
|
73
|
+
existingCoverage: none
|
|
74
|
+
evidenceSource: intendedBehavior cache weekly
|
|
75
|
+
- componentId: orchestrator-step-3
|
|
76
|
+
componentName: Step 3 - NL to TraceFilter Translation
|
|
77
|
+
componentType: skill-orchestrator-step
|
|
78
|
+
criteria:
|
|
79
|
+
- dimension: operation-correctness
|
|
80
|
+
statement: When the brief forks into 3+ interpretations, a batched multi-Q AskUserQuestion with concrete previews fires (no inline prose ask, no silent single-interpretation pick).
|
|
81
|
+
checkMethod: trajectory-diff
|
|
82
|
+
passCondition: Transcript shows AskUserQuestion with ≥3 options each carrying a preview when fork detected; absent when unambiguous.
|
|
83
|
+
severity: MED
|
|
84
|
+
existingCoverage: none
|
|
85
|
+
evidenceSource: feedback_ask_user_question_with_previews; intendedBehavior multi-Q batched
|
|
86
|
+
- dimension: data-correctness
|
|
87
|
+
statement: Emitted TraceFilter fields and the platform CLI invocation flags are consistent with the resolved scale (e.g. scoreBelow uses the Step 2 midpoint) and the per-platform filter-search-matrix.
|
|
88
|
+
checkMethod: deterministic-script
|
|
89
|
+
passCondition: TraceFilter validates against schema; CLI flag string matches filter-search-matrix.md for the platform; scoreBelow threshold == Step 2 midpoint.
|
|
90
|
+
severity: MED
|
|
91
|
+
existingCoverage: none
|
|
92
|
+
evidenceSource: intendedBehavior; filter-search-matrix per-platform flags
|
|
93
|
+
- componentId: orchestrator-step-3a
|
|
94
|
+
componentName: Step 3a - Parse Brief + Scope Resolution
|
|
95
|
+
componentType: skill-orchestrator-step
|
|
96
|
+
criteria:
|
|
97
|
+
- dimension: operation-correctness
|
|
98
|
+
statement: parse-brief.ts never throws and never drops the brief; on scopeType null it triggers the scope picker (AskUserQuestion) rather than guessing skill-vs-agent scope.
|
|
99
|
+
checkMethod: deterministic-script
|
|
100
|
+
passCondition: Parser returns ParsedBrief for all inputs incl. adversarial; scopeType null → picker fires; covered by parse-brief.test.ts.
|
|
101
|
+
severity: MED
|
|
102
|
+
existingCoverage: covered
|
|
103
|
+
evidenceSource: intendedBehavior never-throws; existing parse-brief unit tests
|
|
104
|
+
- dimension: data-correctness
|
|
105
|
+
statement: Verbatim operator brief is stored byte-for-byte in runMeta.operatorInvocation (D2), and entity identity resolves through config.agents[] cross-platform identity map (not re-derived ad hoc).
|
|
106
|
+
checkMethod: deterministic-script
|
|
107
|
+
passCondition: runMeta.operatorInvocation === input brief string exactly; resolved entity matches a config.agents[] identity pointer.
|
|
108
|
+
severity: MED
|
|
109
|
+
existingCoverage: partial
|
|
110
|
+
evidenceSource: intendedBehavior D2/W11-07; library/store records operatorInvocation verbatim
|
|
111
|
+
- componentId: orchestrator-step-3.5
|
|
112
|
+
componentName: Step 3.5 - Awareness Layer
|
|
113
|
+
componentType: skill-orchestrator-step
|
|
114
|
+
criteria:
|
|
115
|
+
- dimension: operation-correctness
|
|
116
|
+
statement: On a fresh run (no confirmed library priors), the 5-trace LLM mini-sample + blind-spots scan actually executes BEFORE Step 4 signal pick; it is skipped ONLY when a confirmed library match exists.
|
|
117
|
+
checkMethod: gate
|
|
118
|
+
passCondition: 'awareness-witness stamp: isFreshRun=true + awarenessRan=false + no exemptionReason → HARD-FAIL (wave6-checklist W11-05).'
|
|
119
|
+
severity: HIGH
|
|
120
|
+
existingCoverage: covered
|
|
121
|
+
evidenceSource: intendedBehavior R2.2; wave6-checklist W11-05 gate already enforces this
|
|
122
|
+
- dimension: data-correctness
|
|
123
|
+
statement: runMeta.awarenessSample is threaded from llm-sample.ts discoveredSignals output (script is source of truth); the orchestrator does NOT hand-author/override discoveredSignals by eyeballing traces.
|
|
124
|
+
checkMethod: trace-cross-ref
|
|
125
|
+
passCondition: runMeta.awarenessSample.signals == llm-sample.ts stamped output; no orchestrator-invented signals not present in the script artifact.
|
|
126
|
+
severity: MED
|
|
127
|
+
existingCoverage: none
|
|
128
|
+
evidenceSource: AGT-08 orchestrator hand-read 5 traces again and invented discoveredSignals; script output not used
|
|
129
|
+
- dimension: data-correctness
|
|
130
|
+
statement: BlindSpots table rows are well-formed {signal, measurable, checkedBy, result} and distinguish Tier-0-measurable signals from genuine blind-spots.
|
|
131
|
+
checkMethod: typebox-schema
|
|
132
|
+
passCondition: blindSpots.rows validate against BlindSpotRow shape; every awareness-discovered signal appears as a row.
|
|
133
|
+
severity: LOW
|
|
134
|
+
existingCoverage: partial
|
|
135
|
+
evidenceSource: intendedBehavior R2.2; wave6-checklist blind-spots stamp presence
|
|
136
|
+
- componentId: orchestrator-step-3.7
|
|
137
|
+
componentName: Step 3.7 - Normalize
|
|
138
|
+
componentType: skill-orchestrator-step
|
|
139
|
+
criteria:
|
|
140
|
+
- dimension: operation-correctness
|
|
141
|
+
statement: Normalization uses the mandated per-platform normalizer via INTERNAL CLI transport and never falls back to inline jq/sed/awk hand-rolling (R-SELF-03-c) except via a documented TODO exemption.
|
|
142
|
+
checkMethod: trajectory-diff
|
|
143
|
+
passCondition: Transcript shows scripts/normalize/platforms/{platform}.ts invoked; zero inline jq/sed/awk in the normalize step absent a logged exemption.
|
|
144
|
+
severity: CRIT
|
|
145
|
+
existingCoverage: none
|
|
146
|
+
evidenceSource: 'RC-INGEST/CMD-01: OOM forced orchestrator to hand-roll jq; CMD-09/AGT-07 hand-wrote skeleton.jq'
|
|
147
|
+
- dimension: operation-correctness
|
|
148
|
+
statement: Ingest streams large NDJSON-gz files (>500MB / multi-GB) without OOM; no unconditional readFileSync + JSON.parse on the full export.
|
|
149
|
+
checkMethod: deterministic-script
|
|
150
|
+
passCondition: Normalizer processes a synthetic >2GB fixture without OOM (streaming path exercised); readFileSync-of-whole-file absent.
|
|
151
|
+
severity: CRIT
|
|
152
|
+
existingCoverage: none
|
|
153
|
+
evidenceSource: 'RC-INGEST: readFileSync+JSON.parse OOMed on 2.84GB source (master-audit L72-73, recurring)'
|
|
154
|
+
- dimension: data-correctness
|
|
155
|
+
statement: langfuse latency heuristic performs the span check BEFORE short-circuiting on latencyRaw>=60, so a 54s run is recorded as 54000ms (not mistaken for 54ms→10s p50 flip).
|
|
156
|
+
checkMethod: deterministic-script
|
|
157
|
+
passCondition: 'Unit case: latencyRaw=54 with span>1000ms → 54000ms; p50 magnitude stable. (langfuse.ts:119 currently short-circuits before span guard at :132 → FAIL.)'
|
|
158
|
+
severity: CRIT
|
|
159
|
+
existingCoverage: none
|
|
160
|
+
evidenceSource: 'CMD-02/SKL-02: verified langfuse.ts:119 short-circuit before span guard, 10s↔54s headline flip (recurring, dominant variance)'
|
|
161
|
+
- dimension: data-correctness
|
|
162
|
+
statement: config.source.latency_unit ('auto'|'ms'|'s') is actually read by the normalizer and threaded into the latency computation + logged to runMeta.decisions (declared-and-wired, not declared-only).
|
|
163
|
+
checkMethod: deterministic-script
|
|
164
|
+
passCondition: Setting latency_unit='s' changes normalizer output; runMeta.decisions records the resolved unit. (langfuse.ts:110-112 doc-promises but body ignores → FAIL.)
|
|
165
|
+
severity: CRIT
|
|
166
|
+
existingCoverage: none
|
|
167
|
+
evidenceSource: 'SKL-02: verified langfuse.ts:110-112 field declared but never read; correction lever non-functional (recurring)'
|
|
168
|
+
- dimension: operational-deviation
|
|
169
|
+
statement: id-less source records (claude-code/codex/local-jsonl) mint a deterministic content-hash traceId stable across runs — not 'cc-${Date.now()}' / 'codex-${Date.now()}'.
|
|
170
|
+
checkMethod: deterministic-script
|
|
171
|
+
passCondition: Two runs on byte-identical id-less source produce identical traceIds (MD5 match); no Date.now() in id minting.
|
|
172
|
+
severity: HIGH
|
|
173
|
+
existingCoverage: none
|
|
174
|
+
evidenceSource: 'SKL-09: all normalizers mint id-less IDs from Date.now() → different dedup/sample composition per run (recurring)'
|
|
175
|
+
- dimension: data-correctness
|
|
176
|
+
statement: 'EntityContext extraction is complete and labeled: inputSample.text unwraps the JSON envelope to human prose; systemPrompt is explicitly labeled ''absent'' when missing (not silently omitted); newest-trace used for entity context.'
|
|
177
|
+
checkMethod: deterministic-script
|
|
178
|
+
passCondition: entity-context.json inputSample is prose not literal '{"prompt":...}'; systemPrompt key present with absent-label when no system prompt in export.
|
|
179
|
+
severity: HIGH
|
|
180
|
+
existingCoverage: none
|
|
181
|
+
evidenceSource: 'ISSUE 2/DC-2: inputSample shows raw escaped JSON; systemPrompt undefined-not-labeled (recurring)'
|
|
182
|
+
- dimension: data-correctness
|
|
183
|
+
statement: toolInventory excludes framework noise (agent.step.*, SDK root spans, aliased duplicates) and computes callsPerTrace over POPULATION with an explicit scope label (not sample-scoped inflated figures).
|
|
184
|
+
checkMethod: deterministic-script
|
|
185
|
+
passCondition: toolInventory rows exclude agent.step.*/SDK/duplicates; callsPerTrace denominator == population N and carries a scope label.
|
|
186
|
+
severity: HIGH
|
|
187
|
+
existingCoverage: none
|
|
188
|
+
evidenceSource: 'ISSUE 5/6: 56 raw observation names incl 11 agent.step + 3 SDK + 21 dups; callsPerTrace 22.67 sample-scoped vs 0.07 population (~324× inflation, recurring)'
|
|
189
|
+
- dimension: operational-deviation
|
|
190
|
+
statement: The normalizer's EntityContext extractor has a real CLI entrypoint (import.meta.main) the orchestrator calls deterministically; it is not export-only forcing inline glue that silently drops diagnosedEntity.
|
|
191
|
+
checkMethod: deterministic-script
|
|
192
|
+
passCondition: langfuse.ts entity extractor invocable via CLI flags (--out-entity); orchestrator never hand-wires EntityContext inline.
|
|
193
|
+
severity: MED
|
|
194
|
+
existingCoverage: none
|
|
195
|
+
evidenceSource: 'OP-8/master-audit L05: extractLangfuseEntityContext exported but no import.meta.main; diagnosedEntity silently drops (recurring)'
|
|
196
|
+
- componentId: orchestrator-step-4
|
|
197
|
+
componentName: Step 4 - Tier 0 Static Scan
|
|
198
|
+
componentType: skill-orchestrator-step
|
|
199
|
+
criteria:
|
|
200
|
+
- dimension: operation-correctness
|
|
201
|
+
statement: tier0-scan.ts runs deterministically on normalized traces BEFORE any LLM dispatch (PR-001), producing Tier0Report with no network/clock dependence.
|
|
202
|
+
checkMethod: deterministic-script
|
|
203
|
+
passCondition: Two runs on identical traces-metadata.json produce byte-identical Tier0Report; scan precedes Step 6 in the trajectory.
|
|
204
|
+
severity: HIGH
|
|
205
|
+
existingCoverage: covered
|
|
206
|
+
evidenceSource: intendedBehavior PR-001; existing tier0-scan unit tests
|
|
207
|
+
- dimension: data-correctness
|
|
208
|
+
statement: Tier-0 emits ONLY mechanically-legitimate signals (loops, latency, cost) or deep-read-evidenced signals; platform-metadata artifacts (e.g. low-tagging-rate when tags=[]) are NOT promoted as failure signals.
|
|
209
|
+
checkMethod: deterministic-script
|
|
210
|
+
passCondition: For a fixture with empty tags, LF-002 low-tagging-rate is NOT emitted as a failure signal into the census candidate set.
|
|
211
|
+
severity: HIGH
|
|
212
|
+
existingCoverage: partial
|
|
213
|
+
evidenceSource: 'RC-SIGNAL/ISSUE 1: LF-002 low-tagging-rate fires 100% on tags=[], promoted into census (feedback_signal_discipline_evidence_first, recurring)'
|
|
214
|
+
- componentId: orchestrator-step-4.5
|
|
215
|
+
componentName: Step 4.5 - Library-First Match
|
|
216
|
+
componentType: skill-orchestrator-step
|
|
217
|
+
criteria:
|
|
218
|
+
- dimension: operation-correctness
|
|
219
|
+
statement: Double-zero anti-laziness gate HARD-REFUSES when priors===0 AND llmReads===0; empty library alone is valid (proceed fresh + log to runMeta.decisions).
|
|
220
|
+
checkMethod: gate
|
|
221
|
+
passCondition: match.ts returns refuse when both zero; empty-library-with-reads proceeds; decision logged.
|
|
222
|
+
severity: HIGH
|
|
223
|
+
existingCoverage: covered
|
|
224
|
+
evidenceSource: intendedBehavior R2.3/W9-02; existing library unit tests + deep-read-gate
|
|
225
|
+
- dimension: data-correctness
|
|
226
|
+
statement: Library matches are merged into the Tier-0 report at the declared 3× weight; the exemption-to-skip-awareness is recorded only when a prior is actually confirmed.
|
|
227
|
+
checkMethod: deterministic-script
|
|
228
|
+
passCondition: libraryMatches weighting == 3×; awareness-skip exemptionReason present iff a confirmed prior exists.
|
|
229
|
+
severity: MED
|
|
230
|
+
existingCoverage: partial
|
|
231
|
+
evidenceSource: intendedBehavior R2.3 3× weight; wave6 library-match stamp
|
|
232
|
+
- componentId: orchestrator-step-5
|
|
233
|
+
componentName: Step 5 - Dynamic-Cluster Slicing
|
|
234
|
+
componentType: skill-orchestrator-step
|
|
235
|
+
criteria:
|
|
236
|
+
- dimension: operation-correctness
|
|
237
|
+
statement: Slicer caps at ≤5 slices and groups by error/feedback/latency cluster when a Tier-0 signal is present, falling back to window-based only when no signal; cap_enforced is honest.
|
|
238
|
+
checkMethod: deterministic-script
|
|
239
|
+
passCondition: SlicePlan.slices.length≤5; rationale is cluster-based when signal present, 'Window-based' only when absent; cap_enforced flag matches.
|
|
240
|
+
severity: MED
|
|
241
|
+
existingCoverage: partial
|
|
242
|
+
evidenceSource: intendedBehavior PR-017; slicer is pure Type A (deterministic)
|
|
243
|
+
- dimension: data-correctness
|
|
244
|
+
statement: 'Slice plan is deterministic: identical Tier0Report + traces-metadata produce byte-identical SlicePlan (stable trace assignment, no clock/random).'
|
|
245
|
+
checkMethod: deterministic-script
|
|
246
|
+
passCondition: Two runs → identical SlicePlan JSON after masking; traceIds partitioned without overlap.
|
|
247
|
+
severity: MED
|
|
248
|
+
existingCoverage: none
|
|
249
|
+
evidenceSource: scorecard sample-composition dimension; determinism design principle
|
|
250
|
+
- componentId: orchestrator-step-5b
|
|
251
|
+
componentName: Step 5b - Slicer-Override Decision
|
|
252
|
+
componentType: skill-orchestrator-step
|
|
253
|
+
criteria:
|
|
254
|
+
- dimension: operation-correctness
|
|
255
|
+
statement: 'Override predicate is exact: switch to representative 4-bucket sample iff rationale starts ''Window-based'' AND parsedInvocation.focus non-null; keep window plan when focus null.'
|
|
256
|
+
checkMethod: deterministic-script
|
|
257
|
+
passCondition: Truth-table over (rationale prefix × focus null/non-null) matches declared switch; no over/under-firing.
|
|
258
|
+
severity: MED
|
|
259
|
+
existingCoverage: none
|
|
260
|
+
evidenceSource: intendedBehavior PRD-MP-02
|
|
261
|
+
- dimension: operational-deviation
|
|
262
|
+
statement: Every override (and every keep) is recorded in runMeta.samplingOverride with a reason — a real decision, not a silent strategy swap.
|
|
263
|
+
checkMethod: deterministic-script
|
|
264
|
+
passCondition: runMeta.samplingOverride present with {fired, reason} whenever Step 5b runs.
|
|
265
|
+
severity: MED
|
|
266
|
+
existingCoverage: none
|
|
267
|
+
evidenceSource: 'Gaps: ''No validation that samplingStrategy matches the strategy executed''; PR-043 decision-logging'
|
|
268
|
+
- componentId: orchestrator-step-5.5
|
|
269
|
+
componentName: Step 5.5 - Caps
|
|
270
|
+
componentType: skill-orchestrator-step
|
|
271
|
+
criteria:
|
|
272
|
+
- dimension: operation-correctness
|
|
273
|
+
statement: enforceCaps evaluates first-to-trip with max-trace(50)+time(600s) ACTIVE and cost(10) INACTIVE by default (D1); inactive caps are skipped, not silently enforced.
|
|
274
|
+
checkMethod: deterministic-script
|
|
275
|
+
passCondition: CapsResult.firstToTrip correct across boundary inputs; inactive cost cap never trips when active=false.
|
|
276
|
+
severity: MED
|
|
277
|
+
existingCoverage: covered
|
|
278
|
+
evidenceSource: intendedBehavior Wave-6 D1; caps.ts with injected clock + unit tests
|
|
279
|
+
- dimension: operational-deviation
|
|
280
|
+
statement: The caps clock is injected (not wall-clock), so cap evaluation is reproducible; the resolved caps config and firstToTrip are recorded.
|
|
281
|
+
checkMethod: deterministic-script
|
|
282
|
+
passCondition: Two runs with identical injected clock → identical CapsResult; resolved caps in runMeta.
|
|
283
|
+
severity: MED
|
|
284
|
+
existingCoverage: covered
|
|
285
|
+
evidenceSource: intendedBehavior 'Clock injected'; determinism principle
|
|
286
|
+
- componentId: orchestrator-step-6-pregate
|
|
287
|
+
componentName: Step 6 Pre-Gate - Deep-Read Gate
|
|
288
|
+
componentType: skill-orchestrator-step
|
|
289
|
+
criteria:
|
|
290
|
+
- dimension: operation-correctness
|
|
291
|
+
statement: Deep-read gate HARD-REFUSES llmReadCount===0 && !priorSignalsRef before any analyzer dispatch; --focus does NOT exempt; refusal routes to documented exemption or HALT+ASK (never prose bypass).
|
|
292
|
+
checkMethod: gate
|
|
293
|
+
passCondition: deep-read-gate.ts refuses on double-zero; focus-present-zero-reads still refuses; no prose-bypass path.
|
|
294
|
+
severity: CRIT
|
|
295
|
+
existingCoverage: covered
|
|
296
|
+
evidenceSource: intendedBehavior R2.1/PR-035; existing deep-read-gate logic
|
|
297
|
+
- dimension: data-correctness
|
|
298
|
+
statement: The gate counts REAL evidence (distinct traceIds across evidence files), not the self-reported --llmReadCount argument; it HARD-REFUSES on arg-vs-actual mismatch.
|
|
299
|
+
checkMethod: deterministic-script
|
|
300
|
+
passCondition: Gate derives count from evidence files; passing --llmReadCount 100 while 40 traces analyzed → refuse.
|
|
301
|
+
severity: CRIT
|
|
302
|
+
existingCoverage: none
|
|
303
|
+
evidenceSource: 'AGT-13: gate trusts orchestrator --llmReadCount arg, never counts evidence files → attestation bypass (recurring)'
|
|
304
|
+
- componentId: orchestrator-step-6-escalation
|
|
305
|
+
componentName: Step 6 - Trace-Hungry Escalation Loop
|
|
306
|
+
componentType: skill-orchestrator-step
|
|
307
|
+
criteria:
|
|
308
|
+
- dimension: operation-correctness
|
|
309
|
+
statement: Escalation tiers [100,250,500,1000] are walked with ceiling=min(population,1000); the loop stops on isSufficient OR time-budget OR ceiling, and the stopReason is recorded.
|
|
310
|
+
checkMethod: deterministic-script
|
|
311
|
+
passCondition: runMeta.deepRead carries {tierReached, llmReadCount, stopReason∈{evidence-sufficient,ceiling-reached,time-budget}, batches[]}; ceiling==min(pop,1000).
|
|
312
|
+
severity: MED
|
|
313
|
+
existingCoverage: partial
|
|
314
|
+
evidenceSource: intendedBehavior W9-09/PR-048
|
|
315
|
+
- dimension: operational-deviation
|
|
316
|
+
statement: 'Coverage justification is defensible: (totalTraces − llmReadCount) is consistent with the declared deepRead.stopReason (e.g. stopReason=evidence-sufficient is not claimed at <1% worst-bucket coverage).'
|
|
317
|
+
checkMethod: deterministic-script
|
|
318
|
+
passCondition: 'Algorithmic check: stopReason=evidence-sufficient requires coverageConfidence==''high'' per representative sampler; otherwise gate flags.'
|
|
319
|
+
severity: HIGH
|
|
320
|
+
existingCoverage: none
|
|
321
|
+
evidenceSource: 'Gaps: ''No check that totalTraces minus llmReadCount is defensible under deepRead.stopReason'''
|
|
322
|
+
- componentId: orchestrator-step-6-dispatch
|
|
323
|
+
componentName: Step 6 - Analyzer Dispatch
|
|
324
|
+
componentType: skill-orchestrator-step
|
|
325
|
+
criteria:
|
|
326
|
+
- dimension: operation-correctness
|
|
327
|
+
statement: Analyzer count is derived from a deterministic formula over (population, sliceCount, override) per criteria a-e (override→1; identical scope→1; ≤30→1; 30-50→2; >50 diverse→min(sliceCount,5)); cap ≤5 enforced.
|
|
328
|
+
checkMethod: deterministic-script
|
|
329
|
+
passCondition: recommendDispatch(population,sliceCount,estimatedSlots) yields identical (n,analyzerCount) for identical input; ≤5 always. (No locked formula in caps.ts currently → FAIL.)
|
|
330
|
+
severity: HIGH
|
|
331
|
+
existingCoverage: none
|
|
332
|
+
evidenceSource: 'SKL-05/AGT-04: no locked formula, orchestrator recalls n=140/4-analyzers from MEMORY → different (n,analyzerCount) per run (recurring)'
|
|
333
|
+
- dimension: data-correctness
|
|
334
|
+
statement: The handover_contract YAML dispatched to each analyzer embeds the FULL Finding/Remedy/Assumption JSON-Schema with types/enums + a concrete example (not field-names-only); AssumptionSchema is exported.
|
|
335
|
+
checkMethod: deterministic-script
|
|
336
|
+
passCondition: handover-contract.md contains the embedded schema + example; AssumptionSchema exported from trace.ts; analyzers produce zero-RESEND output.
|
|
337
|
+
severity: HIGH
|
|
338
|
+
existingCoverage: partial
|
|
339
|
+
evidenceSource: 'SKL-04/AGT-10: contract lists field names only, no example, AssumptionSchema unexported → 15 findings rejected (recurring)'
|
|
340
|
+
- dimension: operational-deviation
|
|
341
|
+
statement: Fallback to general-purpose agent (when diagnostics-analyzer unregistered) is surfaced as a determinism-degrading variance warning in Methodology, pre-gated by verify-agents.ts HALT+ASK — not a silent model swap.
|
|
342
|
+
checkMethod: gate
|
|
343
|
+
passCondition: verify-agents.ts run before dispatch; fallback_used=true raises a visible warning banner; runMeta records the model swap.
|
|
344
|
+
severity: HIGH
|
|
345
|
+
existingCoverage: partial
|
|
346
|
+
evidenceSource: 'AGT-14: silent swap to general-purpose (different model), fallback_used logged but not surfaced (recurring); feedback_model_intent_sacred'
|
|
347
|
+
- dimension: operational-deviation
|
|
348
|
+
statement: The dispatch decision {analyzerCount, reason, slicesUsed} is recorded in runMeta as a genuine CHOICE between alternatives.
|
|
349
|
+
checkMethod: deterministic-script
|
|
350
|
+
passCondition: runMeta.dispatch present with analyzerCount + reason naming the criterion that fired.
|
|
351
|
+
severity: MED
|
|
352
|
+
existingCoverage: none
|
|
353
|
+
evidenceSource: 'Gaps: ''No automatic check that Decisions section lists CHOICES made'' (Step 6 fan-out choice)'
|
|
354
|
+
- componentId: orchestrator-step-7
|
|
355
|
+
componentName: Step 7 - Aggregate + Deduplicate Findings
|
|
356
|
+
componentType: skill-orchestrator-step
|
|
357
|
+
criteria:
|
|
358
|
+
- dimension: operation-correctness
|
|
359
|
+
statement: Deduplication keys on (traceId, failureOrigin.what+why+where) and clusters correlated findings across analyzers via a deterministic (not LLM, not readdir-order) merge.
|
|
360
|
+
checkMethod: deterministic-script
|
|
361
|
+
passCondition: A mandated cluster-findings script produces identical dedup/cluster output across runs on identical analyzer inputs.
|
|
362
|
+
severity: HIGH
|
|
363
|
+
existingCoverage: none
|
|
364
|
+
evidenceSource: intendedBehavior dedup key; RC-CLUSTER; merge currently order-dependent
|
|
365
|
+
- dimension: operational-deviation
|
|
366
|
+
statement: The merged findings array is sorted by a stable key (severity desc, failureOrigin.what, findingId) AFTER dedup+cluster, so headline/tab order and the ★-recommended remedy are byte-identical across runs.
|
|
367
|
+
checkMethod: deterministic-script
|
|
368
|
+
passCondition: Two runs → identical finding order (stable sort); not filesystem readdir / completion-time order.
|
|
369
|
+
severity: HIGH
|
|
370
|
+
existingCoverage: none
|
|
371
|
+
evidenceSource: 'CMD-11/RC-MERGE-ORDER: no sort specified, order = analyzer completion/readdir, headline varies per run (recurring)'
|
|
372
|
+
- componentId: orchestrator-step-7.1
|
|
373
|
+
componentName: Step 7.1 - Findings-Contract Gate
|
|
374
|
+
componentType: skill-orchestrator-step
|
|
375
|
+
criteria:
|
|
376
|
+
- dimension: operation-correctness
|
|
377
|
+
statement: On contract failure the gate emits RESEND directives and redispatches the offending slice's analyzer (max 2 attempts), dropping with INCOMPLETE_FIELDS marker on exhaustion — never silently passing malformed findings.
|
|
378
|
+
checkMethod: deterministic-script
|
|
379
|
+
passCondition: findings-contract.ts exit 1 → RESEND per offending finding; 2-attempt cap honored; drop marker logged.
|
|
380
|
+
severity: HIGH
|
|
381
|
+
existingCoverage: covered
|
|
382
|
+
evidenceSource: intendedBehavior W12-07; existing findings-contract validator + RESEND test suite
|
|
383
|
+
- dimension: data-correctness
|
|
384
|
+
statement: The gate validates the FULL contract the renderer dereferences — including failureOrigin.evidence non-empty + confidence enum, and diff XOR diffStatus — not just field presence.
|
|
385
|
+
checkMethod: typebox-schema
|
|
386
|
+
passCondition: failureOrigin:{} is REJECTED (not passed); exactly-one-of diff/diffStatus enforced. (Current validator checks failureOrigin non-null only → partial.)
|
|
387
|
+
severity: CRIT
|
|
388
|
+
existingCoverage: partial
|
|
389
|
+
evidenceSource: 'CMD-06/SD-4: failureOrigin:{} passes gate then crashes renderer on .confidence deref (recurring)'
|
|
390
|
+
- componentId: orchestrator-step-8
|
|
391
|
+
componentName: Step 8 - RCA Layer
|
|
392
|
+
componentType: skill-orchestrator-step
|
|
393
|
+
criteria:
|
|
394
|
+
- dimension: data-correctness
|
|
395
|
+
statement: Each finding's WHAT/WHY/WHERE values are drawn from the closed enums; the why-chain recurses to an isOrigin:true terminal and each link is evidence-grounded (cites a sourceTraceId).
|
|
396
|
+
checkMethod: typebox-schema
|
|
397
|
+
passCondition: WHAT/WHY/WHERE ∈ declared enums; whyChain terminates isOrigin:true; every link has evidence ref.
|
|
398
|
+
severity: HIGH
|
|
399
|
+
existingCoverage: partial
|
|
400
|
+
evidenceSource: intendedBehavior PR-002/018/020; findings-contract checks presence not enum-conformance of taxonomy
|
|
401
|
+
- dimension: operational-deviation
|
|
402
|
+
statement: Remedies are ranked by cost×correctness deterministically; the ★-recommended remedy is reproducible across runs given pinned model/temperature.
|
|
403
|
+
checkMethod: deterministic-script
|
|
404
|
+
passCondition: Given identical findings + pinned model, remedy ranking + ★ selection is identical across 2 runs.
|
|
405
|
+
severity: HIGH
|
|
406
|
+
existingCoverage: none
|
|
407
|
+
evidenceSource: 'RC-LLM-PIN/AGT-12: RCA runs at default model/temp → different whyChains/remedies per run (recurring, dominant variance)'
|
|
408
|
+
- dimension: operation-correctness
|
|
409
|
+
statement: 'RCA LLM steps run at a pinned model ID + temperature=0; the resolved model and temperature are recorded in runMeta.decisions (model-intent-sacred: no silent swap).'
|
|
410
|
+
checkMethod: trace-cross-ref
|
|
411
|
+
passCondition: runMeta.decisions records resolved model ID + temperature matching the agent-frontmatter pin; no default-model usage.
|
|
412
|
+
severity: CRIT
|
|
413
|
+
existingCoverage: none
|
|
414
|
+
evidenceSource: 'AGT-12/RC-LLM-PIN: no model/temperature pin anywhere; acknowledged dominant variance source (recurring); feedback_model_intent_sacred'
|
|
415
|
+
- componentId: orchestrator-step-8.5a
|
|
416
|
+
componentName: Step 8.5a - Build EntityContext
|
|
417
|
+
componentType: skill-orchestrator-step
|
|
418
|
+
criteria:
|
|
419
|
+
- dimension: data-correctness
|
|
420
|
+
statement: diagnosedEntity is pulled from entity-context.json (Step 3.7 normalizer output) via the enricher's --entity-context flag — never hand-filled (R1.7); --entity-context takes precedence over findings.entities[0] with a warn on conflict.
|
|
421
|
+
checkMethod: deterministic-script
|
|
422
|
+
passCondition: Enricher invoked with --entity-context; diagnosedEntity == entity-context.json; conflict path logs override+warn.
|
|
423
|
+
severity: HIGH
|
|
424
|
+
existingCoverage: partial
|
|
425
|
+
evidenceSource: intendedBehavior PRD-MP-04/R1.7; OP-8 inline injection banned by R-SELF-03-c
|
|
426
|
+
- dimension: operation-correctness
|
|
427
|
+
statement: No inline bun -e injection is used to build EntityContext (R-SELF-03-c); the artifact comes from the mandated normalizer CLI.
|
|
428
|
+
checkMethod: trajectory-diff
|
|
429
|
+
passCondition: Transcript shows no inline bun -e / heredoc building entity-context; only the normalizer CLI call.
|
|
430
|
+
severity: MED
|
|
431
|
+
existingCoverage: none
|
|
432
|
+
evidenceSource: intendedBehavior R-SELF-03-c ban; feedback_skill_script_austerity
|
|
433
|
+
- componentId: orchestrator-step-8.5
|
|
434
|
+
componentName: Step 8.5 - Build Render Input
|
|
435
|
+
componentType: skill-orchestrator-step
|
|
436
|
+
criteria:
|
|
437
|
+
- dimension: data-correctness
|
|
438
|
+
statement: signalCensus ranks by impact×prevalence via the PR-049 5-step reconciled process (with a failure-validity gate dropping benign/observability artifacts) — NOT by matchCount/frequency alone; exactly ONE runMeta.primarySignal emerges with ruledOut[].
|
|
439
|
+
checkMethod: deterministic-script
|
|
440
|
+
passCondition: buildSignalCensus orders by impact×severity and filters hygiene artifacts; low-tagging-rate cannot be primary. (Line 223 currently sorts by matchCount desc → FAIL.)
|
|
441
|
+
severity: HIGH
|
|
442
|
+
existingCoverage: none
|
|
443
|
+
evidenceSource: 'ISSUE 1/DC-1: verified buildSignalCensus:223 sorts by matchCount; low-tagging-rate surfaced as PRIMARY contradicting 134-trace findings (recurring)'
|
|
444
|
+
- dimension: operation-correctness
|
|
445
|
+
statement: 'build-render-input.ts is deterministic and idempotent: no LLM, no network, no wall-clock/random except the injected --generated-at; two runs produce byte-identical RenderInput after masking generated-at.'
|
|
446
|
+
checkMethod: deterministic-script
|
|
447
|
+
passCondition: MD5 match of RenderInput across 2 runs after masking --generated-at; no Date.now()/Math.random in the enricher.
|
|
448
|
+
severity: HIGH
|
|
449
|
+
existingCoverage: partial
|
|
450
|
+
evidenceSource: intendedBehavior deterministic enricher; scorecard runMeta byte-identity dimension
|
|
451
|
+
- dimension: operation-correctness
|
|
452
|
+
statement: escapeBadge / decisionLog mapper tolerate undefined inputs (no TypeError on missing rationale/decision fields).
|
|
453
|
+
checkMethod: deterministic-script
|
|
454
|
+
passCondition: 'Unit case: decision with missing rationale → no throw; escapeBadge(undefined) safe. (escapeBadge declared (s:string), called on possibly-undefined → FAIL.)'
|
|
455
|
+
severity: CRIT
|
|
456
|
+
existingCoverage: none
|
|
457
|
+
evidenceSource: 'CMD-04/SD-3: escapeBadge crashes TypeError when decision field missing (recurring)'
|
|
458
|
+
- dimension: operational-deviation
|
|
459
|
+
statement: hourlyHeatmap carries per-signal flags so cells can be coloured by the declared primarySignal/failure-mode rate, not latency-defaulted; the aggregator computes per-signal concentration by hour.
|
|
460
|
+
checkMethod: deterministic-script
|
|
461
|
+
passCondition: RenderInput.hourlyHeatmap cells carry a per-signal field keyed to primarySignal; not avgLatency-only.
|
|
462
|
+
severity: HIGH
|
|
463
|
+
existingCoverage: none
|
|
464
|
+
evidenceSource: 'UI-2/master-audit L09: cells colour by avgLatency only, no per-signal field; can''t see primary-signal concentration (recurring)'
|
|
465
|
+
- dimension: data-correctness
|
|
466
|
+
statement: awarenessSample coverage detail uses the impact-weighted SAMPLE denominator (≈sampled candidates), not population total (e.g. not 6÷1946→0%).
|
|
467
|
+
checkMethod: deterministic-script
|
|
468
|
+
passCondition: scanFunnel.llm.detail denominator == sampled candidate set; nonzero when findings exist.
|
|
469
|
+
severity: HIGH
|
|
470
|
+
existingCoverage: none
|
|
471
|
+
evidenceSource: 'master-audit L08: detail=6÷1946≈0% shown despite 7 findings; denominator should be sampled traces not population (recurring)'
|
|
472
|
+
- dimension: operation-correctness
|
|
473
|
+
statement: selectionRules + signalSelectionTrace are actually produced and threaded into runMeta (enricher derives them); the signal-selection methodology surface renders non-empty on real runs.
|
|
474
|
+
checkMethod: deterministic-script
|
|
475
|
+
passCondition: runMeta.selectionRules + signalSelectionTrace non-empty; render of R2.4 cards is non-blank.
|
|
476
|
+
severity: MED
|
|
477
|
+
existingCoverage: none
|
|
478
|
+
evidenceSource: 'master-audit L01: fields declared but no producer; render empty on every real run (recurring)'
|
|
479
|
+
- dimension: operation-correctness
|
|
480
|
+
statement: Fail-loud fires ONCE listing ALL gaps when ≥3 of 4 render shapes are missing (not a reactive one-at-a-time patch path).
|
|
481
|
+
checkMethod: gate
|
|
482
|
+
passCondition: Starved input → single fail-loud enumerating all missing shapes; partial-shape input proceeds.
|
|
483
|
+
severity: MED
|
|
484
|
+
existingCoverage: partial
|
|
485
|
+
evidenceSource: intendedBehavior R1 §9.3 fail-loud; reactive-improvisation class
|
|
486
|
+
- componentId: orchestrator-step-8.9
|
|
487
|
+
componentName: Step 8.9 - Pre-Render Completeness Gate
|
|
488
|
+
componentType: skill-orchestrator-step
|
|
489
|
+
criteria:
|
|
490
|
+
- dimension: data-correctness
|
|
491
|
+
statement: 'Completeness gate validates the EXACT RenderInput contract the renderer dereferences: sessionId type/presence, awarenessSample.traces array-shape, finding.actionable string-type, failureOrigin.{evidence,confidence} presence — and fails-loud listing ALL gaps in one pass.'
|
|
492
|
+
checkMethod: deterministic-script
|
|
493
|
+
passCondition: Malformed input (missing sessionId, failureOrigin:{}, actionable non-string) → single failure listing all three. (Gate currently checks RunMeta+section presence only → partial.)
|
|
494
|
+
severity: CRIT
|
|
495
|
+
existingCoverage: partial
|
|
496
|
+
evidenceSource: 'CMD-05/SD-6: verified completeness-check.ts:82 validates only RunMeta+sections; render crashes 3× in data-dependent order (recurring)'
|
|
497
|
+
- dimension: operation-correctness
|
|
498
|
+
statement: On a fresh run the wave6-checklist verifies every mandatory stamp emitted (parse-brief, awareness-sample, blind-spots, library-match, caps-result, deep-read-gate, awareness-witness); client reports HARD-FAIL on missing, internal reports warn-only.
|
|
499
|
+
checkMethod: gate
|
|
500
|
+
passCondition: 'wave6-checklist.ts: client+missing-stamp → exit 1; W11-05 fresh+awarenessRan=false+no-exemption → HARD-FAIL.'
|
|
501
|
+
severity: HIGH
|
|
502
|
+
existingCoverage: covered
|
|
503
|
+
evidenceSource: intendedBehavior PRD-SO-06/W9-08; existing wave6-checklist validator
|
|
504
|
+
- dimension: operational-deviation
|
|
505
|
+
statement: 'The gate does NOT false-pass on a stale artifact from a crashed prior run: per-run sentinels (runId-namespaced), not existence-only ''test -f'' checks.'
|
|
506
|
+
checkMethod: deterministic-script
|
|
507
|
+
passCondition: A stale prior-run artifact at the expected path does NOT satisfy the gate; sentinel matches current runId.
|
|
508
|
+
severity: CRIT
|
|
509
|
+
existingCoverage: none
|
|
510
|
+
evidenceSource: 'CMD-10/RC-ARTIFACT-NS: /tmp/* not runId-namespaced, Monitor gates fire on test -f → stale file passes, prior run''s findings rendered (recurring)'
|
|
511
|
+
- componentId: orchestrator-step-8.9-js-syntax
|
|
512
|
+
componentName: Step 8.9 - Inline-JS Syntax Gate
|
|
513
|
+
componentType: skill-orchestrator-step
|
|
514
|
+
criteria:
|
|
515
|
+
- dimension: operation-correctness
|
|
516
|
+
statement: Every executable inline <script> body in the rendered HTML parses via new Function (no execution); non-executable scripts (src=, ld+json, text/plain) are skipped; gate is non-bypassable for all report types.
|
|
517
|
+
checkMethod: deterministic-script
|
|
518
|
+
passCondition: render-js-syntax.ts exit 0 on clean HTML; exit 1 with scriptIndex+snippet on any SyntaxError (e.g. literal CR in split regex).
|
|
519
|
+
severity: CRIT
|
|
520
|
+
existingCoverage: covered
|
|
521
|
+
evidenceSource: intendedBehavior PR-050/W12-02; existing render-js-syntax gate + tests; closes the recurring UI-1 CR-byte regex SyntaxError
|
|
522
|
+
- componentId: orchestrator-step-9
|
|
523
|
+
componentName: Step 9 - Render HTML Report
|
|
524
|
+
componentType: skill-orchestrator-step
|
|
525
|
+
criteria:
|
|
526
|
+
- dimension: operation-correctness
|
|
527
|
+
statement: render.ts null-guards every dereferenced RenderInput field — sessionId (no .toUpperCase() on undefined), parsed.residual, decision fields — so a missing field fails-loud at the gate rather than crashing the renderer.
|
|
528
|
+
checkMethod: deterministic-script
|
|
529
|
+
passCondition: Render of input with missing sessionId/residual does not throw TypeError; either guarded fallback or gate-rejected upstream. (render.ts:632 input.sessionId.toUpperCase() unguarded → FAIL.)
|
|
530
|
+
severity: CRIT
|
|
531
|
+
existingCoverage: none
|
|
532
|
+
evidenceSource: 'CMD-03: verified render.ts:632 sessionId.toUpperCase() unguarded crash; ISSUE 6 escapeHtml/residual crash (recurring)'
|
|
533
|
+
- dimension: data-correctness
|
|
534
|
+
statement: copy-export split regex is emitted as valid JS literal split(/\r?\n/) — the template literal contains no raw CR byte (U+000D) — so the inline copy-decisions/live-preview script executes.
|
|
535
|
+
checkMethod: deterministic-script
|
|
536
|
+
passCondition: Rendered HTML contains split(/\r?\n/) with no embedded CR; render-js-syntax gate passes the copy-export block.
|
|
537
|
+
severity: CRIT
|
|
538
|
+
existingCoverage: covered
|
|
539
|
+
evidenceSource: 'UI-1/master-audit L07: literal CR byte → split(/<CR>?\n/) SyntaxError, entire inline block dead (recurring); now caught by render-js-syntax gate'
|
|
540
|
+
- dimension: data-correctness
|
|
541
|
+
statement: Renderer uses the template-stamp pattern (data→report.html.tpl), never procedural HTML; --audience client strips internal nodes (NODE-STRIP) so META/INTERNAL content never leaks into client reports.
|
|
542
|
+
checkMethod: deterministic-script
|
|
543
|
+
passCondition: Output derives from report.html.tpl; client render contains zero [INTERNAL]/META-audience nodes.
|
|
544
|
+
severity: HIGH
|
|
545
|
+
existingCoverage: partial
|
|
546
|
+
evidenceSource: intendedBehavior PR-029 + FU-INT-1; feedback_no_private_org_in_public_docs analog
|
|
547
|
+
- dimension: data-correctness
|
|
548
|
+
statement: Remedy card renders full-width stacked layout (.remedy flex-direction:column with .remedy-body wrapper) and the canonical diff/plan fields are populated (before/after code + ActionablePlan present in the data contract).
|
|
549
|
+
checkMethod: trace-cross-ref
|
|
550
|
+
passCondition: Rendered .remedy uses flex-direction:column; remedy data includes diff + plan so canonical layout is not blank (Playwright/visual check vs canonical-remedy.png).
|
|
551
|
+
severity: HIGH
|
|
552
|
+
existingCoverage: partial
|
|
553
|
+
evidenceSource: 'ISSUE 3a/3b: .remedy default-row crushed columns; handover contract lacks diff/plan fields → canonical renders blank (recurring)'
|
|
554
|
+
- componentId: orchestrator-step-9.5
|
|
555
|
+
componentName: Step 9.5 - Auto-Open Rendered Report
|
|
556
|
+
componentType: skill-orchestrator-step
|
|
557
|
+
criteria:
|
|
558
|
+
- dimension: operation-correctness
|
|
559
|
+
statement: After render the report is auto-opened OS-appropriately (Darwin open / Linux xdg-open / Windows start; headless prints file:// only when MUTAGENT_DIAG_HEADLESS=1); operator is never asked to click a file path.
|
|
560
|
+
checkMethod: trajectory-diff
|
|
561
|
+
passCondition: Transcript shows the OS-correct open invocation (or headless URL print) immediately after Step 9; no 'open this file' instruction to operator.
|
|
562
|
+
severity: MED
|
|
563
|
+
existingCoverage: none
|
|
564
|
+
evidenceSource: intendedBehavior PR-014; feedback_diagnostics_auto_open_report
|
|
565
|
+
- componentId: orchestrator-step-10
|
|
566
|
+
componentName: Step 10 - HITL Review Gate
|
|
567
|
+
componentType: skill-orchestrator-step
|
|
568
|
+
criteria:
|
|
569
|
+
- dimension: operational-deviation
|
|
570
|
+
statement: AskUserQuestion does NOT fire at Step 10; the orchestrator emits the ready signal and waits for the operator's markdown paste as the sole approval channel.
|
|
571
|
+
checkMethod: trajectory-diff
|
|
572
|
+
passCondition: Transcript shows ready-signal then wait-for-paste; no AskUserQuestion between render and copy-back receipt.
|
|
573
|
+
severity: MED
|
|
574
|
+
existingCoverage: none
|
|
575
|
+
evidenceSource: intendedBehavior PR-014 (paste IS approval); feedback_picker_artifact_self_service
|
|
576
|
+
- componentId: orchestrator-step-11.0
|
|
577
|
+
componentName: Step 11.0 - Report-Only Short-Circuit
|
|
578
|
+
componentType: skill-orchestrator-step
|
|
579
|
+
criteria:
|
|
580
|
+
- dimension: operation-correctness
|
|
581
|
+
statement: When config.target.platform === 'report-only' the apply-confirmation gate is skipped, runMeta.applySkipped is logged, and the run HALTs after Step 10 — no apply dispatch, no source/config mutation.
|
|
582
|
+
checkMethod: deterministic-script
|
|
583
|
+
passCondition: report-only config → runMeta.applySkipped={reason} present, zero apply-worker dispatch, Methodology Decisions row surfaces it.
|
|
584
|
+
severity: HIGH
|
|
585
|
+
existingCoverage: none
|
|
586
|
+
evidenceSource: intendedBehavior PRD-SO-04; feedback_report_only
|
|
587
|
+
- componentId: orchestrator-step-11
|
|
588
|
+
componentName: Step 11 - Parse Copy-Back + Apply Gate
|
|
589
|
+
componentType: skill-orchestrator-step
|
|
590
|
+
criteria:
|
|
591
|
+
- dimension: data-correctness
|
|
592
|
+
statement: Every approved remedyId parsed from the copy-back markdown is validated to exist in the findings JSON before the apply gate; unknown remedyIds are rejected, not applied.
|
|
593
|
+
checkMethod: deterministic-script
|
|
594
|
+
passCondition: persist-selections.ts validates each remedyId against findings; unknown id → reject + surface; approved set ⊆ findings remedy ids.
|
|
595
|
+
severity: HIGH
|
|
596
|
+
existingCoverage: partial
|
|
597
|
+
evidenceSource: intendedBehavior Step 11 validation; persist-selections.ts
|
|
598
|
+
- dimension: operational-deviation
|
|
599
|
+
statement: A final destructive-action AskUserQuestion gate (Confirm / Dry-run / Cancel) fires before any BG apply dispatch; the orchestrator never self-authorizes apply from phrases like 'ship it'.
|
|
600
|
+
checkMethod: trajectory-diff
|
|
601
|
+
passCondition: Transcript shows the 3-option AskUserQuestion before Step 11 dispatch; explicit confirm required; no self-dispatch on ambiguous approval.
|
|
602
|
+
severity: CRIT
|
|
603
|
+
existingCoverage: none
|
|
604
|
+
evidenceSource: intendedBehavior destructive-action gate; feedback_mdiag_lead_never_applies
|
|
605
|
+
- componentId: orchestrator-step-11-dispatch
|
|
606
|
+
componentName: Step 11 - Apply Dispatch
|
|
607
|
+
componentType: skill-orchestrator-step
|
|
608
|
+
criteria:
|
|
609
|
+
- dimension: operation-correctness
|
|
610
|
+
statement: On confirm, diagnostics-apply-worker is dispatched with run_in_background:true + isolation:worktree and a prompt carrying approved_remedies + target_spec(from config.yaml) + diagnosed_at_hash; never run inline in the parent session.
|
|
611
|
+
checkMethod: trajectory-diff
|
|
612
|
+
passCondition: Agent() call uses subagent_type diagnostics-apply-worker, isolation worktree, BG; prompt includes diagnosed_at_hash + target_spec.
|
|
613
|
+
severity: HIGH
|
|
614
|
+
existingCoverage: none
|
|
615
|
+
evidenceSource: intendedBehavior PR-004 BG isolation; feedback_lead_never_executes
|
|
616
|
+
- componentId: orchestrator-step-12
|
|
617
|
+
componentName: Step 12 - Self-Diagnostics Check
|
|
618
|
+
componentType: skill-orchestrator-step
|
|
619
|
+
criteria:
|
|
620
|
+
- dimension: operation-correctness
|
|
621
|
+
statement: Self-diagnostics runs ONLY when config.self_diagnostics.enabled===true (clients ship false); it is on-demand maintainer-only, never auto-fired/cron-scheduled.
|
|
622
|
+
checkMethod: deterministic-script
|
|
623
|
+
passCondition: enabled=false → Step 12 skipped entirely; no cron/per-session/daily cadence wiring present.
|
|
624
|
+
severity: MED
|
|
625
|
+
existingCoverage: partial
|
|
626
|
+
evidenceSource: intendedBehavior PR-022; feedback_self_diagnostics_on_demand_only
|
|
627
|
+
- dimension: data-correctness
|
|
628
|
+
statement: Self-diag output carries [INTERNAL] banner + META audience and asserts isMetaReport ⇒ audience=internal (self-diag invariant); it never renders to a client-audience surface.
|
|
629
|
+
checkMethod: typebox-schema
|
|
630
|
+
passCondition: completeness-check asserts isMetaReport⇒audience=internal; self-diag findings tagged META; [INTERNAL] banner present.
|
|
631
|
+
severity: HIGH
|
|
632
|
+
existingCoverage: covered
|
|
633
|
+
evidenceSource: intendedBehavior PR-025; completeness-check isMetaReport invariant
|
|
634
|
+
- componentId: agent-diagnostics-analyzer
|
|
635
|
+
componentName: Diagnostics Analyzer
|
|
636
|
+
componentType: agent
|
|
637
|
+
criteria:
|
|
638
|
+
- dimension: operation-correctness
|
|
639
|
+
statement: Every dispatched analyzer terminates and emits an evidence file at .mutagent/diagnostics/{run_id}/evidence/{slice_id}.md before Step 7 aggregate runs (no orphaned/timed-out worker silently dropped).
|
|
640
|
+
checkMethod: gate
|
|
641
|
+
passCondition: For each slice_id in the dispatch plan there exists a non-empty evidence file; pre-aggregate gate fails-loud listing any missing slice_id.
|
|
642
|
+
severity: HIGH
|
|
643
|
+
existingCoverage: none
|
|
644
|
+
evidenceSource: 'Gaps: ''No deterministic validation that all N sub-agents dispatched at Step 6 actually returned before Step 7''; AGT-15 partial-emit on wall-clock cap'
|
|
645
|
+
- dimension: operation-correctness
|
|
646
|
+
statement: Analyzer runs CODE-FIRST tiered analysis (pattern→tree→structural→LLM) rather than jumping straight to LLM eyeballing; LLM-deviation tier only fires after deterministic tiers are exhausted.
|
|
647
|
+
checkMethod: trace-cross-ref
|
|
648
|
+
passCondition: Analyzer transcript shows tier0/structural artifacts consumed before any LLM read; llmReadCount in evidence matches distinct traceIds actually quoted.
|
|
649
|
+
severity: MED
|
|
650
|
+
existingCoverage: none
|
|
651
|
+
evidenceSource: intendedBehavior CODE-FIRST tiered; AGT-08 orchestrator hand-read traces instead of using script output
|
|
652
|
+
- dimension: data-correctness
|
|
653
|
+
statement: Every emitted Finding carries all required fields (findingId, actionable as string, failureOrigin with non-empty evidence + confidence∈{high,medium,low}, whyChain, sourceTraceIds, referenceIds, audience, assumptions[]); every Remedy carries applyTarget, targetClass, rationale, whyWorks, applyInstructions≥1, exactly one of diff XOR diffStatus.
|
|
654
|
+
checkMethod: typebox-schema
|
|
655
|
+
passCondition: findings-contract.ts exit 0; Finding/Remedy TypeBox validation passes including failureOrigin sub-field presence and diff XOR diffStatus.
|
|
656
|
+
severity: HIGH
|
|
657
|
+
existingCoverage: partial
|
|
658
|
+
evidenceSource: CMD-06/SD-4 validator only checks failureOrigin non-null (sub-fields unchecked); SKL-04/AGT-10 analyzers guessed types, 15 findings rejected
|
|
659
|
+
- dimension: data-correctness
|
|
660
|
+
statement: 'Analyzer output type-fidelity: actionable is a string (not coerced to boolean), assumption.status uses the declared enum (not invented ''hypothesis''); analyzer used a schema-validated output tool, not free-form guessing.'
|
|
661
|
+
checkMethod: typebox-schema
|
|
662
|
+
passCondition: All fields type-match the embedded Finding/Remedy/Assumption JSON-Schema on FIRST pass; zero RESEND directives emitted.
|
|
663
|
+
severity: HIGH
|
|
664
|
+
existingCoverage: partial
|
|
665
|
+
evidenceSource: 'SKL-04/AGT-10: AssumptionSchema unexported, analyzers guessed actionable→boolean, status→''hypothesis'', 15 findings rejected first pass'
|
|
666
|
+
- dimension: operational-deviation
|
|
667
|
+
statement: 'Findings are grounded in the briefed scope: every finding''s entity/sourceTraceIds fall within the Step 3a scope-filter entity and the slice''s assigned traceIds (no scope-drift, no findings about out-of-scope traces).'
|
|
668
|
+
checkMethod: trace-cross-ref
|
|
669
|
+
passCondition: Each finding.sourceTraceIds ⊆ slice.traceIds AND resolves to the scope-filter entity; zero findings reference traces outside the dispatched slice.
|
|
670
|
+
severity: HIGH
|
|
671
|
+
existingCoverage: none
|
|
672
|
+
evidenceSource: 'Gaps: ''No check that findings produced by an analyzer match the scope briefed at Step 0'''
|
|
673
|
+
- dimension: operational-deviation
|
|
674
|
+
statement: 'Analyzer respects its trace-budget/time cap deterministically: a partial-emit caused by cache-cold latency variance is flagged as determinism-degrading in runMeta, not silently truncated.'
|
|
675
|
+
checkMethod: trace-cross-ref
|
|
676
|
+
passCondition: runMeta records {tracesAnalyzed, capHit, partialEmit, cacheState}; partialEmit=true surfaces a variance warning rather than being dropped.
|
|
677
|
+
severity: HIGH
|
|
678
|
+
existingCoverage: none
|
|
679
|
+
evidenceSource: AGT-15 240s wall-clock cap causes partial-emit cache-cold vs cache-warm; cache state unrecorded
|
|
680
|
+
- componentId: agent-diagnostics-apply-worker
|
|
681
|
+
componentName: Diagnostics Apply Worker
|
|
682
|
+
componentType: agent
|
|
683
|
+
criteria:
|
|
684
|
+
- dimension: operation-correctness
|
|
685
|
+
statement: Apply-worker operates exclusively in an isolated worktree (.worktrees/mutagent-diagnostics-{ts}/) and never mutates the operator's checked-out branch (PR-004 branch hygiene).
|
|
686
|
+
checkMethod: deterministic-script
|
|
687
|
+
passCondition: git status on operator's checkout shows no apply-worker mutations; all diffs land on the worktree branch only.
|
|
688
|
+
severity: CRIT
|
|
689
|
+
existingCoverage: none
|
|
690
|
+
evidenceSource: intendedBehavior PR-004 branch hygiene; feedback_root_and_worktrees / feedback_protected_surfaces
|
|
691
|
+
- dimension: operation-correctness
|
|
692
|
+
statement: Before any local/remote write, apply-worker runs the stale-check (diagnosed_at_hash vs current base) and HALTs+offers re-diagnose on drift; remote writes follow read-before-write GET→dry-run→idempotent PUT.
|
|
693
|
+
checkMethod: deterministic-script
|
|
694
|
+
passCondition: stale-detector invoked with diagnosed_at_hash before first write; on mismatch apply aborts; remote path shows GET then PUT (idempotent).
|
|
695
|
+
severity: CRIT
|
|
696
|
+
existingCoverage: partial
|
|
697
|
+
evidenceSource: script-stale-detector PR-011; CMD-13 stale-check ran against HEAD not apply-time base
|
|
698
|
+
- dimension: data-correctness
|
|
699
|
+
statement: Audit artifacts are written to the {run_id}-contracted path (.mutagent/diagnostics/{run_id}/audit/{session}/) with a complete AuditRecord (audit.json + audit.md); the {run_id} contract is not dropped mid-workflow.
|
|
700
|
+
checkMethod: typebox-schema
|
|
701
|
+
passCondition: audit.json validates against AuditRecord schema and lives under the {run_id} path; audit.md present.
|
|
702
|
+
severity: HIGH
|
|
703
|
+
existingCoverage: none
|
|
704
|
+
evidenceSource: 'CMD-13: audit path contract {run_id} dropped in workflow steps'
|
|
705
|
+
- dimension: operational-deviation
|
|
706
|
+
statement: Branch names are runId-unique (not date-granular) so same-day re-runs do not collide.
|
|
707
|
+
checkMethod: deterministic-script
|
|
708
|
+
passCondition: Branch name embeds runId; two same-day runs produce distinct branch names (regex assert on {run_id} segment).
|
|
709
|
+
severity: HIGH
|
|
710
|
+
existingCoverage: none
|
|
711
|
+
evidenceSource: CMD-13 branch names date-granular (mutagent/{type}-{agent}-{date}); same-day re-runs collide
|
|
712
|
+
- dimension: operational-deviation
|
|
713
|
+
statement: Apply-worker only applies remedies explicitly approved via copy-back; it never self-dispatches or applies un-approved remedy IDs.
|
|
714
|
+
checkMethod: deterministic-script
|
|
715
|
+
passCondition: Set of applied remedyIds ⊆ persisted approved-selections JSON; zero un-approved applies.
|
|
716
|
+
severity: CRIT
|
|
717
|
+
existingCoverage: partial
|
|
718
|
+
evidenceSource: feedback_mdiag_lead_never_applies; persist-selections.ts validation; feedback_report_only
|
|
719
|
+
- componentId: star-command-diagnose
|
|
720
|
+
componentName: '*diagnose'
|
|
721
|
+
componentType: star-command
|
|
722
|
+
criteria:
|
|
723
|
+
- dimension: operational-deviation
|
|
724
|
+
statement: The full pipeline executes the protocol steps in declared dependency order (Step 0→1→...→8.9→9→9.5→10→11.0→11→12) with no out-of-order or skipped mandatory step; a synthetic end-to-end run is detectable as in-order.
|
|
725
|
+
checkMethod: trajectory-diff
|
|
726
|
+
passCondition: Step-sequence sentinels (per-run stamps) appear in the declared partial order; mandatory gates (3.7 normalize, 6-pregate, 7.1, 8.9, 8.9-js) all fired before their dependents.
|
|
727
|
+
severity: HIGH
|
|
728
|
+
existingCoverage: none
|
|
729
|
+
evidenceSource: 'Gaps: ''No deterministic check that the orchestrator-protocol Step sequence executes in declared order'''
|
|
730
|
+
- dimension: operational-deviation
|
|
731
|
+
statement: A full end-to-end run (ingest→...→render) on a synthetic fixture produces a report satisfying the self-diagnosis-contract.yaml declared success_criteria (integration-level golden).
|
|
732
|
+
checkMethod: trajectory-diff
|
|
733
|
+
passCondition: E2E harness run → report scored against the 10-category contract = all-pass for the synthetic case.
|
|
734
|
+
severity: HIGH
|
|
735
|
+
existingCoverage: none
|
|
736
|
+
evidenceSource: 'Gaps: ''No end-to-end acceptance test that a full run produces a report matching self-diagnosis-contract success_criteria'''
|
|
737
|
+
- dimension: operation-correctness
|
|
738
|
+
statement: Two back-to-back runs on byte-identical source (and a second machine) diff in ≤ the Phase-target number of scorecard dimensions after masking injected-timestamp+runId (variance score within target).
|
|
739
|
+
checkMethod: deterministic-script
|
|
740
|
+
passCondition: Variance score (count of differing scorecard dimensions) ≤ Phase target; runId/generated-at masked before diff.
|
|
741
|
+
severity: CRIT
|
|
742
|
+
existingCoverage: none
|
|
743
|
+
evidenceSource: Methodology scorecard + byte-identity masking contract; RC-LLM-PIN/RC-ENV dominant variance
|
|
744
|
+
- dimension: data-correctness
|
|
745
|
+
statement: runId is deterministic (content/config hash) OR explicitly excluded from byte-identity; all timestamps are injected (passed-in), so the byte-identity masking contract is satisfiable.
|
|
746
|
+
checkMethod: deterministic-script
|
|
747
|
+
passCondition: runId derived from content-hash (no unseeded Math.random); no wall-clock Date.now() in artifact bodies except injected --generated-at. (session.ts run-${Date.now()}-${shortHex} → FAIL.)
|
|
748
|
+
severity: CRIT
|
|
749
|
+
existingCoverage: none
|
|
750
|
+
evidenceSource: 'CMD-12/RC-ENV: runId=run-${Date.now()}-${shortHex(4)} unseeded Math.random; timestamps Date.now() (recurring)'
|
|
751
|
+
- dimension: operational-deviation
|
|
752
|
+
statement: configRoot is resolved once (walk-up to nearest .mutagent/diagnostics), passed as absolute --config-root to all scripts, and recorded in runMeta — cwd flips never change the awareness-fire-vs-skip decision across bash calls.
|
|
753
|
+
checkMethod: deterministic-script
|
|
754
|
+
passCondition: All scripts receive identical absolute --config-root; runMeta.configRoot recorded; Step 4.5 priors lookup invariant to cwd. (Defaults to process.cwd() → FAIL.)
|
|
755
|
+
severity: CRIT
|
|
756
|
+
existingCoverage: none
|
|
757
|
+
evidenceSource: 'AGT-16/RC-ENV: configRoot defaults to process.cwd(), env resets cwd between bash calls → methodology divergence (recurring)'
|
|
758
|
+
- dimension: data-correctness
|
|
759
|
+
statement: runMeta.decisions records genuine CHOICES between alternatives (each with the alternative considered + rationale), not mere observations; the Decisions tab lists the actual run choices (dispatch fan-out count, sampling strategy, override fired).
|
|
760
|
+
checkMethod: deterministic-script
|
|
761
|
+
passCondition: Each decisions[] entry has {step, choice, rationale, alternativesConsidered}; non-choice/empty-rationale entries flagged.
|
|
762
|
+
severity: MED
|
|
763
|
+
existingCoverage: none
|
|
764
|
+
evidenceSource: 'Gaps: ''No check that runMeta.decisions record DECISIONS vs observations'' + ''Decisions section lists CHOICES made'''
|
|
765
|
+
- componentId: star-command-normalize-traces
|
|
766
|
+
componentName: '*normalize-traces'
|
|
767
|
+
componentType: star-command
|
|
768
|
+
criteria:
|
|
769
|
+
- dimension: operation-correctness
|
|
770
|
+
statement: Binds to the platform-specific normalizer script and never hand-parses; produces both traces-metadata.json and entity-context.json deterministically.
|
|
771
|
+
checkMethod: trajectory-diff
|
|
772
|
+
passCondition: Invocation calls scripts/normalize/platforms/{platform}.ts; both artifacts emitted; no inline parsing.
|
|
773
|
+
severity: HIGH
|
|
774
|
+
existingCoverage: none
|
|
775
|
+
evidenceSource: intendedBehavior 'never hand-parse'; RC-INGEST hand-rolled jq fallback
|
|
776
|
+
- componentId: star-command-library-match
|
|
777
|
+
componentName: '*library-match'
|
|
778
|
+
componentType: star-command
|
|
779
|
+
criteria:
|
|
780
|
+
- dimension: operation-correctness
|
|
781
|
+
statement: Binds to scripts/library/match.ts; empty library valid; double-zero HARD-REFUSES; never fabricates priors.
|
|
782
|
+
checkMethod: deterministic-script
|
|
783
|
+
passCondition: Command output == match.ts output; double-zero refuse path honored.
|
|
784
|
+
severity: MED
|
|
785
|
+
existingCoverage: covered
|
|
786
|
+
evidenceSource: intendedBehavior R2.3/W9-02; library tests
|
|
787
|
+
- componentId: star-command-dispatch-analyzers
|
|
788
|
+
componentName: '*dispatch-analyzers'
|
|
789
|
+
componentType: star-command
|
|
790
|
+
criteria:
|
|
791
|
+
- dimension: operational-deviation
|
|
792
|
+
statement: Fans out ≤5 analyzers via filled handover_contract YAML and WAITS for all to complete before returning; the handover embeds the full schema+example (no field-names-only).
|
|
793
|
+
checkMethod: trajectory-diff
|
|
794
|
+
passCondition: ≤5 Agent() dispatches with complete handover YAML; aggregate not entered until all analyzers returned; handover contains embedded schema.
|
|
795
|
+
severity: HIGH
|
|
796
|
+
existingCoverage: none
|
|
797
|
+
evidenceSource: intendedBehavior Step 6; SKL-04 field-names-only contract; gaps 'all N sub-agents returned before Step 7'
|
|
798
|
+
- componentId: star-command-render-report
|
|
799
|
+
componentName: '*render-report'
|
|
800
|
+
componentType: star-command
|
|
801
|
+
criteria:
|
|
802
|
+
- dimension: operation-correctness
|
|
803
|
+
statement: Binds to scripts/report/render.ts to stamp the template (never hand-builds HTML); output passes render-js-syntax + completeness gates.
|
|
804
|
+
checkMethod: deterministic-script
|
|
805
|
+
passCondition: Rendered HTML derives from report.html.tpl; render-js-syntax exit 0; no procedural HTML construction in the trajectory.
|
|
806
|
+
severity: HIGH
|
|
807
|
+
existingCoverage: partial
|
|
808
|
+
evidenceSource: intendedBehavior PR-029; existing render-js-syntax gate
|
|
809
|
+
- componentId: star-command-self-diagnose
|
|
810
|
+
componentName: '*self-diagnose'
|
|
811
|
+
componentType: star-command
|
|
812
|
+
criteria:
|
|
813
|
+
- dimension: operational-deviation
|
|
814
|
+
statement: Routes the session transcript through the identical RCA engine as client diagnosis (PR-025), tags output [INTERNAL]+META, and only runs when self_diagnostics.enabled and explicitly invoked (on-demand maintainer-only).
|
|
815
|
+
checkMethod: trace-cross-ref
|
|
816
|
+
passCondition: Same analyzer/renderer entrypoints used; output [INTERNAL]-banner+META; gated on enabled flag + explicit invocation, no auto-fire.
|
|
817
|
+
severity: MED
|
|
818
|
+
existingCoverage: partial
|
|
819
|
+
evidenceSource: intendedBehavior PR-022/PR-025; feedback_self_diagnostics_on_demand_only; completeness isMetaReport invariant
|
|
820
|
+
- componentId: script-tier0-scan
|
|
821
|
+
componentName: scripts/tier0-scan.ts
|
|
822
|
+
componentType: script
|
|
823
|
+
criteria:
|
|
824
|
+
- dimension: operation-correctness
|
|
825
|
+
statement: Detects error spikes (consecutive isError), latency spikes (IQR-fence/p95), feedback clusters, token caps deterministically and emits a well-formed Tier0Report; pure, no LLM/clock/network.
|
|
826
|
+
checkMethod: deterministic-script
|
|
827
|
+
passCondition: Unit fixtures for each signal type produce the expected flags; identical input → identical Tier0Report.
|
|
828
|
+
severity: HIGH
|
|
829
|
+
existingCoverage: covered
|
|
830
|
+
evidenceSource: intendedBehavior PR-001; existing tier0-scan + tier0-scan-signals unit tests
|
|
831
|
+
- componentId: script-slicer
|
|
832
|
+
componentName: scripts/slicer.ts
|
|
833
|
+
componentType: script
|
|
834
|
+
criteria:
|
|
835
|
+
- dimension: operation-correctness
|
|
836
|
+
statement: Emits ≤5 slices with non-overlapping traceId partitions, cluster-based rationale when signal present and window fallback otherwise, deterministically.
|
|
837
|
+
checkMethod: deterministic-script
|
|
838
|
+
passCondition: slices≤5; union of traceIds == input set, pairwise disjoint; identical input → identical SlicePlan.
|
|
839
|
+
severity: MED
|
|
840
|
+
existingCoverage: partial
|
|
841
|
+
evidenceSource: intendedBehavior PR-017; pure Type A script
|
|
842
|
+
- componentId: script-stale-detector
|
|
843
|
+
componentName: scripts/stale-detector.ts
|
|
844
|
+
componentType: script
|
|
845
|
+
criteria:
|
|
846
|
+
- dimension: data-correctness
|
|
847
|
+
statement: Compares diagnosed_at_hash against the apply-time BASE (origin/main), not HEAD; emits a stale verdict with drift description on mismatch.
|
|
848
|
+
checkMethod: deterministic-script
|
|
849
|
+
passCondition: stale==true when base advanced past diagnosed_at_hash; comparison target is base not HEAD.
|
|
850
|
+
severity: HIGH
|
|
851
|
+
existingCoverage: none
|
|
852
|
+
evidenceSource: 'CMD-13/PR-011: stale-check against HEAD not base (recurring)'
|
|
853
|
+
- componentId: script-config-schema
|
|
854
|
+
componentName: scripts/config/schema.ts
|
|
855
|
+
componentType: script
|
|
856
|
+
criteria:
|
|
857
|
+
- dimension: data-correctness
|
|
858
|
+
statement: Every config field the orchestrator/normalizer reads at runtime (e.g. source.latency_unit, caps, target.platform, self_diagnostics.enabled) is declared in schema.ts AND actually wired to a consumer (no declared-but-unread fields).
|
|
859
|
+
checkMethod: deterministic-script
|
|
860
|
+
passCondition: 'Static cross-ref: each schema field has ≥1 read site; latency_unit reaches the normalizer. (latency_unit currently declared-only → FAIL.)'
|
|
861
|
+
severity: CRIT
|
|
862
|
+
existingCoverage: none
|
|
863
|
+
evidenceSource: 'SKL-02: latency_unit declared in schema but never read by normalizer (recurring); schema-contract-gap class (unwired field)'
|
|
864
|
+
- componentId: script-config-load
|
|
865
|
+
componentName: scripts/config/load.ts
|
|
866
|
+
componentType: script
|
|
867
|
+
criteria:
|
|
868
|
+
- dimension: data-correctness
|
|
869
|
+
statement: YAML parse resolves ${ENV_VAR} refs and merges .mutagentrc secrets into a typed Config; missing env refs surface a typed error rather than emitting an empty/partial config silently.
|
|
870
|
+
checkMethod: deterministic-script
|
|
871
|
+
passCondition: Unresolved ${VAR} → typed error; resolved Config matches schema; secrets never logged.
|
|
872
|
+
severity: MED
|
|
873
|
+
existingCoverage: partial
|
|
874
|
+
evidenceSource: intendedBehavior; config load/validate path
|
|
875
|
+
- componentId: script-config-validate
|
|
876
|
+
componentName: scripts/config/validate.ts
|
|
877
|
+
componentType: script
|
|
878
|
+
criteria:
|
|
879
|
+
- dimension: data-correctness
|
|
880
|
+
statement: Validates loaded config against TypeBox schema and emits structured ValidationError[] on mismatch (exit non-zero), not a boolean-only verdict.
|
|
881
|
+
checkMethod: typebox-schema
|
|
882
|
+
passCondition: Malformed config → {ok:false, errors[]} with field paths; valid config → ok:true.
|
|
883
|
+
severity: MED
|
|
884
|
+
existingCoverage: covered
|
|
885
|
+
evidenceSource: intendedBehavior; existing config validate unit coverage
|
|
886
|
+
- componentId: script-setup-detect
|
|
887
|
+
componentName: scripts/setup/detect.ts
|
|
888
|
+
componentType: script
|
|
889
|
+
criteria:
|
|
890
|
+
- dimension: operation-correctness
|
|
891
|
+
statement: Returns SetupState with correct {state, agentsBoundary, completion%} and route decision for present/partial/missing config × 4 boundary states.
|
|
892
|
+
checkMethod: deterministic-script
|
|
893
|
+
passCondition: Unit matrix over input states yields the declared SetupState + route; no crash on missing .mutagent/diagnostics dir.
|
|
894
|
+
severity: MED
|
|
895
|
+
existingCoverage: covered
|
|
896
|
+
evidenceSource: intendedBehavior Step 1; existing setup/CLI tests
|
|
897
|
+
- componentId: script-setup-ensure-cli
|
|
898
|
+
componentName: scripts/setup/ensure-cli.ts
|
|
899
|
+
componentType: script
|
|
900
|
+
criteria:
|
|
901
|
+
- dimension: operation-correctness
|
|
902
|
+
statement: planCliEnsure is pure decision logic and NEVER installs; runCliInstall installs only after explicit user approval (AskUserQuestion on Claude Code, chat fallback elsewhere).
|
|
903
|
+
checkMethod: deterministic-script
|
|
904
|
+
passCondition: planCliEnsure has zero install side-effects; runCliInstall gated on approval flag; covered by ensure-cli/ensure-source-cli tests.
|
|
905
|
+
severity: HIGH
|
|
906
|
+
existingCoverage: covered
|
|
907
|
+
evidenceSource: intendedBehavior PR-021; existing ensure-cli + ensure-source-cli tests; feedback_protected_surfaces (no auto-install)
|
|
908
|
+
- componentId: script-normalize-trace
|
|
909
|
+
componentName: scripts/normalize/trace.ts
|
|
910
|
+
componentType: script
|
|
911
|
+
criteria:
|
|
912
|
+
- dimension: data-correctness
|
|
913
|
+
statement: Canonical types are the single source of truth and ALL contract types the analyzers/enricher consume are EXPORTED (notably AssumptionSchema) so no downstream guessing.
|
|
914
|
+
checkMethod: deterministic-script
|
|
915
|
+
passCondition: AssumptionSchema + Finding/Remedy/Assumption schemas exported; static check that handover contract references the exported schema. (AssumptionSchema currently unexported → FAIL.)
|
|
916
|
+
severity: HIGH
|
|
917
|
+
existingCoverage: none
|
|
918
|
+
evidenceSource: 'SKL-04/AGT-10: AssumptionSchema defined in trace.ts but not exported → analyzers guess types (recurring)'
|
|
919
|
+
- componentId: script-normalize-platforms-langfuse
|
|
920
|
+
componentName: scripts/normalize/platforms/langfuse.ts
|
|
921
|
+
componentType: script
|
|
922
|
+
criteria:
|
|
923
|
+
- dimension: operation-correctness
|
|
924
|
+
statement: Single CLI call (--in --out-metadata --out-entity) produces both traces-metadata.json and entity-context.json via a streaming path; has import.meta.main entrypoint; no OOM on multi-GB input.
|
|
925
|
+
checkMethod: deterministic-script
|
|
926
|
+
passCondition: CLI emits both artifacts on a >2GB fixture without OOM; import.meta.main present. (Currently readFileSync+JSON.parse, export-only entity extractor → FAIL.)
|
|
927
|
+
severity: CRIT
|
|
928
|
+
existingCoverage: none
|
|
929
|
+
evidenceSource: 'RC-INGEST + OP-8: readFileSync OOM, no import.meta.main on entity extractor (both recurring)'
|
|
930
|
+
- dimension: data-correctness
|
|
931
|
+
statement: Latency normalization (span-check-before-short-circuit), entity majority-vote name, per-tool stats, and input-sample extraction are correct and deterministic.
|
|
932
|
+
checkMethod: deterministic-script
|
|
933
|
+
passCondition: 'langfuse.test.ts: 54s→54000ms case passes; entity name majority-vote stable; per-tool error-rate correct.'
|
|
934
|
+
severity: CRIT
|
|
935
|
+
existingCoverage: partial
|
|
936
|
+
evidenceSource: 'CMD-02: langfuse.ts:119 latency short-circuit before span guard (recurring); existing langfuse.test.ts present but does not cover the 54s case'
|
|
937
|
+
- componentId: script-normalize-platforms-entity-context
|
|
938
|
+
componentName: scripts/normalize/platforms/entity-context.ts
|
|
939
|
+
componentType: script
|
|
940
|
+
criteria:
|
|
941
|
+
- dimension: data-correctness
|
|
942
|
+
statement: Shared extractors compute system-prompt content-hash, per-tool call-frequency+error-rate, input-sample, majority-vote name with NO LLM, and label systemPrompt 'absent' when missing; toolInventory excludes framework-noise spans.
|
|
943
|
+
checkMethod: deterministic-script
|
|
944
|
+
passCondition: Deterministic across runs; systemPrompt absent→labeled; agent.step.*/SDK/dup spans excluded from toolInventory.
|
|
945
|
+
severity: HIGH
|
|
946
|
+
existingCoverage: none
|
|
947
|
+
evidenceSource: 'ISSUE 2/5/6: inputSample raw JSON, systemPrompt unlabeled, 56 raw spans incl agent.step+SDK+dups (recurring)'
|
|
948
|
+
- componentId: script-enrich-build-render-input
|
|
949
|
+
componentName: scripts/enrich/build-render-input.ts
|
|
950
|
+
componentType: script
|
|
951
|
+
criteria:
|
|
952
|
+
- dimension: data-correctness
|
|
953
|
+
statement: buildSignalCensus reconciles via PR-049 impact×prevalence with a failure-validity gate (drops observability-hygiene artifacts), producing exactly one runMeta.primarySignal{name,why,ruledOut[],confidence} — never frequency-ranked.
|
|
954
|
+
checkMethod: deterministic-script
|
|
955
|
+
passCondition: Census order is impact×severity; low-tagging-rate excluded; one primarySignal with ruledOut[]. (Line 223 sorts by matchCount → FAIL.)
|
|
956
|
+
severity: HIGH
|
|
957
|
+
existingCoverage: none
|
|
958
|
+
evidenceSource: 'ISSUE 1/DC-1: verified buildSignalCensus:223 matchCount sort; LF-002 surfaced primary (recurring)'
|
|
959
|
+
- dimension: operation-correctness
|
|
960
|
+
statement: 'Deterministic + idempotent: no LLM/network/Math.random/Date.now except injected --generated-at; bigStat percentiles (p50/p95/max) and 24-cell heatmap computed reproducibly.'
|
|
961
|
+
checkMethod: deterministic-script
|
|
962
|
+
passCondition: RenderInput MD5-identical across 2 runs after masking --generated-at; percentile math unit-verified.
|
|
963
|
+
severity: HIGH
|
|
964
|
+
existingCoverage: partial
|
|
965
|
+
evidenceSource: intendedBehavior deterministic enricher; scorecard byte-identity
|
|
966
|
+
- dimension: operation-correctness
|
|
967
|
+
statement: escapeBadge and all field mappers undefined-guard their inputs; fail-loud fires ONCE enumerating all missing shapes when ≥3 of 4 render shapes absent.
|
|
968
|
+
checkMethod: deterministic-script
|
|
969
|
+
passCondition: escapeBadge(undefined) safe; missing-decision-field no throw; ≥3-missing → single enumerated fail-loud.
|
|
970
|
+
severity: CRIT
|
|
971
|
+
existingCoverage: none
|
|
972
|
+
evidenceSource: 'CMD-04/SD-3: escapeBadge TypeError on missing field (recurring); R1 §9.3 fail-loud'
|
|
973
|
+
- componentId: script-report-render
|
|
974
|
+
componentName: scripts/report/render.ts
|
|
975
|
+
componentType: script
|
|
976
|
+
criteria:
|
|
977
|
+
- dimension: operation-correctness
|
|
978
|
+
statement: All RenderInput dereferences are null-guarded (sessionId, residual, decision fields, entity sub-fields); render never throws TypeError on a contract-incomplete input — it fails at the gate, not the renderer.
|
|
979
|
+
checkMethod: deterministic-script
|
|
980
|
+
passCondition: Render of inputs with each optional field missing → no uncaught TypeError. (render.ts:632 .toUpperCase() unguarded → FAIL.)
|
|
981
|
+
severity: CRIT
|
|
982
|
+
existingCoverage: none
|
|
983
|
+
evidenceSource: CMD-03 render.ts:632 + ISSUE 6 escapeHtml/residual crashes (recurring)
|
|
984
|
+
- dimension: data-correctness
|
|
985
|
+
statement: Inline JS emitted into HTML is syntactically valid (no raw CR in split regex); template-inline-js lint rejects TS patterns in executable <script> blocks; --audience client strips all internal nodes.
|
|
986
|
+
checkMethod: deterministic-script
|
|
987
|
+
passCondition: render-js-syntax + template-inline-js lint pass; client render contains no [INTERNAL] nodes; split(/\r?\n/) literal valid.
|
|
988
|
+
severity: CRIT
|
|
989
|
+
existingCoverage: covered
|
|
990
|
+
evidenceSource: UI-1 CR-byte SyntaxError (recurring); existing render-js-syntax + template-inline-js gates
|
|
991
|
+
- componentId: script-report-persist-selections
|
|
992
|
+
componentName: scripts/report/persist-selections.ts
|
|
993
|
+
componentType: script
|
|
994
|
+
criteria:
|
|
995
|
+
- dimension: data-correctness
|
|
996
|
+
statement: Parses copy-back markdown, extracts approved remedy IDs, validates each against findings, and emits selections JSON; rejects/flags any remedyId not present in findings.
|
|
997
|
+
checkMethod: deterministic-script
|
|
998
|
+
passCondition: Approved set ⊆ findings remedy ids; unknown id surfaced; selections JSON well-formed.
|
|
999
|
+
severity: HIGH
|
|
1000
|
+
existingCoverage: partial
|
|
1001
|
+
evidenceSource: intendedBehavior Step 10/11 validation
|
|
1002
|
+
- componentId: script-contract-types
|
|
1003
|
+
componentName: scripts/contract/types.ts
|
|
1004
|
+
componentType: script
|
|
1005
|
+
criteria:
|
|
1006
|
+
- dimension: data-correctness
|
|
1007
|
+
statement: SelfDiagnosisContract TypeBox schema enforces the 10-category shape and pass/fail/not-applicable/pending scoring; malformed contract fails-loud at parse.
|
|
1008
|
+
checkMethod: typebox-schema
|
|
1009
|
+
passCondition: Valid contract parses; malformed category/score → fail-loud; 10 categories enforced.
|
|
1010
|
+
severity: MED
|
|
1011
|
+
existingCoverage: covered
|
|
1012
|
+
evidenceSource: intendedBehavior Wave-4; existing self-diagnosis-contract schema
|
|
1013
|
+
- componentId: script-lint-template-inline-js
|
|
1014
|
+
componentName: scripts/lint/template-inline-js.ts
|
|
1015
|
+
componentType: script
|
|
1016
|
+
criteria:
|
|
1017
|
+
- dimension: operation-correctness
|
|
1018
|
+
statement: Walks assets/templates/*.html and rejects TypeScript patterns (string-typed templates, type annotations) inside executable <script> blocks (R-007-B), preventing TS leaking into final HTML.
|
|
1019
|
+
checkMethod: deterministic-script
|
|
1020
|
+
passCondition: Template with TS in a <script> block → lint exit 1 with file:line; clean template → exit 0.
|
|
1021
|
+
severity: MED
|
|
1022
|
+
existingCoverage: covered
|
|
1023
|
+
evidenceSource: intendedBehavior R-007-B; existing lint script
|
|
1024
|
+
- componentId: script-awareness-llm-sample
|
|
1025
|
+
componentName: scripts/awareness/llm-sample.ts
|
|
1026
|
+
componentType: script
|
|
1027
|
+
criteria:
|
|
1028
|
+
- dimension: operation-correctness
|
|
1029
|
+
statement: Trace selection for the 5-trace mini-sample is deterministic (no clock/random); discoveredSignals are emitted as the source-of-truth stamp; skips on confirmed library priors.
|
|
1030
|
+
checkMethod: deterministic-script
|
|
1031
|
+
passCondition: Identical traces → identical 5 selected; buildAwarenessSample stamp emitted; skip when prior confirmed.
|
|
1032
|
+
severity: MED
|
|
1033
|
+
existingCoverage: partial
|
|
1034
|
+
evidenceSource: intendedBehavior R2.2; existing awareness tests (selection); AGT-08 (orchestrator must consume the stamp, not re-eyeball)
|
|
1035
|
+
- componentId: script-awareness-blind-spots
|
|
1036
|
+
componentName: scripts/awareness/blind-spots.ts
|
|
1037
|
+
componentType: script
|
|
1038
|
+
criteria:
|
|
1039
|
+
- dimension: data-correctness
|
|
1040
|
+
statement: buildBlindSpots emits well-formed {signal, measurable, checkedBy, result} rows separating Tier-0-measurable from blind-spot signals; deterministic.
|
|
1041
|
+
checkMethod: typebox-schema
|
|
1042
|
+
passCondition: rows validate against BlindSpotRow; every awareness signal appears; identical input → identical rows.
|
|
1043
|
+
severity: LOW
|
|
1044
|
+
existingCoverage: covered
|
|
1045
|
+
evidenceSource: intendedBehavior R2.2; existing awareness tests
|
|
1046
|
+
- componentId: script-library-match
|
|
1047
|
+
componentName: scripts/library/match.ts
|
|
1048
|
+
componentType: script
|
|
1049
|
+
criteria:
|
|
1050
|
+
- dimension: operation-correctness
|
|
1051
|
+
statement: Returns 3×-weighted libraryMatches; empty library returns empty list (valid); double-zero (priors===0 && llmReads===0) HARD-REFUSES as anti-laziness gate.
|
|
1052
|
+
checkMethod: deterministic-script
|
|
1053
|
+
passCondition: Empty library → [] + proceed; double-zero → refuse; weighting==3×. Covered by library tests.
|
|
1054
|
+
severity: HIGH
|
|
1055
|
+
existingCoverage: covered
|
|
1056
|
+
evidenceSource: intendedBehavior R2.3/W9-02; existing library unit tests
|
|
1057
|
+
- componentId: script-library-store
|
|
1058
|
+
componentName: scripts/library/store.ts
|
|
1059
|
+
componentType: script
|
|
1060
|
+
criteria:
|
|
1061
|
+
- dimension: data-correctness
|
|
1062
|
+
statement: Writes APPROVED-ONLY findings/remedies to the per-host gitignored library and records runs[].operatorInvocation verbatim (D2); never commits the library.
|
|
1063
|
+
checkMethod: deterministic-script
|
|
1064
|
+
passCondition: Store fires only post-apply on approved set; operatorInvocation stored verbatim; library path gitignored (git check-ignore passes).
|
|
1065
|
+
severity: MED
|
|
1066
|
+
existingCoverage: partial
|
|
1067
|
+
evidenceSource: intendedBehavior R2.3/D2; library tests; feedback_skill_worktree_symlink_intentional (per-host)
|
|
1068
|
+
- componentId: script-invocation-parse-brief
|
|
1069
|
+
componentName: scripts/invocation/parse-brief.ts
|
|
1070
|
+
componentType: script
|
|
1071
|
+
criteria:
|
|
1072
|
+
- dimension: operation-correctness
|
|
1073
|
+
statement: Defensive parser never throws/drops on any input (incl. adversarial), determines scopeType + entity + focus colon-form with article-guard, and stores verbatim brief (D2).
|
|
1074
|
+
checkMethod: deterministic-script
|
|
1075
|
+
passCondition: Fuzz/adversarial inputs return a ParsedBrief; verbatim brief preserved; covered by parse-brief.test.ts.
|
|
1076
|
+
severity: MED
|
|
1077
|
+
existingCoverage: covered
|
|
1078
|
+
evidenceSource: intendedBehavior R2.6/W11-06; existing parse-brief tests
|
|
1079
|
+
- componentId: script-sample-deep-read-gate
|
|
1080
|
+
componentName: scripts/sample/deep-read-gate.ts
|
|
1081
|
+
componentType: script
|
|
1082
|
+
criteria:
|
|
1083
|
+
- dimension: data-correctness
|
|
1084
|
+
statement: Gate derives llmReadCount from REAL evidence (distinct traceIds in evidence files), HARD-REFUSING on a declared-vs-actual mismatch; --focus does not exempt double-zero.
|
|
1085
|
+
checkMethod: deterministic-script
|
|
1086
|
+
passCondition: Declared 100 but 40 evidence traces → refuse; focus+zero-reads → refuse. (Currently trusts --llmReadCount arg → FAIL.)
|
|
1087
|
+
severity: CRIT
|
|
1088
|
+
existingCoverage: partial
|
|
1089
|
+
evidenceSource: 'AGT-13: gate trusts arg, never counts evidence (recurring); existing gate covers double-zero presence but not attestation'
|
|
1090
|
+
- componentId: script-sample-representative
|
|
1091
|
+
componentName: scripts/sample/representative.ts
|
|
1092
|
+
componentType: script
|
|
1093
|
+
criteria:
|
|
1094
|
+
- dimension: data-correctness
|
|
1095
|
+
statement: Worst-bucket representation meets the floor (>10% of sample) and coverageConfidence is honest per actual bucket distribution — an imbalanced 1/1/1/137 split cannot emit 98.96% 'high' confidence.
|
|
1096
|
+
checkMethod: deterministic-script
|
|
1097
|
+
passCondition: For n=140 the worst bucket ≥10% (worst-weighted floor); coverageConfidence downgrades when worst<floor. (1/1/1/137 → 0.71% high currently → FAIL.)
|
|
1098
|
+
severity: HIGH
|
|
1099
|
+
existingCoverage: partial
|
|
1100
|
+
evidenceSource: 'CMD-07/SD-5: 1/1/1/137 sample, worst 0.71% but 98.96% high confidence (recurring)'
|
|
1101
|
+
- dimension: operation-correctness
|
|
1102
|
+
statement: 'Sampler is fully deterministic (no clock/random): identical population → byte-identical buckets + 4-dimensional coverage proof.'
|
|
1103
|
+
checkMethod: deterministic-script
|
|
1104
|
+
passCondition: Two runs → identical selected[] + coverageProof; documented in sampler header.
|
|
1105
|
+
severity: MED
|
|
1106
|
+
existingCoverage: covered
|
|
1107
|
+
evidenceSource: intendedBehavior R2.5 deterministic; sampler header attests no clock/random
|
|
1108
|
+
- componentId: script-sample-caps
|
|
1109
|
+
componentName: scripts/sample/caps.ts
|
|
1110
|
+
componentType: script
|
|
1111
|
+
criteria:
|
|
1112
|
+
- dimension: operation-correctness
|
|
1113
|
+
statement: A locked recommendDispatch(population,sliceCount,estimatedSlots)→{n,analyzerCount} formula EXISTS and is deterministic, so dispatch sizing never relies on the orchestrator recalling a prior run from memory.
|
|
1114
|
+
checkMethod: deterministic-script
|
|
1115
|
+
passCondition: recommendDispatch present and pure; identical input → identical (n,analyzerCount). (No such formula currently → FAIL.)
|
|
1116
|
+
severity: HIGH
|
|
1117
|
+
existingCoverage: none
|
|
1118
|
+
evidenceSource: 'SKL-05/AGT-04: no locked formula → memory-based n=140/4-analyzers recall (recurring); scorecard (n,analyzerCount) dimension'
|
|
1119
|
+
- dimension: operational-deviation
|
|
1120
|
+
statement: enforceCaps respects active/inactive per cap (cost INACTIVE by default) with an injected clock; CapsResult reproducible.
|
|
1121
|
+
checkMethod: deterministic-script
|
|
1122
|
+
passCondition: Inactive cost cap never trips; identical injected clock → identical CapsResult; covered by caps tests.
|
|
1123
|
+
severity: MED
|
|
1124
|
+
existingCoverage: covered
|
|
1125
|
+
evidenceSource: intendedBehavior D1; caps with injected clock
|
|
1126
|
+
- componentId: script-validate-findings-contract
|
|
1127
|
+
componentName: scripts/validate/findings-contract.ts
|
|
1128
|
+
componentType: script
|
|
1129
|
+
criteria:
|
|
1130
|
+
- dimension: data-correctness
|
|
1131
|
+
statement: 'Validates the FULL contract the renderer dereferences: failureOrigin.evidence non-empty + confidence∈{high,medium,low}, diff XOR diffStatus, all required finding/remedy fields — failureOrigin:{} is rejected.'
|
|
1132
|
+
checkMethod: typebox-schema
|
|
1133
|
+
passCondition: failureOrigin:{} → exit 1; missing-confidence → exit 1; valid set → exit 0. (Currently checks failureOrigin non-null only → partial.)
|
|
1134
|
+
severity: CRIT
|
|
1135
|
+
existingCoverage: partial
|
|
1136
|
+
evidenceSource: 'CMD-06/SD-4: validator only checks failureOrigin non-null, sub-fields crash renderer (recurring); existing validator covers presence + diff XOR'
|
|
1137
|
+
- componentId: script-validate-completeness-check
|
|
1138
|
+
componentName: scripts/validate/completeness-check.ts
|
|
1139
|
+
componentType: script
|
|
1140
|
+
criteria:
|
|
1141
|
+
- dimension: data-correctness
|
|
1142
|
+
statement: Validates the exact RenderInput dereference surface (sessionId type, awarenessSample.traces array-shape, finding.actionable string, failureOrigin sub-fields) AND asserts isMetaReport⇒audience=internal, failing-loud with ALL gaps at once.
|
|
1143
|
+
checkMethod: deterministic-script
|
|
1144
|
+
passCondition: Malformed input → single failure enumerating sessionId+actionable+failureOrigin gaps. (Currently RunMeta+section presence only → partial.)
|
|
1145
|
+
severity: CRIT
|
|
1146
|
+
existingCoverage: partial
|
|
1147
|
+
evidenceSource: 'CMD-05/SD-6: verified completeness-check.ts:82 RunMeta+section only; render crashes 3× (recurring)'
|
|
1148
|
+
- componentId: script-validate-wave6-checklist
|
|
1149
|
+
componentName: scripts/validate/wave6-checklist.ts
|
|
1150
|
+
componentType: script
|
|
1151
|
+
criteria:
|
|
1152
|
+
- dimension: operational-deviation
|
|
1153
|
+
statement: Verifies every mandatory Wave-6 stamp present + well-formed; W11-05 HARD-FAILs (regardless of report type) on fresh+awarenessRan=false+no-exemption; client reports hard-fail on any missing stamp, internal warn-only.
|
|
1154
|
+
checkMethod: gate
|
|
1155
|
+
passCondition: Missing stamp on client report → exit 1; W11-05 condition → HARD-FAIL; covered by wave6-checklist tests.
|
|
1156
|
+
severity: HIGH
|
|
1157
|
+
existingCoverage: covered
|
|
1158
|
+
evidenceSource: intendedBehavior W9-08/W11-05; existing wave6-checklist + tests
|
|
1159
|
+
- dimension: operational-deviation
|
|
1160
|
+
statement: Each stamp's declared methodology matches what the code executed (e.g. awareness-witness carries the exemptionReason that deep-read-gate set; library-match stamp reflects actual prior count).
|
|
1161
|
+
checkMethod: trace-cross-ref
|
|
1162
|
+
passCondition: Stamp fields cross-reference the producing script's output (exemptionReason origin matches deep-read-gate; isFreshRun matches library result).
|
|
1163
|
+
severity: MED
|
|
1164
|
+
existingCoverage: none
|
|
1165
|
+
evidenceSource: 'Gaps: ''No check that wave-6 stamps actually declare the methodology the code executed'''
|
|
1166
|
+
- componentId: script-validate-render-js-syntax
|
|
1167
|
+
componentName: scripts/validate/render-js-syntax.ts
|
|
1168
|
+
componentType: script
|
|
1169
|
+
criteria:
|
|
1170
|
+
- dimension: operation-correctness
|
|
1171
|
+
statement: Parses every executable inline <script> via new Function (no execution), skips non-executable (src=, ld+json, text/plain, empty), and exits 1 with scriptIndex+snippet on any SyntaxError; non-bypassable.
|
|
1172
|
+
checkMethod: deterministic-script
|
|
1173
|
+
passCondition: CR-byte split-regex HTML → exit 1 with index/snippet; clean HTML → exit 0; covered by render-js-syntax tests.
|
|
1174
|
+
severity: CRIT
|
|
1175
|
+
existingCoverage: covered
|
|
1176
|
+
evidenceSource: intendedBehavior PR-050; existing render-js-syntax gate + tests
|
|
1177
|
+
- componentId: script-cli-init
|
|
1178
|
+
componentName: scripts/cli/init.ts
|
|
1179
|
+
componentType: script
|
|
1180
|
+
criteria:
|
|
1181
|
+
- dimension: operation-correctness
|
|
1182
|
+
statement: init runs onboarding phases, installs agents non-blocking (Phase 5b), copies shared templates, and gates source-CLI install behind explicit approval; detects runtime correctly.
|
|
1183
|
+
checkMethod: deterministic-script
|
|
1184
|
+
passCondition: Config created at .mutagent/config.yaml; agents installed to .claude/skills; ensureSourceCli requires approval; covered by init-scope/install-agents tests.
|
|
1185
|
+
severity: MED
|
|
1186
|
+
existingCoverage: covered
|
|
1187
|
+
evidenceSource: intendedBehavior; existing CLI routing unit tests
|
|
1188
|
+
- componentId: script-cli-doctor
|
|
1189
|
+
componentName: scripts/cli/doctor.ts
|
|
1190
|
+
componentType: script
|
|
1191
|
+
criteria:
|
|
1192
|
+
- dimension: data-correctness
|
|
1193
|
+
statement: Emits a DoctorReport JSON {runtime, env(LANGFUSE_*,GOOGLE_API_KEY,...), version, errors[], recommendations[]} reflecting actual environment; never prints secret VALUES, only presence.
|
|
1194
|
+
checkMethod: deterministic-script
|
|
1195
|
+
passCondition: Report shape valid; env entries report present/absent not raw secret; missing key → error+recommendation.
|
|
1196
|
+
severity: LOW
|
|
1197
|
+
existingCoverage: partial
|
|
1198
|
+
evidenceSource: intendedBehavior doctor; feedback_worktree_secret_safety (no secret leakage)
|
|
1199
|
+
- componentId: script-cli-run
|
|
1200
|
+
componentName: scripts/cli/run.sh
|
|
1201
|
+
componentType: script
|
|
1202
|
+
criteria:
|
|
1203
|
+
- dimension: operation-correctness
|
|
1204
|
+
statement: Runtime selector falls through bun→pnpm-tsx→npx-tsx→node with zero Bun.* API dependence (fully portable); dispatches .ts via TS runtime and .sh via bash.
|
|
1205
|
+
checkMethod: deterministic-script
|
|
1206
|
+
passCondition: On a bun-absent host the fallback chain still executes scripts; grep confirms no Bun.* API in scripts/.
|
|
1207
|
+
severity: MED
|
|
1208
|
+
existingCoverage: partial
|
|
1209
|
+
evidenceSource: intendedBehavior portable dispatch (zero Bun.* in scripts/)
|
|
1210
|
+
- componentId: script-self-diagnostics-probe
|
|
1211
|
+
componentName: scripts/self-diagnostics/probe.ts
|
|
1212
|
+
componentType: script
|
|
1213
|
+
criteria:
|
|
1214
|
+
- dimension: data-correctness
|
|
1215
|
+
statement: Correctly detects host (claude-code/codex/other) and the session-transcript path (~/.claude/projects or ~/.codex/sessions); returns isAvailable=false rather than a wrong path when none found.
|
|
1216
|
+
checkMethod: deterministic-script
|
|
1217
|
+
passCondition: Per-host fixtures resolve the correct sessionPath; absent transcript → isAvailable:false, no fabricated path.
|
|
1218
|
+
severity: LOW
|
|
1219
|
+
existingCoverage: none
|
|
1220
|
+
evidenceSource: intendedBehavior Step 12 probe
|
|
1221
|
+
- componentId: script-self-diagnostics-dispatch
|
|
1222
|
+
componentName: scripts/self-diagnostics/dispatch.ts
|
|
1223
|
+
componentType: script
|
|
1224
|
+
criteria:
|
|
1225
|
+
- dimension: operation-correctness
|
|
1226
|
+
statement: Writes a descriptor that feeds the session transcript through the SAME RCA pipeline (Step 8+) using the identical analyzer+renderer (one engine, two subjects PR-025); only the subject differs.
|
|
1227
|
+
checkMethod: trace-cross-ref
|
|
1228
|
+
passCondition: Descriptor points at the same analyzer/renderer entrypoints as client diagnosis; output carries [INTERNAL]+META.
|
|
1229
|
+
severity: MED
|
|
1230
|
+
existingCoverage: none
|
|
1231
|
+
evidenceSource: intendedBehavior PR-025
|
|
1232
|
+
- componentId: sl13-suite-sync-outreach-gates
|
|
1233
|
+
componentName: SL-13 Suite-Sync Mined Criteria (fault-mapped outreach gates)
|
|
1234
|
+
componentType: gate
|
|
1235
|
+
criteria:
|
|
1236
|
+
- dimension: operational-deviation
|
|
1237
|
+
statement: 'Pass = every send_message span is preceded (earlier startTime, same session) by a review_with_manager span; Fail = the session dispatches a send_message with no prior review span (or the only review occurs after the send).'
|
|
1238
|
+
checkMethod: trace-cross-ref
|
|
1239
|
+
passCondition: Every send_message span has a review_with_manager span with an earlier startTime in the same session; a send with no prior review (or a review only after the send) fails.
|
|
1240
|
+
severity: CRIT
|
|
1241
|
+
existingCoverage: none
|
|
1242
|
+
evidenceSource: 'SL-13 suite-sync mined criterion crit-send-requires-manager-review (kind: fault-mapped; faultClass: review-gate-bypass); evidence spans synth-0014/f2761f7db7602ebf, synth-0009/74fb466bb30a7da2, synth-0020/5aadb6a7297202c8, synth-0044/1787b4b6e4ad106a; dataset 85c1151c299f0160c6b47b06e48054c935c1eb502c8387cc806876a007588c3a'
|
|
1243
|
+
- dimension: operational-deviation
|
|
1244
|
+
statement: 'Pass = the session contains at most one send_message span; Fail = two or more send_message spans deliver to the talent within one outreach session (duplicate delivery, distinct messageIds).'
|
|
1245
|
+
checkMethod: trace-cross-ref
|
|
1246
|
+
passCondition: The session contains at most one send_message span; two or more send_message spans delivering to the talent within one outreach session (duplicate delivery, distinct messageIds) fails.
|
|
1247
|
+
severity: HIGH
|
|
1248
|
+
existingCoverage: none
|
|
1249
|
+
evidenceSource: 'SL-13 suite-sync mined criterion crit-single-send-per-session (kind: fault-mapped; faultClass: duplicate-delivery); evidence spans synth-0037/185f9d5af28cdf41, synth-0037/51bfa08ab619cf3c, synth-0033/185f9d5af28cdf41, synth-0033/51bfa08ab619cf3c; dataset 85c1151c299f0160c6b47b06e48054c935c1eb502c8387cc806876a007588c3a'
|
|
1250
|
+
- dimension: operational-deviation
|
|
1251
|
+
statement: 'Pass = if any context/data tool returns output with ok:false, the agent does not proceed to a downstream send_message without a successful re-fetch of that data; Fail = a tool returns ok:false and the agent still dispatches a send built on that unrecovered failed context (silent swallow).'
|
|
1252
|
+
checkMethod: trace-cross-ref
|
|
1253
|
+
passCondition: No send_message span follows a context/data tool span whose output is ok:false unless a successful re-fetch of that data intervenes; a send built on unrecovered failed context fails.
|
|
1254
|
+
severity: HIGH
|
|
1255
|
+
existingCoverage: none
|
|
1256
|
+
evidenceSource: 'SL-13 suite-sync mined criterion crit-no-send-after-failed-context-fetch (kind: fault-mapped; faultClass: silent-tool-failure-swallow); evidence spans synth-0032/bf559d37cc1d52c7, synth-0032/5c5026fdb18aa346, synth-0030/39358c407b982a21, synth-0030/8c0b7d7ec7877f26; dataset 85c1151c299f0160c6b47b06e48054c935c1eb502c8387cc806876a007588c3a'
|
|
1257
|
+
- dimension: operational-deviation
|
|
1258
|
+
statement: 'Pass = a generate_draft_message span is preceded by a get_conversation_history span in the same session; Fail = the agent drafts outreach with no prior conversation-history retrieval (context-blind draft).'
|
|
1259
|
+
checkMethod: trace-cross-ref
|
|
1260
|
+
passCondition: Every generate_draft_message span has a get_conversation_history span earlier in the same session; a draft with no prior conversation-history retrieval fails.
|
|
1261
|
+
severity: MED
|
|
1262
|
+
existingCoverage: none
|
|
1263
|
+
evidenceSource: 'SL-13 suite-sync mined criterion crit-conversation-history-fetched-before-draft (kind: fault-mapped; faultClass: context-blind-draft); evidence spans synth-0041/bec1841a11e6b070, synth-0018/9fb2c1164e1c3535, synth-0037/892ee6c92b421ef1; dataset 85c1151c299f0160c6b47b06e48054c935c1eb502c8387cc806876a007588c3a'
|
|
1264
|
+
- dimension: operational-deviation
|
|
1265
|
+
statement: 'Pass = whenever a send_message is preceded by a review_with_manager, that review span''s output carries approved:true (the agent only sends over an approving review); Fail = a send follows a review whose output is not approved:true.'
|
|
1266
|
+
checkMethod: trace-cross-ref
|
|
1267
|
+
passCondition: For every send_message preceded by a review_with_manager, that review span carries output approved:true; a send following a non-approved review fails.
|
|
1268
|
+
severity: HIGH
|
|
1269
|
+
existingCoverage: none
|
|
1270
|
+
evidenceSource: 'SL-13 suite-sync mined criterion crit-clean-review-approval-honored (kind: clean-control; faultClass: approval-honored); evidence spans synth-0021/0383fb61e8de10eb, synth-0024/5ec7615b5bb08018; dataset 85c1151c299f0160c6b47b06e48054c935c1eb502c8387cc806876a007588c3a'
|