@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,123 @@
1
+ # write-judge-prompt — design a binary LLM-as-judge for one criterion
2
+
3
+ > **Source:** absorbed from `mutagent-system/.memory/features/evals-skills-source/skills/write-judge-prompt/SKILL.md`.
4
+ > **Loaded by:** `*build-evals` (EV-043), executed by `assets/agents/evaluator.md` (`#mode-judge-criterion`; the trajectory axis loads it too). Load on demand.
5
+ > **Sibling refs:** `error-analysis.md` (mine the criterion) · `validate-evaluator.md` (calibrate the judge) · `grounded-adjudication.md` (the GA doctrine: bind · gather refs · typed assumptions · abstain · verify).
6
+
7
+ Design ONE binary Pass/Fail LLM-as-judge for ONE failure mode. Each judge checks exactly one thing.
8
+ Use a judge ONLY for criteria a code-based check cannot handle — exhaust code-based options first
9
+ (many "subjective" criteria reduce to keyword / regex / API checks once you understand the domain).
10
+
11
+ ## Prerequisites
12
+
13
+ - Error analysis complete; the failure mode is identified (`*discover-evals`).
14
+ - Human-labeled traces for this mode (≥20 Pass + ≥20 Fail).
15
+ - A code-based evaluator genuinely cannot check it.
16
+
17
+ ## The 4 components (every judge prompt has exactly these)
18
+
19
+ ### 1. Task and evaluation criterion
20
+ State what the judge evaluates — ONE failure mode per judge. Not "evaluate whether the email is
21
+ good", not "rate quality 1-5". E.g. *"You are an evaluator assessing whether the agent respected the
22
+ outbound-guard: when `<outbound_guard>` is present and the event is non-critical, it must NOT send."*
23
+
24
+ ### 2. Pass/Fail definitions
25
+ Strictly **binary** — no Likert, no letter grades, no partial credit. Define exactly what
26
+ constitutes Pass and Fail, drawn from the error-analysis failure-mode description. List concrete
27
+ FAIL examples (e.g. "sent a routine nudge while `consecutive_outbound=11` and guard=CRITICAL").
28
+
29
+ ### 3. Few-shot examples
30
+ Include labeled Pass + Fail examples — at least one clear Pass, one clear Fail, and one **borderline**
31
+ case (borderline teaches the most nuance).
32
+ - **Draw ONLY from the TRAIN split** (10-20% of labeled data set aside for this). Any example used
33
+ in the prompt MUST be excluded from dev/test — using dev/test examples is **data leakage**.
34
+ - 2-4 examples is typical; performance plateaus after 4-8.
35
+
36
+ ### 4. Structured output — critique BEFORE verdict
37
+ Enforce schema (provider `response_format` / tool definitions; or specify the JSON schema inline).
38
+ The output puts the **critique first, verdict second** — this forces the judge to articulate its
39
+ assessment before committing. Under Grounded Adjudication the verdict is **ternary** and carries the
40
+ structured grounding it rests on:
41
+
42
+ ```json
43
+ {
44
+ "critique": "string — detailed assessment vs the criterion, citing concrete evidence from the trace",
45
+ "refs": [{ "obs": "trace/observation id", "path": "field path", "value": "EXACT cited value" }],
46
+ "assumptions": [{ "text": "premise the trace did not establish", "kind": "factual-intent | normative | scope", "status": "hypothesis" }],
47
+ "result": "pass | fail | uncertain",
48
+ "confidence": 0.0,
49
+ "blockedBy": { "kind": "factual-intent | normative | scope", "text": "the unbound term / ungroundable premise" }
50
+ }
51
+ ```
52
+
53
+ - `result` is **ternary**: `pass` · `fail` · `uncertain`. `uncertain` (carrying a `blockedBy`) IS
54
+ the **indeterminate** state — it reuses `OutcomeVerdict.Uncertain`, **not** a 4th enum value.
55
+ - `blockedBy` is REQUIRED whenever `result === "uncertain"` (an `uncertain` with no `blockedBy` is an
56
+ unrouted abstain — `lint-grounding` flags it).
57
+ - `refs` are STRUCTURED + **re-resolvable** (`scripts/resolve-ref.ts` re-resolves each by
58
+ whitespace-normalized EXACT value match); cite one for the claim AND for any absence.
59
+
60
+ Critiques must be detailed, not terse — the critiques in your few-shot examples set the bar for the
61
+ detail the judge produces.
62
+
63
+ ## Grounded Adjudication — bind, gather, abstain, verify
64
+
65
+ > Full doctrine in `references/grounded-adjudication.md` (the 5 Laws · the verdict lattice · the two
66
+ > switches). The load-bearing additions for every judge prompt:
67
+
68
+ - **BIND before you judge (L1).** Before rendering a verdict, every **TERM** the criterion
69
+ presupposes must resolve to a grounded referent IN THIS situation
70
+ (`scripts/resolve-ref.ts` `bindCriterionTerms` / `bindBeforeJudge`). An **unbound term** (a
71
+ referent the situation never established — e.g. *"on-topic with the advertiser's product"* over a
72
+ **blank brief**) ⇒ `result: uncertain` + `blockedBy: {kind: "factual-intent"}` — **ABSTAIN, never
73
+ fail.** A valid-yet-unbound criterion is not a defect of the trajectory. Refs check what you DID
74
+ cite; binding checks what the criterion NEEDED.
75
+ - **GATHER grounded evidence (L2/L3).** Cite a structured `ref {obs, path, value}` for the claim AND
76
+ for any **absence** claim ("did not" / "never" / "no X" needs a positive field check, never
77
+ inferred from silence).
78
+ - **The litmus.** State the **minimal premise P** such that `criterion ∧ situation ∧ P ⊢ V`. If P is
79
+ fully grounded (or in the deterministic floor), DECIDE. If P is ungroundable, **surface it as a
80
+ TYPED assumption** (`factual-intent` · `normative` · `scope`) and abstain (`uncertain` +
81
+ `blockedBy`). The leap from "claim is true" to "therefore fail" is exactly where the assumption
82
+ hides — a sourced claim proves the **claim**, never the **verdict**.
83
+ - **Abstain on silence (L5).** `uncertain` when the **inputs** can't decide (indeterminate, routes
84
+ to the calibration loop) — not merely when YOU are unsure. Decide when the world establishes the
85
+ premises and only you were uncertain.
86
+ - **The verdict is independently VERIFIED (L2 / GA-5).** After you decide, a DISTINCT reviewer
87
+ (`#mode-verify` — never the judge that decided; `scripts/result-verify.ts`) re-resolves your refs
88
+ and checks claim ⊨ verdict. On a dead ref or an inferential leap it **downgrades**
89
+ `pass/fail → uncertain(blockedBy)` — **downgrade-only**; it never flips `pass↔fail` and never
90
+ fixes (EV-051).
91
+
92
+ ## Choosing what to pass to the judge
93
+
94
+ Feed only what the judge needs — for long inputs, the relevant snippet, not the whole document:
95
+
96
+ | Failure mode | What the judge needs |
97
+ |--------------|----------------------|
98
+ | Tone mismatch | Client persona + generated message |
99
+ | Answer faithfulness | Retrieved context + generated answer |
100
+ | Instruction following | System-prompt rules + generated response |
101
+ | Tool-call justification | Conversation history + tool call + tool result |
102
+ | **Outbound-guard compliance (sample C1)** | Input prompt (guard + event) + tool trajectory + response |
103
+ | **Goal-attainment (sample C2)** | Input event + full trajectory + outputs |
104
+
105
+ ## Model selection + C-PIN
106
+
107
+ Start with the most capable model available (the same model as the main task works — the judge does
108
+ a narrower task); optimize cost later, once alignment is confirmed. **Pin the model id + temperature=0**
109
+ and record both on the scorecard (C-PIN) so reruns are byte-identical; re-validate on any model change.
110
+ In this skill the judge call mirrors the proven `@langchain/google-genai` shape (lazy import, temp 0,
111
+ model = `config.models.default`/`--model`, THROW on missing creds — model-intent-sacred).
112
+
113
+ ## Anti-patterns
114
+
115
+ - **Vague criteria** ("is this helpful?") — target a specific observable failure mode.
116
+ - **Holistic judge for the whole trace** — produces unactionable verdicts. One judge, one criterion.
117
+ - **No few-shot examples** — the model won't know what counts as a failure in your application.
118
+ - **Dev/test examples as few-shot** — data leakage.
119
+ - **Likert scales** — scores that sound precise but can't be calibrated; binary forces a clear
120
+ decision boundary. Capture severity via MULTIPLE binary judges, not one ordinal scale.
121
+ - **Skipping validation** — measure alignment with `validate-evaluator.md` before trusting the judge.
122
+ - **Judges for specification failures without fixing the prompt first** — if the prompt never asked
123
+ for the behavior, that's a fix (route to diagnostics), not an eval.
@@ -0,0 +1,73 @@
1
+ # schemas/behavior-tree.schema.yaml
2
+ # ============================================================================
3
+ # The SHAPE of a behavior-tree: the GOLDEN behavioral spec for the pinned judge.
4
+ #
5
+ # Nodes = decision points carrying the EXPECTED decision per scenario
6
+ # (signal-tier · confidence-basis · focus). Edges = forks. This enables the
7
+ # generic engine's core comparison: at every known decision node, the judge
8
+ # compares expected-decision vs observed-decision and expected-scenario vs
9
+ # observed-scenario. Diagnostics' signal-selection / confidence / focus
10
+ # (MR-7/8/9) are the concrete instances; any audited agent is judged the same.
11
+ # ============================================================================
12
+ $id: mutagent-evaluator/behavior-tree
13
+ title: Subject Behavior Tree
14
+ type: object
15
+ required: [subject, version, generatedAt, root, nodes]
16
+ properties:
17
+ subject: { type: string, description: synthetic subject name (NDA) }
18
+ version: { type: string }
19
+ generatedAt: { type: string, description: injected; masked for byte-identity }
20
+ root:
21
+ type: string
22
+ description: nodeId of the entry decision node
23
+ nodes:
24
+ type: array
25
+ items:
26
+ type: object
27
+ required: [nodeId, label, decisionType, scenarios, edges]
28
+ properties:
29
+ nodeId: { type: string }
30
+ label:
31
+ type: string
32
+ description: the protocol decision point (e.g. "Step 3a scope-pick", "Step 4.5 double-zero", "Step 6 analyzer-count", "copy-back")
33
+ decisionType:
34
+ enum: [signal-tier, confidence-basis, focus, scope-pick, gate, dispatch-count, approval, stage-selection, content-decision, output-shape, tool-choice]
35
+ description: >-
36
+ what kind of sub-decision this node represents. The first set (signal-tier … approval) is
37
+ DIAGNOSTICS-shaped (MR-7/8/9 instances). SF-3 additive: stage-selection | content-decision |
38
+ output-shape | tool-choice generalize the vocab for GENERATION-shaped subjects (a multi-stage
39
+ content pipeline), per subject kind — the engine's expected-vs-observed decision comparison is
40
+ identical regardless of which vocab a node uses.
41
+ scenarios:
42
+ type: array
43
+ description: one entry per distinct situation the agent could be in; the EXPECTED decision per scenario
44
+ items:
45
+ type: object
46
+ required: [scenarioId, when, expectedDecision]
47
+ properties:
48
+ scenarioId: { type: string }
49
+ when:
50
+ type: string
51
+ description: the condition that selects this scenario (tier-0 signals + brief state)
52
+ expectedDecision:
53
+ type: string
54
+ description: what the methodology expects the agent to decide GIVEN this scenario
55
+ expectedFork:
56
+ type: string
57
+ description: which outgoing edge target the expected decision should take (optional)
58
+ rationale:
59
+ type: string
60
+ description: why this is the expected decision (the methodology's reasoning)
61
+ edges:
62
+ type: array
63
+ description: the forks out of this node
64
+ items:
65
+ type: object
66
+ required: [edgeId, to, condition]
67
+ properties:
68
+ edgeId: { type: string }
69
+ to: { type: string, description: target nodeId, or "TERMINAL" }
70
+ condition: { type: string, description: the fork condition }
71
+ deadOrRare:
72
+ type: boolean
73
+ description: MR-1 flag — is this fork dead / rarely-useful (advisory)?
@@ -0,0 +1,66 @@
1
+ # schemas/dataset.schema.yaml
2
+ # ============================================================================
3
+ # The SHAPE a generated/derived eval DATASET must conform to (EV-046 build +
4
+ # EV-047 derive + EV-053 living-suite append target).
5
+ #
6
+ # A dataset is the subject's growing set of test CASES: each case is one
7
+ # combination of dimension values (a tuple) plus a realistic natural-language
8
+ # query. Cases come from three sources: user-confirmed SEED tuples (the HITL
9
+ # interview), SYNTHETIC extension (the dataset-builder agent), or DERIVED from a
10
+ # past trace (*derive-dataset). The set is APPEND-ONLY (monotonic growth — the
11
+ # suite never shrinks).
12
+ #
13
+ # Subject-agnostic (EV-002): dimensions + values are DATA carried here, never
14
+ # hard-coded engine constants. This is a human-readable shape contract; the
15
+ # executable validator lives in scripts/contracts/dataset.ts (TypeBox), kept in
16
+ # lockstep with this file.
17
+ # ============================================================================
18
+ $id: mutagent-evaluator/dataset
19
+ title: Subject Eval Dataset
20
+ type: object
21
+ required: [subject, dimensions, cases, version]
22
+ properties:
23
+ subject:
24
+ type: string
25
+ description: synthetic subject name (from the subject profile); NEVER a production dataset name (NDA)
26
+ dimensions:
27
+ type: array
28
+ description: the axes of variation (generate-synthetic-data Step 1); target failure-prone regions
29
+ items:
30
+ type: object
31
+ required: [name, values]
32
+ properties:
33
+ name: { type: string }
34
+ description: { type: string }
35
+ values:
36
+ type: array
37
+ minItems: 1
38
+ items: { type: string }
39
+ description: the discrete values this dimension can take
40
+ cases:
41
+ type: array
42
+ description: the test cases (append-only; monotonic-growth enforced by living-suite EV-053)
43
+ items:
44
+ type: object
45
+ required: [id, tuple, query, source]
46
+ properties:
47
+ id:
48
+ type: string
49
+ description: content-derived stable id (caseId = fnv1a(tupleKey::query)); re-builds collide -> dedup
50
+ tuple:
51
+ type: object
52
+ description: dimension name -> chosen value (≥1 assignment); canonicalized by tupleKey for dedup
53
+ additionalProperties: { type: string }
54
+ query:
55
+ type: string
56
+ description: the natural-language query realizing this tuple (from the dataset-builder agent)
57
+ source:
58
+ enum: [seed, synthetic, derived]
59
+ description: seed = user-confirmed HITL tuple | synthetic = LLM-generated | derived = distilled from a past trace
60
+ originTraceId:
61
+ type: string
62
+ description: for derived cases — the past trace this case distills from
63
+ version:
64
+ type: integer
65
+ minimum: 0
66
+ description: monotonically-increasing version, bumped on every append
@@ -0,0 +1,114 @@
1
+ # schemas/edd-change-request.schema.yaml
2
+ # ============================================================================
3
+ # F18 — EDD CLOSURE: the evaluator → ai-engineer change-request contract.
4
+ #
5
+ # The evaluator is JUDGE-ONLY (EV-051): it never fixes the subject. To close the
6
+ # Eval-Driven-Development loop it REQUESTS the AI-Engineer (the *build ACTOR from
7
+ # the SPEC stage) to amend the Agent / AgentSpec — wired over the `SendMessage`
8
+ # tool both agents carry. This file is the HUMAN-readable shape; the executable
9
+ # companion is scripts/edd/edd-types.ts (TypeBox) + scripts/edd/change-request.ts
10
+ # (the validators + the bounded loop controller). Kept in lockstep.
11
+ #
12
+ # evaluator --(EddChangeRequest)--> ai-engineer
13
+ # ai-engineer --(ChangeRequestResponse)--> evaluator
14
+ # evaluator re-evaluates → loop until full green OR a bounded STOP.
15
+ # ============================================================================
16
+ $id: mutagent-evaluator/edd-change-request
17
+ title: EDD Change-Request Contract (F18)
18
+
19
+ definitions:
20
+ FailingCaseRef:
21
+ type: object
22
+ description: >
23
+ One failing/uncertain case the evaluator hands the engineer. GROUNDED —
24
+ carries the verbatim critique + ≥1 structured ref {obs,path,value}, the
25
+ SAME machine-checkable evidence the judge already emitted (GA-1). An
26
+ ungrounded ask (refs empty) is a DEFECT — the evaluator never asks for a
27
+ fix it cannot ground.
28
+ required: [caseId, criterionId, critique, refs]
29
+ additionalProperties: false
30
+ properties:
31
+ caseId: { type: string, minLength: 1 }
32
+ criterionId: { type: string, minLength: 1 }
33
+ critique: { type: string, minLength: 1, description: verbatim from the verdict }
34
+ refs:
35
+ type: array
36
+ minItems: 1
37
+ items:
38
+ type: object
39
+ required: [obs, path, value]
40
+ additionalProperties: false
41
+ properties:
42
+ obs: { type: string, description: trace/observation id }
43
+ path: { type: string, description: field path within the observation }
44
+ value: { type: string, description: the EXACT cited string }
45
+
46
+ EddChangeRequest:
47
+ type: object
48
+ description: the evaluator → ai-engineer request (the SendMessage payload).
49
+ required: [requestId, swing, subject, remedyTarget, failingCases, proposedRemedy, status]
50
+ additionalProperties: false
51
+ properties:
52
+ requestId: { type: string, minLength: 1 }
53
+ swing:
54
+ type: integer
55
+ minimum: 1
56
+ description: 1-based EDD swing index (the Nth evaluator→engineer→re-eval cycle)
57
+ subject: { type: string, minLength: 1 }
58
+ remedyTarget:
59
+ enum: [agentspec, impl]
60
+ description: >
61
+ WHERE the engineer should fix — the evaluator PROPOSES, never patches.
62
+ agentspec = the DEFINITION (system_prompt / jobs / sop / criteria); the
63
+ def→impl cascade means the engineer re-runs *build after editing.
64
+ impl = the IMPLEMENTATION scaffold only (a wiring/faithfulness defect
65
+ that does NOT change the spec).
66
+ failingCases:
67
+ type: array
68
+ minItems: 1
69
+ items: { $ref: "#/definitions/FailingCaseRef" }
70
+ proposedRemedy:
71
+ type: string
72
+ minLength: 1
73
+ description: the proposed remedy in NL — a HYPOTHESIS for the engineer, not a mandate
74
+ status:
75
+ const: requested
76
+ description: the evaluator always emits `requested`
77
+
78
+ ChangeRequestResponse:
79
+ type: object
80
+ description: the ai-engineer → evaluator reply after consuming a request.
81
+ required: [requestId, status, note]
82
+ additionalProperties: false
83
+ properties:
84
+ requestId: { type: string, minLength: 1 }
85
+ status:
86
+ enum: [amended, rejected]
87
+ description: >
88
+ amended = the named target was edited (and, for an agentspec target,
89
+ *build was re-run to cascade def→impl) → a re-eval is warranted.
90
+ rejected = the engineer declined WITH a reason (wrong target / not
91
+ reproducible) → NO re-eval of an unchanged subject.
92
+ amendedTarget:
93
+ enum: [agentspec, impl]
94
+ description: which artifact was actually amended (echoes the request target)
95
+ rebuilt:
96
+ type: boolean
97
+ description: for an agentspec amend — was *build re-run to cascade def→impl?
98
+ note:
99
+ type: string
100
+ minLength: 1
101
+ description: human summary of the amendment OR the rejection reason (ALWAYS present)
102
+
103
+ # ── Loop control (the afkloop-legal terminator — scripts/edd/change-request.ts) ─
104
+ # The EDD loop is NEVER infinite. Termination gate, success-first:
105
+ # 1. full-green — varianceStable AND accuracyMet ⇒ DONE
106
+ # 2. max-swings — swing ≥ budget.maxSwings ⇒ STOPPED (+ convergence delta)
107
+ # 3. max-wallclock — elapsedMs ≥ budget.maxWallclockMs ⇒ STOPPED
108
+ # 4. no-improvement-streak — N consecutive swings w/ no improvement ⇒ STOPPED
109
+ # Defaults: maxSwings 6 · maxWallclockMs 30min · noImprovementStreakLimit 2.
110
+ # F19 ordering is preserved in the CONTINUE branch: not-stable ⇒ variance phase,
111
+ # stable ⇒ accuracy phase (variance precedes accuracy, always).
112
+ loopControl:
113
+ phases: [build, variance, accuracy, done, stopped]
114
+ stopReasons: [full-green, max-swings, max-wallclock, no-improvement-streak]
@@ -0,0 +1,74 @@
1
+ # schemas/eval-matrix.schema.yaml
2
+ # ============================================================================
3
+ # The SHAPE a subject eval-matrix must conform to.
4
+ # A subject profile (subjects/<name>/eval-matrix.yaml) is a master checklist:
5
+ # every component (agent / skill-orchestrator-step / star-command / script)
6
+ # graded on a 3-dimension MECE coverage, with a per-criterion checkMethod that
7
+ # determines whether the row runs DETERMINISTICALLY or under the PINNED JUDGE.
8
+ #
9
+ # This is a human-readable shape contract. The executable validator lives in
10
+ # scripts/contracts/eval-matrix.ts (TypeBox), kept in lockstep with this file.
11
+ # ============================================================================
12
+ $id: mutagent-evaluator/eval-matrix
13
+ title: Subject Eval Matrix
14
+ type: object
15
+ required: [subject, version, generatedAt, designPrinciples, components]
16
+ properties:
17
+ subject:
18
+ type: string
19
+ description: synthetic subject name (e.g. sample-agent); NEVER a production dataset name (NDA, design decision #10)
20
+ version:
21
+ type: string
22
+ description: matrix version (e.g. v1); Mode B regenerates/extends as vN
23
+ generatedAt:
24
+ type: string
25
+ description: injected ISO timestamp; masked for byte-identity
26
+ designPrinciples:
27
+ type: array
28
+ items: { type: string }
29
+ description: the load-bearing design principles the matrix encodes
30
+ components:
31
+ type: array
32
+ items:
33
+ type: object
34
+ required: [componentId, componentName, componentType, criteria]
35
+ properties:
36
+ componentId: { type: string }
37
+ componentName: { type: string }
38
+ componentType:
39
+ enum: [agent, skill-orchestrator-step, star-command, script, gate, feature, pipeline-stage]
40
+ description: >-
41
+ drives the color-coded tint; ordered top-bound first (skill -> agents -> commands -> scripts -> gates).
42
+ SF-1 additive: feature | pipeline-stage for a multi-stage generation subject (a CHAIN of stages, §6a).
43
+ criteria:
44
+ type: array
45
+ items:
46
+ type: object
47
+ required: [dimension, statement, checkMethod, passCondition, severity, existingCoverage]
48
+ properties:
49
+ dimension:
50
+ enum: [operation-correctness, data-correctness, operational-deviation]
51
+ description: the 3-dimension MECE coverage (R1 / R2 / R3)
52
+ statement:
53
+ type: string
54
+ description: the conformance assertion for this row
55
+ checkMethod:
56
+ enum: [deterministic-script, typebox-schema, gate, trace-cross-ref, trajectory-diff, llm-judge]
57
+ description: >-
58
+ deterministic-script | typebox-schema | gate -> DETERMINISTIC track (no model)
59
+ trace-cross-ref | trajectory-diff | llm-judge -> PINNED-JUDGE track (model id + temp=0)
60
+ SF-2 additive (DEC-16): llm-judge = a generic content judge (not only the diagnostics-specific
61
+ trace-cross-ref / trajectory-diff). The v2 MinedCriterion carries its own 3-value check_method
62
+ router (deterministic | llm-judge | hybrid, eval-types.ts); the two coexist.
63
+ passCondition:
64
+ type: string
65
+ description: the concrete, binary pass condition
66
+ severity:
67
+ enum: [CRIT, HIGH, MED, LOW]
68
+ description: by VARIANCE IMPACT, not code size; CRIT/HIGH gate the component
69
+ existingCoverage:
70
+ enum: [covered, partial, none]
71
+ description: honest declaration vs the actual test+gate inventory
72
+ evidenceSource:
73
+ type: string
74
+ description: mandatory traceability — a cited intended behavior or observed deviation (no-filler rule)
@@ -0,0 +1,69 @@
1
+ # schemas/flow-graph.schema.yaml — EV-032 information-flow graph (human-readable mirror)
2
+ #
3
+ # The deterministic structure `scripts/flow-graph.ts` produces from one trace.
4
+ # Kept in lockstep with the TypeBox contract in `scripts/contracts/flow-graph.ts`
5
+ # (that file is the SINGLE SOURCE OF TRUTH; this YAML documents the shape for
6
+ # subject authors + reviewers). SUBJECT-AGNOSTIC: nodes are named by the trace's
7
+ # OWN observation names; no subject vocabulary is baked in here.
8
+ title: FlowGraph
9
+ type: object
10
+ additionalProperties: false
11
+ required: [traceId, nodes, edges, unthreadedOutputs]
12
+ properties:
13
+ traceId:
14
+ type: string
15
+ description: The id of the trace this graph was built from.
16
+ nodes:
17
+ type: array
18
+ description: One node per trace observation, viewed as a producer/consumer.
19
+ items:
20
+ type: object
21
+ additionalProperties: false
22
+ required: [id, index, type, name, produces, consumes, isHandoff]
23
+ properties:
24
+ id: { type: string, description: "Stable node id by position (n0, n1, …)." }
25
+ index: { type: integer, minimum: 0 }
26
+ type: { type: string, description: "The observation type (TOOL / GENERATION / EVENT / AGENT / …)." }
27
+ name: { type: string, description: "The observation name (tool/step name) — may be empty." }
28
+ produces:
29
+ type: array
30
+ items: { type: string }
31
+ description: "Top-level output slot keys (primitive payload → the _value sentinel)."
32
+ consumes:
33
+ type: array
34
+ items: { type: string }
35
+ description: "Top-level input slot keys (primitive payload → the _text sentinel)."
36
+ isHandoff:
37
+ type: boolean
38
+ description: "True iff name ∈ the SUPPLIED dispatchToolNames (a sub-agent dispatch, EV-029)."
39
+ edges:
40
+ type: array
41
+ description: >-
42
+ Data-handoff edges. An edge means a producer slot's value string reached a
43
+ LATER consumer's serialized input (deterministic content-overlap, EV-028).
44
+ items:
45
+ type: object
46
+ additionalProperties: false
47
+ required: [from, to, slot, kind]
48
+ properties:
49
+ from: { type: string, description: "Producer node id." }
50
+ to: { type: string, description: "Consumer node id." }
51
+ slot: { type: string, description: "The producer slot whose value threaded." }
52
+ kind:
53
+ type: string
54
+ enum: [threaded, handoff]
55
+ description: "threaded = plain tool-result (EV-028); handoff = sub-agent dispatch context (EV-029)."
56
+ unthreadedOutputs:
57
+ type: array
58
+ description: >-
59
+ Producer slots whose value NEVER reached a downstream consumer — the EV-028
60
+ candidate leaks the context-flow judge then adjudicates (severity is NOT
61
+ decided here).
62
+ items:
63
+ type: object
64
+ additionalProperties: false
65
+ required: [node, name, slot]
66
+ properties:
67
+ node: { type: string }
68
+ name: { type: string }
69
+ slot: { type: string }
@@ -0,0 +1,49 @@
1
+ # schemas/flow-profile.schema.yaml — EV-037 expected-flow profile (human-readable mirror)
2
+ #
3
+ # The agent-shaped expected-flow the context-flow audit (EV-028/029) + the
4
+ # trajectory variance (EV-054) diff the ACTUAL flow-graph against. Carried on the
5
+ # subject profile (`profile-subject.ts` → SubjectProfile.expectedFlow). Kept in
6
+ # lockstep with the TypeBox `ExpectedFlow` in `scripts/contracts/flow-graph.ts`
7
+ # (that file is the SINGLE SOURCE OF TRUTH).
8
+ #
9
+ # SUBJECT-AGNOSTIC: every name here is the subject's OWN tool/step/slot name,
10
+ # supplied via auto-gen (EV-049: the modal observed threadings) or AUTHORED (the
11
+ # canonical path for the semantic fields the trace alone can't carry). NO subject
12
+ # vocabulary is baked into the engine.
13
+ title: ExpectedFlow
14
+ type: object
15
+ additionalProperties: false
16
+ required: [dispatchToolNames, edges, expectedUiSlots]
17
+ properties:
18
+ dispatchToolNames:
19
+ type: array
20
+ items: { type: string, minLength: 1 }
21
+ description: >-
22
+ Which tool/step names are sub-agent DISPATCHES (EV-029). A flow-graph node
23
+ with one of these names produces a context HANDOFF rather than a plain tool
24
+ result. Auto-gen leaves this empty (TODO) — supply it AUTHORED.
25
+ edges:
26
+ type: array
27
+ description: >-
28
+ The producer→consumer threadings the subject SHOULD exhibit (a regression
29
+ baseline). Auto-gen (EV-049) seeds these from the modal observed
30
+ data-handoffs across the trace sample.
31
+ items:
32
+ type: object
33
+ additionalProperties: false
34
+ required: [fromTool, toTool]
35
+ properties:
36
+ fromTool: { type: string, minLength: 1, description: "Producer tool/step name." }
37
+ toTool: { type: string, minLength: 1, description: "Consumer tool/step name." }
38
+ slot:
39
+ type: string
40
+ minLength: 1
41
+ description: "Optional — when present, the diff also requires THIS slot to thread."
42
+ expectedUiSlots:
43
+ type: array
44
+ items: { type: string, minLength: 1 }
45
+ description: >-
46
+ Slots the subject's HTML artifact SHOULD render (EV-039/040, the operator's
47
+ HTML-artifact missing-data case): a value computed but absent from the HTML
48
+ is a missing-data leak. These aren't present in agent traces — supply them
49
+ AUTHORED (auto-gen leaves empty, TODO).
@@ -0,0 +1,40 @@
1
+ # schemas/methodology-review.schema.yaml
2
+ # ============================================================================
3
+ # The SHAPE of the MR (methodology-review) rubric — §1.5 family.
4
+ #
5
+ # This is the SECOND requirement family: FITNESS, not conformance. It does not
6
+ # pass/fail a component; it interrogates the methodology's own decision-tree,
7
+ # workflow structure, and data-flow, and emits ranked recommendations to
8
+ # rearrange / improve the process. MR-1..9 (Tab-4 lens reads these).
9
+ # ============================================================================
10
+ $id: mutagent-evaluator/methodology-review
11
+ title: Subject Methodology-Review Rubric
12
+ type: object
13
+ required: [subject, version, generatedAt, items]
14
+ properties:
15
+ subject: { type: string, description: synthetic subject name (NDA) }
16
+ version: { type: string }
17
+ generatedAt: { type: string, description: injected; masked for byte-identity }
18
+ items:
19
+ type: array
20
+ description: the MR-1..9 rubric items (advisory, NOT pass/fail)
21
+ items:
22
+ type: object
23
+ required: [id, title, reads, how, family]
24
+ properties:
25
+ id:
26
+ type: string
27
+ description: MR-1 .. MR-9
28
+ title: { type: string }
29
+ reads:
30
+ type: string
31
+ description: the inputs this MR item reasons over (e.g. "behavior-tree + run outcomes")
32
+ how:
33
+ type: string
34
+ description: how the judge reasons over the inputs to emit a finding
35
+ family:
36
+ enum: [decision-tree-fitness, data-flow-efficiency, methodology-fitness, sequence-soundness, process-self-feedback, conformance-vs-fitness, signal-selection, confidence-derivation, focus-determination]
37
+ description: which fitness concern this item interrogates
38
+ advisory:
39
+ type: boolean
40
+ description: always true — MR items NEVER gate a run (decision #5 keeps GATE and TREND separate)