@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.
Files changed (357) hide show
  1. package/.claude/skills/mutagent-helix/SKILL.md +113 -0
  2. package/.claude/skills/mutagent-helix/scripts/cli/codex-transcode.ts +143 -0
  3. package/.claude/skills/mutagent-helix/scripts/cli/doctor.ts +111 -0
  4. package/.claude/skills/mutagent-helix/scripts/cli/init.ts +382 -0
  5. package/.claude/skills/mutagent-helix/scripts/cli/run.sh +61 -0
  6. package/CLAUDE.md +193 -0
  7. package/LICENSE +201 -0
  8. package/NOTICE +22 -0
  9. package/README.md +209 -0
  10. package/assets/adl-loop.svg +162 -0
  11. package/assets/system-status.svg +422 -0
  12. package/bin/mutagent-cli.mjs +9950 -0
  13. package/bin/mutagent-helix.mjs +78 -0
  14. package/mutagent-agentspec/.claude/skills/mutagent-agentspec/CLAUDE.md +28 -0
  15. package/mutagent-agentspec/.claude/skills/mutagent-agentspec/SKILL.md +138 -0
  16. package/mutagent-agentspec/.claude/skills/mutagent-agentspec/assets/templates/agentspec.yaml.tpl +247 -0
  17. package/mutagent-agentspec/.claude/skills/mutagent-agentspec/references/frameworks/doc-pins.md +53 -0
  18. package/mutagent-agentspec/.claude/skills/mutagent-agentspec/references/principles.md +91 -0
  19. package/mutagent-agentspec/.claude/skills/mutagent-agentspec/references/requirements.yaml +295 -0
  20. package/mutagent-agentspec/.claude/skills/mutagent-agentspec/references/workflows/orchestrator-protocol.md +302 -0
  21. package/mutagent-agentspec/.claude/skills/mutagent-agentspec/scripts/cli/doctor.ts +116 -0
  22. package/mutagent-agentspec/.claude/skills/mutagent-agentspec/scripts/cli/init.ts +230 -0
  23. package/mutagent-agentspec/.claude/skills/mutagent-agentspec/scripts/cli/run.sh +60 -0
  24. package/mutagent-agentspec/.claude/skills/mutagent-agentspec/scripts/config/resolve-spec-dir.ts +199 -0
  25. package/mutagent-agentspec/.claude/skills/mutagent-agentspec/scripts/contract/agentspec.schema.ts +455 -0
  26. package/mutagent-agentspec/.claude/skills/mutagent-agentspec/scripts/setup/detect.ts +67 -0
  27. package/mutagent-agentspec/.claude/skills/mutagent-agentspec/scripts/validate/validate-spec.ts +93 -0
  28. package/mutagent-agentspec/LICENSE +201 -0
  29. package/mutagent-agentspec/NOTICE +19 -0
  30. package/mutagent-agentspec/README.md +44 -0
  31. package/mutagent-builder/.claude/skills/mutagent-builder/SKILL.md +100 -0
  32. package/mutagent-builder/.claude/skills/mutagent-builder/assets/agents/ai-architect.md +312 -0
  33. package/mutagent-builder/.claude/skills/mutagent-builder/assets/agents/ai-engineer.md +357 -0
  34. package/mutagent-builder/.claude/skills/mutagent-builder/assets/templates/build-report.md.tpl +39 -0
  35. package/mutagent-builder/.claude/skills/mutagent-builder/references/principles.md +31 -0
  36. package/mutagent-builder/.claude/skills/mutagent-builder/references/workflows/build-protocol.md +61 -0
  37. package/mutagent-builder/.claude/skills/mutagent-builder/references/workflows/improve-handoff.md +23 -0
  38. package/mutagent-builder/.claude/skills/mutagent-builder/scripts/cli/run.sh +60 -0
  39. package/mutagent-builder/.claude/skills/mutagent-builder/scripts/handoff/validate-build-input.ts +72 -0
  40. package/mutagent-builder/.claude/skills/mutagent-builder/scripts/sync-spec/check-sync-spec.ts +499 -0
  41. package/mutagent-builder/.claude/skills/mutagent-builder/scripts/verify/spec-impl-coverage.ts +182 -0
  42. package/mutagent-builder/CLAUDE.md +25 -0
  43. package/mutagent-builder/README.md +26 -0
  44. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/README.md +192 -0
  45. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/SKILL.md +352 -0
  46. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/agents/ai-architect.md +256 -0
  47. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/agents/ai-engineer.md +344 -0
  48. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/agents/diagnostics-analyzer.md +576 -0
  49. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/agents/discovery.md +425 -0
  50. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/templates/audit.json.tpl +24 -0
  51. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/templates/audit.md.tpl +49 -0
  52. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/templates/config.yaml.tpl +100 -0
  53. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/templates/pr-body.md.tpl +56 -0
  54. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/templates/report.html.tpl +327 -0
  55. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/templates/shared/README.md +27 -0
  56. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/templates/shared/iter-N-handover.md.tpl +125 -0
  57. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/templates/shared/self-diagnosis-contract.v0.1.0.yaml.tpl +234 -0
  58. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/templates/shared/spec.yaml.tpl +152 -0
  59. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/templates/shared/team.yaml.tpl +127 -0
  60. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/templates/shared/wave-N-dashboard.html.tpl +1712 -0
  61. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/wireframes/diagnostics/WF-2.1-nl-query.md +59 -0
  62. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/wireframes/diagnostics/WF-2.2-tier0-progress.md +58 -0
  63. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/wireframes/diagnostics/WF-2.3-analysis-progress.md +44 -0
  64. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/wireframes/diagnostics/WF-2.4-html-report.md +61 -0
  65. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/wireframes/diagnostics/WF-2.5-rca-detail.md +69 -0
  66. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/wireframes/diagnostics/WF-2.6-stale-warning.md +53 -0
  67. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/wireframes/onboarding/WF-1.1-welcome.md +60 -0
  68. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/wireframes/onboarding/WF-1.2-source-platform-picker.md +41 -0
  69. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/wireframes/onboarding/WF-1.3-source-auth.md +75 -0
  70. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/wireframes/onboarding/WF-1.4-target-picker.md +48 -0
  71. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/wireframes/onboarding/WF-1.5-ask-tool.md +43 -0
  72. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/wireframes/onboarding/WF-1.6-config-review.md +57 -0
  73. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/wireframes/onboarding/WF-1.7-filter-defaults.md +52 -0
  74. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/wireframes/onboarding/WF-1.8-first-run.md +59 -0
  75. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/examples/sample-findings.json +92 -0
  76. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/examples/sample-meta.json +47 -0
  77. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/adapter-strategy.md +75 -0
  78. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/config-migration.md +84 -0
  79. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/config.md +159 -0
  80. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/filter-search-matrix.md +66 -0
  81. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/harness-knowledge.md +22 -0
  82. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/memory-format.md +78 -0
  83. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/onboarding-decisions.yaml +187 -0
  84. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/operation-inventory.md +59 -0
  85. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/overview.md +167 -0
  86. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/reference.md +119 -0
  87. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/script-index.md +101 -0
  88. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/source-adapter-contract.md +93 -0
  89. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/source-platforms/claude-code-transcripts.md +66 -0
  90. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/source-platforms/codex-transcripts.md +78 -0
  91. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/source-platforms/codex.md +145 -0
  92. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/source-platforms/install-paths.md +57 -0
  93. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/source-platforms/langfuse.md +178 -0
  94. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/source-platforms/local-jsonl.md +55 -0
  95. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/source-platforms/openobserve.md +102 -0
  96. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/source-platforms/otel.md +63 -0
  97. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/target-platforms/cloud-rest.md +84 -0
  98. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/target-platforms/local-claude.md +65 -0
  99. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/target-platforms/local-cloud-agent-sdk.md +92 -0
  100. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/target-platforms/local-codex.md +72 -0
  101. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/target-platforms/local-cursor.md +108 -0
  102. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/target-platforms/local-mastra.md +77 -0
  103. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/target-platforms/local-opencode.md +70 -0
  104. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/workflows/apply-pr-comment-format.md +82 -0
  105. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/workflows/diagnostics.md +35 -0
  106. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/workflows/handover-contract.md +247 -0
  107. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/workflows/onboarding.md +300 -0
  108. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/workflows/orchestrator-protocol.md +1861 -0
  109. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/workflows/rca.md +331 -0
  110. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/workflows/rendering-anatomy.md +314 -0
  111. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/workflows/schedule-prep.md +100 -0
  112. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/workflows/scope-model.md +128 -0
  113. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/workflows/verification-methodology.md +174 -0
  114. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/aggregate/sort-findings.ts +0 -0
  115. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/awareness/blind-spots.ts +167 -0
  116. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/awareness/llm-sample.ts +681 -0
  117. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/cli/doctor.ts +215 -0
  118. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/cli/init.ts +1013 -0
  119. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/cli/install-agents.ts +350 -0
  120. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/cli/run.sh +61 -0
  121. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/cli/shared-templates.ts +79 -0
  122. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/config/load.ts +392 -0
  123. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/config/resolve-credential.ts +120 -0
  124. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/config/schema.ts +641 -0
  125. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/config/validate.ts +134 -0
  126. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/context/build-diagnosis-context.ts +417 -0
  127. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/context/load-context.ts +105 -0
  128. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/contract/types.ts +166 -0
  129. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/enrich/build-render-input.ts +1964 -0
  130. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/enrich/corpus-severity.ts +172 -0
  131. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/enrich/dismissal-match.ts +270 -0
  132. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/enrich/rank-remedies.ts +75 -0
  133. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/hooks/install-hooks.sh +46 -0
  134. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/hooks/pre-push.sh +78 -0
  135. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/invocation/parse-brief.ts +188 -0
  136. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/library/match.ts +114 -0
  137. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/library/paths.ts +95 -0
  138. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/library/store.ts +535 -0
  139. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/library/types.ts +181 -0
  140. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/lint/template-inline-js.ts +267 -0
  141. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/memory/append.ts +188 -0
  142. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/memory/read.ts +218 -0
  143. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/normalize/platforms/entity-context.ts +686 -0
  144. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/normalize/read-unitf.ts +267 -0
  145. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/normalize/trace.ts +1078 -0
  146. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/normalize/unitf-adapter.ts +0 -0
  147. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/normalize/unitf-types.ts +213 -0
  148. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/report/persist-selections.ts +174 -0
  149. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/report/render.ts +3254 -0
  150. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/run/diagnose.ts +64 -0
  151. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/run/session.ts +167 -0
  152. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/sample/caps.ts +345 -0
  153. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/sample/deep-read-gate.ts +424 -0
  154. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/sample/representative.ts +584 -0
  155. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/scan/objection.ts +224 -0
  156. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/scan/trajectory.ts +489 -0
  157. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/self-diagnostics/dispatch.ts +135 -0
  158. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/self-diagnostics/probe.ts +170 -0
  159. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/setup/detect.ts +307 -0
  160. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/setup/ensure-cli.ts +315 -0
  161. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/setup/reconfigure.ts +77 -0
  162. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/setup/verify-agents.ts +207 -0
  163. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/slicer.ts +166 -0
  164. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/source/adapters/claude-code.ts +17 -0
  165. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/source/adapters/codex.ts +11 -0
  166. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/source/adapters/langfuse.ts +17 -0
  167. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/source/adapters/local-jsonl.ts +12 -0
  168. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/source/adapters/otel.ts +12 -0
  169. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/source/index.ts +54 -0
  170. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/source/registry.ts +45 -0
  171. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/source/types.ts +86 -0
  172. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/stale-detector.ts +74 -0
  173. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/test/render-playwright.cli.ts +477 -0
  174. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/tier0/claude-code.ts +133 -0
  175. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/tier0/langfuse.ts +143 -0
  176. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/tier0-scan.ts +423 -0
  177. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/validate/completeness-check.ts +436 -0
  178. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/validate/doc-refs.ts +190 -0
  179. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/validate/finalize-gate.ts +417 -0
  180. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/validate/findings-contract.ts +628 -0
  181. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/validate/render-js-syntax.ts +188 -0
  182. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/validate/report-checklist.yaml +217 -0
  183. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/validate/trace-shape.ts +262 -0
  184. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/validate/wave6-checklist.ts +326 -0
  185. package/mutagent-diagnostics/CLAUDE.md +41 -0
  186. package/mutagent-diagnostics/LICENSE +201 -0
  187. package/mutagent-diagnostics/NOTICE +18 -0
  188. package/mutagent-diagnostics/README.md +343 -0
  189. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/SKILL.md +548 -0
  190. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/assets/agents/audit-executor.md +169 -0
  191. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/assets/agents/dataset-builder.md +160 -0
  192. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/assets/agents/discovery.md +425 -0
  193. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/assets/agents/evaluator.md +1108 -0
  194. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/assets/brand/theme.css +213 -0
  195. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/assets/brand/wordmark.html +9 -0
  196. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/lenses/context-flow-lens.md +85 -0
  197. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/lenses/data-lens.md +47 -0
  198. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/lenses/decision-lens.md +48 -0
  199. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/lenses/methodology-critic-lens.md +53 -0
  200. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/lenses/trajectory-lens.md +44 -0
  201. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/references/build-review-interface.md +83 -0
  202. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/references/edd-loop.md +134 -0
  203. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/references/error-analysis.md +113 -0
  204. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/references/eval-audit.md +154 -0
  205. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/references/eval-stage.md +168 -0
  206. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/references/generate-synthetic-data.md +81 -0
  207. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/references/grounded-adjudication.md +221 -0
  208. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/references/memory-format.md +65 -0
  209. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/references/methodology.md +201 -0
  210. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/references/operation-inventory.md +197 -0
  211. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/references/validate-evaluator.md +125 -0
  212. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/references/workflows/orchestrator-protocol.md +300 -0
  213. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/references/write-judge-prompt.md +123 -0
  214. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/schemas/behavior-tree.schema.yaml +73 -0
  215. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/schemas/dataset.schema.yaml +66 -0
  216. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/schemas/edd-change-request.schema.yaml +114 -0
  217. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/schemas/eval-matrix.schema.yaml +74 -0
  218. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/schemas/flow-graph.schema.yaml +69 -0
  219. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/schemas/flow-profile.schema.yaml +49 -0
  220. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/schemas/methodology-review.schema.yaml +40 -0
  221. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/schemas/scorecard.schema.yaml +85 -0
  222. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/agent-dispatch.ts +0 -0
  223. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/aggregate-discover.ts +543 -0
  224. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/artifact-paths.ts +115 -0
  225. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/assemble-scorecard.ts +172 -0
  226. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/build-dataset.ts +186 -0
  227. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/build-evals.ts +93 -0
  228. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/build-review-ui.ts +393 -0
  229. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/check-method-router.ts +170 -0
  230. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/cli/aggregate.ts +112 -0
  231. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/cli/audit-run.ts +182 -0
  232. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/cli/doctor.ts +211 -0
  233. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/cli/dogfood.ts +133 -0
  234. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/cli/init.ts +601 -0
  235. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/cli/methodology-review.ts +122 -0
  236. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/cli/prep.ts +295 -0
  237. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/cli/profile-subject.ts +165 -0
  238. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/cli/run.sh +56 -0
  239. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/cli/variance-check.ts +105 -0
  240. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/code-eval.ts +248 -0
  241. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/code-quality-verdict.ts +285 -0
  242. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/codegen-evals.ts +173 -0
  243. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/cold-start-project.ts +151 -0
  244. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/cold-start-sampler.ts +267 -0
  245. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/config/load.ts +343 -0
  246. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/config/schema.ts +380 -0
  247. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/contracts/agentspec-evals.ts +85 -0
  248. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/contracts/dataset.ts +149 -0
  249. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/contracts/eval-engine.ts +118 -0
  250. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/contracts/eval-matrix.ts +577 -0
  251. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/contracts/eval-types.ts +1074 -0
  252. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/contracts/flow-graph.ts +194 -0
  253. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/contracts/types.ts +303 -0
  254. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/contracts/validation.ts +193 -0
  255. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/derive-dataset.ts +152 -0
  256. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/determine-outcome.ts +219 -0
  257. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/diff-discriminate.ts +160 -0
  258. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/discover-criteria.ts +348 -0
  259. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/edd/change-request.ts +232 -0
  260. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/edd/edd-types.ts +210 -0
  261. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/edd/variance-gate.ts +186 -0
  262. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/emit-completeness.ts +111 -0
  263. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/eval-engine.ts +160 -0
  264. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/evaluate.ts +333 -0
  265. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/flow-graph.ts +230 -0
  266. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/judge-prompt-template.ts +253 -0
  267. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/judge-provider.ts +135 -0
  268. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/lint-grounding.ts +229 -0
  269. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/lint-uniformity.ts +168 -0
  270. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/living-suite.ts +109 -0
  271. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/load-bundle.ts +203 -0
  272. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/load-profile-vocab.ts +64 -0
  273. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/load-profile.ts +106 -0
  274. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/mask.ts +138 -0
  275. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/materialize-dataset.ts +113 -0
  276. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/matrix-judge.ts +750 -0
  277. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/memory/append.ts +215 -0
  278. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/memory/read.ts +168 -0
  279. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/persist-eval-criteria.ts +232 -0
  280. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/prep-tasks.ts +125 -0
  281. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/profile-subject.ts +310 -0
  282. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/publish-report.ts +131 -0
  283. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/read-unitf-traces.ts +81 -0
  284. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/render-build-cards.ts +195 -0
  285. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/render-discover-report.ts +1640 -0
  286. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/render-eval-report.ts +3838 -0
  287. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/render-report.ts +212 -0
  288. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/resolve-credential.ts +110 -0
  289. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/resolve-ref.ts +98 -0
  290. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/result-verify.ts +129 -0
  291. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/route-failures.ts +330 -0
  292. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/run-deterministic.ts +367 -0
  293. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/run-evaluate.ts +719 -0
  294. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/run-judge.ts +155 -0
  295. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/run-pipeline.ts +175 -0
  296. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/sample-traces.ts +210 -0
  297. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/self-audit.ts +387 -0
  298. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/source-map.ts +106 -0
  299. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/subject-profile.ts +134 -0
  300. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/substrate.ts +162 -0
  301. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/sync-eval-criteria.ts +244 -0
  302. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/ui-slots.ts +119 -0
  303. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/unitf-to-evaltrace.ts +284 -0
  304. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/validate-judge.ts +358 -0
  305. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/variance-compare.ts +177 -0
  306. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/subjects/mutagent-diagnostics/behavior-tree.yaml +140 -0
  307. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/subjects/mutagent-diagnostics/eval-matrix.yaml +1270 -0
  308. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/subjects/mutagent-diagnostics/methodology-review.yaml +105 -0
  309. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/workflows/audit.workflow.js +82 -0
  310. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/workflows/data-leak.workflow.js +236 -0
  311. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/workflows/variance.workflow.js +163 -0
  312. package/mutagent-evaluator/CLAUDE.md +45 -0
  313. package/mutagent-evaluator/LICENSE +201 -0
  314. package/mutagent-evaluator/NOTICE +23 -0
  315. package/mutagent-evaluator/README.md +88 -0
  316. package/mutagent-optimize/.claude/skills/mutagent-optimize/SKILL.md +287 -0
  317. package/mutagent-optimize/.claude/skills/mutagent-optimize/scripts/contracts/amend-request.ts +503 -0
  318. package/mutagent-optimize/.claude/skills/mutagent-optimize/scripts/improve-loop-run.ts +304 -0
  319. package/mutagent-optimize/.claude/skills/mutagent-optimize/scripts/loop-state-cli.ts +300 -0
  320. package/mutagent-optimize/.claude/skills/mutagent-optimize/scripts/loop-state.ts +440 -0
  321. package/mutagent-optimize/CLAUDE.md +49 -0
  322. package/mutagent-optimize/README.md +26 -0
  323. package/mutagent-orchestrator/CLAUDE.md +102 -0
  324. package/mutagent-orchestrator/README.md +20 -0
  325. package/mutagent-orchestrator/assets/agents/discovery.md +425 -0
  326. package/mutagent-orchestrator/assets/agents/dogfood-monitor.md +266 -0
  327. package/mutagent-orchestrator/assets/agents/monitor.md +258 -0
  328. package/mutagent-orchestrator/orchestrator.md +782 -0
  329. package/mutagent-orchestrator/references/MONITORING.md +209 -0
  330. package/mutagent-orchestrator/references/config-fields.md +132 -0
  331. package/mutagent-orchestrator/references/config-migration.md +132 -0
  332. package/mutagent-orchestrator/references/index-registry.md +92 -0
  333. package/mutagent-orchestrator/routing.yaml +391 -0
  334. package/mutagent-orchestrator/scripts/config-schema.ts +1010 -0
  335. package/mutagent-orchestrator/scripts/dispatch.ts +439 -0
  336. package/mutagent-orchestrator/scripts/dogfood/extract-feedback.ts +203 -0
  337. package/mutagent-orchestrator/scripts/dogfood/reconstruct-trajectory.ts +327 -0
  338. package/mutagent-orchestrator/scripts/dogfood/render-dogfood-report.ts +347 -0
  339. package/mutagent-orchestrator/scripts/dogfood/resolve-subagents.ts +160 -0
  340. package/mutagent-orchestrator/scripts/dogfood/run-report.ts +264 -0
  341. package/mutagent-orchestrator/scripts/dogfood/slack-thread.ts +106 -0
  342. package/mutagent-orchestrator/scripts/dogfood/types.ts +257 -0
  343. package/mutagent-orchestrator/scripts/eval-routing.ts +753 -0
  344. package/mutagent-orchestrator/scripts/gate.ts +219 -0
  345. package/mutagent-orchestrator/scripts/handover-contract.ts +362 -0
  346. package/mutagent-orchestrator/scripts/index/build-index.ts +351 -0
  347. package/mutagent-orchestrator/scripts/index/render-index.ts +110 -0
  348. package/mutagent-orchestrator/scripts/monitor/slack-notify.ts +111 -0
  349. package/mutagent-orchestrator/scripts/monitor/triggers.ts +162 -0
  350. package/mutagent-orchestrator/scripts/onboarding-check.ts +369 -0
  351. package/mutagent-orchestrator/scripts/render-roster.ts +308 -0
  352. package/mutagent-orchestrator/scripts/resolve-credential.ts +185 -0
  353. package/mutagent-orchestrator/scripts/resolve-paths.ts +114 -0
  354. package/mutagent-orchestrator/scripts/slack/format.ts +63 -0
  355. package/mutagent-orchestrator/scripts/slack/post.ts +115 -0
  356. package/mutagent-orchestrator/scripts/sync-index.ts +311 -0
  357. 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'