@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,213 @@
1
+ /* ============================================================================
2
+ * Mutagent brand — SELF-CONTAINED copy, ALIGNED to the unified design-system.
3
+ *
4
+ * Source of truth: @mutagent/templates/design-system/tokens.css (the ONE canonical
5
+ * style). This file mirrors those tokens + re-skins the evaluator report's own
6
+ * component classes onto them, so all three evaluator HTML renderers
7
+ * (render-report.ts · render-eval-report.ts · build-review-ui.ts) share the
8
+ * unified brand WITHOUT a cross-skill runtime reference (the self-containment
9
+ * rule: copied here, read from the evaluator's own assets/brand/ at runtime).
10
+ *
11
+ * Brand (2026-06-23 design session):
12
+ * · SHARP corners (radius 0) — the UI "sharp-corners brand"
13
+ * · SUBTLE non-black card surfaces (cards lift off the void, never pure black,
14
+ * never "overly purple") — purple is an ACCENT only, never a card fill
15
+ * · TONED status (vibrant, not neon) + MUTED heatmap fills
16
+ * · RESTRAINED cyberpunk — minimal glow, NO heavy gradients (the wordmark
17
+ * gradient is the only one)
18
+ * Fonts: Space Grotesk (display) + IBM Plex Mono (mono) — loaded via the <head>
19
+ * <link> the renderer emits.
20
+ * ========================================================================== */
21
+
22
+ :root {
23
+ /* ── canonical design-system tokens (mirror tokens.css) ── */
24
+ --bg: #0a0a12; /* near-black void (dominant surface) */
25
+ --surf: #14141d; /* CARD — subtle lift, non-black, barely-tinted */
26
+ --surf-2: #1a1a25; /* raised (nested cards, headers) */
27
+ --surf-3: #22222f; /* elevated / hover */
28
+ --border: rgba(255, 255, 255, 0.09);
29
+ --border-strong: rgba(255, 255, 255, 0.16);
30
+
31
+ --fg: #d6dbe6;
32
+ --fg-strong: #eef1f6;
33
+ --muted: #8a8698;
34
+ --dim: #5a5667;
35
+
36
+ --primary: #7E47D7; /* purple — ACCENT only (never a card fill) */
37
+ --primary-soft: #b794f4;
38
+ --cyan: #45b8cc; /* secondary accent, used sparingly */
39
+
40
+ --pass: #43c39a; /* TONED status (vibrant, not neon) */
41
+ --fail: #e06666;
42
+ --warn: #e8a64d;
43
+ /* STATUS COLOR-ACUITY — tints raised ~.08→.16 so pass/fail/indeterminate POP at a
44
+ * glance (still toned, not neon). Paired with a status LEFT-BORDER on verdict
45
+ * cards/rows so the eye catches the outcome instantly. */
46
+ --pass-bg: rgba(67, 195, 154, 0.16);
47
+ --fail-bg: rgba(224, 102, 102, 0.16);
48
+ --warn-bg: rgba(232, 166, 77, 0.16);
49
+
50
+ /* §9.4.5 E7 — RECOMMENDED highlight toned DOWN ~50% (cyan #45b8cc desaturated →
51
+ * #67a0aa; bg alpha .10→.05) so the "★ recommended" treatment reads calm, not glare.
52
+ * Mirrors the shared @mutagent/templates token. */
53
+ --recommend: #67a0aa; /* RECOMMENDED highlight (remedies / picks) — calm cyan */
54
+ --recommend-bg: rgba(103, 160, 170, 0.05);
55
+
56
+ --radius: 0px; /* SHARP corners */
57
+ --font: 'Space Grotesk', system-ui, -apple-system, sans-serif;
58
+ --mono: 'IBM Plex Mono', ui-monospace, monospace;
59
+
60
+ /* ── R7 (§9.4.4) NORMALIZED TYPE SCALE — one scale, applied everywhere ──
61
+ * The single source of font sizing for every evaluator artifact. The FLOOR is
62
+ * --fs-2xs = 11px: raised from 10.5 so even the smallest mono chip is comfortably
63
+ * legible at normal zoom. Every size steps off this scale — NO ad-hoc px in the
64
+ * report components, and NO sub-1em (em/%-relative) shrink anywhere (the `code`
65
+ * 0.88em bug let nested mono dip below floor — now pinned to the absolute token).
66
+ * Map of legacy → token:
67
+ * 8 / 8.5 / 9 / 9.5 → --fs-2xs (11) micro labels · mono chips · code
68
+ * 10 / 10.5 / 11 / 11.5 → --fs-xs (12) small mono · secondary
69
+ * 12 / 12.5 / 13 → --fs-sm (13) table cells · body-small
70
+ * 14 → --fs-md (14) base body
71
+ * 15 / 16 → --fs-lg (16) h3 / section emphasis
72
+ * 18 → --fs-xl (19) large emphasis
73
+ * 22 → --fs-2xl (22) h2 / big-stat values
74
+ */
75
+ --fs-2xs: 11px;
76
+ --fs-xs: 12px;
77
+ --fs-sm: 13px;
78
+ --fs-md: 14px;
79
+ --fs-lg: 16px;
80
+ --fs-xl: 19px;
81
+ --fs-2xl: 22px;
82
+
83
+ /* ── legacy aliases — the renderers reference these names; map onto canonical ── */
84
+ --bg2: #14141d; /* tabs strip — subtle, non-black */
85
+ --bg3: #1a1a25; /* table even-row — subtle */
86
+ --surf-r: var(--surf-2);
87
+ --surf-e: var(--surf-3);
88
+ --surf-h: var(--surf-3);
89
+ --text: var(--fg-strong);
90
+ --bstr: var(--border-strong);
91
+ --p: var(--primary);
92
+ --c: var(--cyan);
93
+ --g: var(--pass);
94
+ --y: var(--warn);
95
+ --r: var(--fail);
96
+ --m: var(--primary-soft); /* inline code — soft purple, not magenta */
97
+ --glow: transparent; /* RESTRAINED — no glow */
98
+ --gglow: transparent;
99
+ --fs: var(--font);
100
+ --fm: var(--mono);
101
+ }
102
+
103
+ /* SHARP everywhere — the global radius reset is the sharp-corners brand. */
104
+ * { box-sizing: border-box; border-radius: var(--radius); }
105
+ body {
106
+ margin: 0;
107
+ font-family: var(--font);
108
+ color: var(--fg);
109
+ background: var(--bg);
110
+ font-size: var(--fs-md);
111
+ line-height: 1.55;
112
+ }
113
+
114
+ /* ── Banner + MUTAGENT wordmark (flat subtle surface; wordmark is the ONLY gradient) ── */
115
+ header.banner {
116
+ background: var(--surf);
117
+ border-bottom: 1px solid var(--border-strong);
118
+ padding: 20px 32px;
119
+ position: relative;
120
+ }
121
+ .brand { display: flex; align-items: baseline; gap: 14px; margin-bottom: 6px; }
122
+ .logo {
123
+ font-family: var(--font);
124
+ font-weight: 700;
125
+ font-size: var(--fs-2xl);
126
+ letter-spacing: 0.18em;
127
+ background: linear-gradient(90deg, var(--primary-soft), var(--cyan));
128
+ -webkit-background-clip: text;
129
+ background-clip: text;
130
+ -webkit-text-fill-color: transparent;
131
+ }
132
+ .product { font-size: var(--fs-md); font-weight: 500; color: var(--muted); letter-spacing: 0.04em; }
133
+ .meta { font-size: var(--fs-xs); font-family: var(--mono); color: var(--muted); letter-spacing: 0.02em; }
134
+ .meta .mk { color: var(--cyan); font-weight: 600; }
135
+ .meta .mv { color: var(--fg-strong); font-weight: 600; }
136
+ .meta .sep { color: var(--dim); margin: 0 6px; }
137
+
138
+ /* ── Tabs (functional; no glow/shadow) ────────────────────────────────────── */
139
+ nav.tabs {
140
+ background: var(--bg);
141
+ border-bottom: 1px solid var(--border);
142
+ padding: 0 12px;
143
+ position: sticky; top: 0; z-index: 100;
144
+ overflow-x: auto; white-space: nowrap;
145
+ }
146
+ nav.tabs button {
147
+ background: none; border: none;
148
+ padding: 10px 12px;
149
+ font-size: var(--fs-xs); font-weight: 500;
150
+ color: var(--muted); cursor: pointer;
151
+ border-bottom: 3px solid transparent;
152
+ transition: all 0.15s; font-family: inherit; letter-spacing: 0.01em;
153
+ }
154
+ nav.tabs button:hover { color: var(--fg-strong); background: var(--surf); }
155
+ nav.tabs button.active { color: var(--primary-soft); border-bottom-color: var(--primary); font-weight: 600; }
156
+ nav.tabs button.internal { color: var(--cyan); }
157
+ nav.tabs button.internal.active { border-bottom-color: var(--cyan); }
158
+
159
+ /* ── Layout + panels ─────────────────────────────────────────────────────── */
160
+ main { max-width: 1200px; margin: 0 auto; padding: 28px 32px 140px 32px; }
161
+ .panel { display: none; }
162
+ .panel.active { display: block; animation: fade 0.2s ease-out; }
163
+ @keyframes fade { from { opacity: 0; transform: translateY(4px); } to { opacity: 1; transform: translateY(0); } }
164
+
165
+ h2 { font-size: var(--fs-2xl); font-weight: 600; margin: 0 0 8px 0; padding-bottom: 10px; border-bottom: 1px solid var(--border-strong); color: var(--fg-strong); }
166
+ .sub { color: var(--muted); font-size: var(--fs-sm); margin-bottom: 24px; }
167
+ /* §9.4.5 E4 — tighter section rhythm (24→18) toward diagnostics density. */
168
+ h3 { font-size: var(--fs-lg); font-weight: 600; margin-top: 18px; margin-bottom: 6px; color: var(--primary-soft); }
169
+ h4 { font-size: var(--fs-sm); font-weight: 600; margin-top: 14px; color: var(--fg-strong); text-transform: uppercase; letter-spacing: 0.04em; font-family: var(--mono); }
170
+ p { line-height: 1.6; color: var(--muted); }
171
+ strong { color: var(--fg-strong); }
172
+
173
+ /* ── Tables (sharp; subtle) ───────────────────────────────────────────────── */
174
+ table { border-collapse: collapse; margin: 12px 0; font-size: var(--fs-sm); width: 100%; border: 1px solid var(--border); }
175
+ th, td { border: 1px solid var(--border); padding: 8px 12px; text-align: left; vertical-align: top; color: var(--muted); }
176
+ th { background: var(--surf-2); font-weight: 600; color: var(--fg-strong); }
177
+ tr:nth-child(even) td { background: var(--surf); }
178
+ code { background: var(--bg); color: var(--primary-soft); padding: 2px 6px; font-size: var(--fs-2xs); font-family: var(--mono); border: 1px solid var(--border); }
179
+
180
+ /* ── Callouts (flat tinted surface + accent border; NO gradient/glow) ─────── */
181
+ .crit { background: var(--fail-bg); border-left: 3px solid var(--fail); padding: 14px 18px; margin: 14px 0; }
182
+ .crit strong { color: var(--fail); }
183
+ .warn { background: var(--warn-bg); border-left: 3px solid var(--warn); padding: 14px 18px; margin: 14px 0; }
184
+ .warn strong { color: var(--warn); }
185
+ .alert { background: var(--pass-bg); border-left: 3px solid var(--pass); padding: 14px 18px; margin: 14px 0; }
186
+ .alert strong { color: var(--pass); }
187
+ .internal-banner { background: var(--recommend-bg); border: 1px dashed var(--cyan); padding: 10px 16px; margin: 0 0 18px 0; font-family: var(--mono); font-size: var(--fs-xs); color: var(--cyan); letter-spacing: 0.03em; }
188
+
189
+ /* ── RECOMMENDED highlight (remedies / recommended picks) ─────────────────── */
190
+ .recommend { border-left: 3px solid var(--recommend); background: var(--recommend-bg); padding: 7px 11px; }
191
+ .recommend .tag { font-family: var(--mono); font-size: var(--fs-2xs); font-weight: 700; color: var(--recommend); }
192
+
193
+ /* ── Badges + pills (sharp; toned) ────────────────────────────────────────── */
194
+ .badge { display: inline-block; padding: 2px 6px; font-size: var(--fs-xs); font-weight: 600; letter-spacing: 0.04em; font-family: var(--mono); margin-right: 4px; }
195
+ .b-crit { background: var(--fail-bg); color: var(--fail); border: 1px solid var(--fail); }
196
+ .b-high { background: var(--warn-bg); color: var(--warn); border: 1px solid var(--warn); }
197
+ .b-med { background: rgba(69, 184, 204, 0.10); color: var(--cyan); border: 1px solid var(--cyan); }
198
+ .b-low { background: var(--surf-3); color: var(--muted); border: 1px solid var(--border); }
199
+ .b-pass { background: var(--pass-bg); color: var(--pass); border: 1px solid var(--pass); }
200
+ .b-fail { background: var(--fail-bg); color: var(--fail); border: 1px solid var(--fail); }
201
+ .b-skip { background: var(--surf-3); color: var(--muted); border: 1px solid var(--border); }
202
+
203
+ /* ── Big-stat tiles (subtle non-black cards) ──────────────────────────────── */
204
+ .big-stat { display: flex; gap: 18px; flex-wrap: wrap; margin: 16px 0; }
205
+ .big-stat .s { background: var(--surf-2); border: 1px solid var(--border); padding: 12px 16px; min-width: 96px; }
206
+ .big-stat .v { font-size: var(--fs-2xl); font-weight: 700; font-family: var(--mono); }
207
+ .big-stat .l { font-size: var(--fs-xs); color: var(--dim); text-transform: uppercase; letter-spacing: 0.06em; margin-top: 2px; }
208
+
209
+ /* ── Verdict card (subtle; toned accent border; NO glow) ──────────────────── */
210
+ .verdict { background: var(--surf-2); border: 1px solid var(--border-strong); border-left-width: 5px; padding: 18px 20px; margin: 16px 0; }
211
+ .verdict.pass { border-color: var(--pass); border-left-color: var(--pass); background: var(--pass-bg); }
212
+ .verdict.fail { border-color: var(--fail); border-left-color: var(--fail); background: var(--fail-bg); }
213
+ .verdict.skip { border-color: var(--warn); border-left-color: var(--warn); background: var(--warn-bg); }
@@ -0,0 +1,9 @@
1
+ <!-- Mutagent banner + MUTAGENT wordmark — SELF-CONTAINED copy, extracted from
2
+ the diagnostics report.html.tpl header treatment so the two products are
3
+ visually consistent. The HEADER title + meta are stamped by render-report.ts.
4
+ The renderer reads this partial from its own package; it never references
5
+ the diagnostics package at runtime. -->
6
+ <header class="banner">
7
+ <div class="brand"><div class="logo">MUTAGENT</div><div class="product">{{HEADER_TITLE}}</div></div>
8
+ <div class="meta">{{HEADER_META}}</div>
9
+ </header>
@@ -0,0 +1,85 @@
1
+ # Context-Flow Lens — generic pinned-judge prompt (EV-028 / EV-029)
2
+
3
+ > **Track:** Data-Leak Tab — the **context-flow** dimension (agent context-flow,
4
+ > not data-pipeline). Scores over the deterministic **flow-graph** (EV-032) +
5
+ > **expected-flow** (EV-037), never the raw trace.
6
+ > **Pinning (R10):** PINNED model id + **temperature = 0**, recorded. **Mask the
7
+ > output.** Two audits on one flow-graph ⇒ byte-identical verdict.
8
+ > **Parameterized by the loaded subject profile** — flow/slot/tool names come
9
+ > from the flow-graph + expected-flow, NOT from any subject constant in the lens.
10
+
11
+ ## Purpose
12
+
13
+ Judge an AGENT's context-flow for two leak families — the same `LEAK_SCHEMA`
14
+ SHAPE the data-pipeline dimensions use (`locus` C2C/UI · `cls` A/B ·
15
+ `formalStructure`), new producers:
16
+
17
+ - **EV-028 — tool-result threading.** A tool result produced at step N that is
18
+ NEVER threaded into a later consumer's context (an `unthreadedOutput` in the
19
+ flow-graph). Is the dropped result one the downstream step NEEDED? → leak
20
+ (`locus: C2C`, `cls: B` producer-not-threaded). Or was it legitimately unused
21
+ (a side-effect / log) → NOT a leak.
22
+ - **EV-029 — sub-agent handoff completeness.** A `lossyHandoff` (an expected-flow
23
+ edge ABSENT from the actual graph): the dispatch brief did not carry the
24
+ context the expected-flow says the child sub-agent needs. A child that runs
25
+ without the context it required → leak (`locus: C2C`, `cls: B`). The
26
+ expected-flow is the source of truth for "what the child NEEDED".
27
+
28
+ > This lens generalizes the v1 data-pipeline SHAPE to agent context-flow — it
29
+ > does NOT rebuild the engine. `flow-graph.ts` makes producers/consumers/edges
30
+ > EXPLICIT; `expected-flow` supplies the diff target; THIS lens adjudicates.
31
+
32
+ ## Inputs (supplied by the harness, deterministic)
33
+
34
+ - `flowGraph` — the EV-032 graph for the trace under audit (`nodes` with
35
+ produces/consumes slots · `edges` threaded handoffs · `unthreadedOutputs`).
36
+ - `expectedFlow` — the EV-037 spec (`dispatchToolNames` · expected `edges` ·
37
+ `expectedUiSlots`).
38
+ - `candidates` — the deterministic `contextFlowCandidates` bundle
39
+ (`unthreadedOutputs` = EV-028 candidates · `lossyHandoffs` = EV-029 candidates).
40
+ These are CANDIDATES — the lens decides which are TRUE leaks + their severity.
41
+
42
+ ## Method
43
+
44
+ 1. **Threading (EV-028).** For EACH `candidates.unthreadedOutputs[]`
45
+ `{node, name, slot}`: read the producing observation's output slot + the
46
+ downstream steps. Decide: was this slot's value REQUIRED by a later step that
47
+ silently re-derived it, guessed, or proceeded without it? → leak. Or a
48
+ legitimate side-effect with no consumer → not a leak. Ground the verdict in
49
+ the specific producer/consumer node names — never speculate.
50
+ 2. **Handoff completeness (EV-029).** For EACH `candidates.lossyHandoffs[]`
51
+ `{fromTool, toTool, slot?}`: confirm the expected producer→consumer threading
52
+ is genuinely absent in `flowGraph.edges` (not merely renamed). A dispatch that
53
+ handed a child an INCOMPLETE brief (the expected context never threaded) →
54
+ leak. Cite the dispatch node + the missing slot.
55
+ 3. **Severity.** HIGH when the dropped/incomplete context changes the agent's
56
+ action (a wrong send, a hallucinated value, a child that acts on stale
57
+ context). MED/LOW when cosmetic or recoverable. `formalStructure`: `exists`
58
+ when a schema/contract for the handoff is defined but unenforced; `partial`
59
+ when fields are optional; `none` when no handoff contract exists.
60
+ 4. **No candidates → no leaks.** A fully-threaded, expectation-meeting graph
61
+ returns an empty `leaks` array (the audit is allowed to find nothing).
62
+
63
+ ## Output contract (masked, schema-validated → `LEAK_SCHEMA`, dimension="context-flow")
64
+
65
+ Emit ONE `LEAK_SCHEMA` leak per CONFIRMED context-flow leak:
66
+
67
+ ```yaml
68
+ dimension: context-flow
69
+ summary: <one-line verdict on the headline context-flow leaks>
70
+ leaks:
71
+ - id: CF-1 # CF-n
72
+ title: <unthreaded result | lossy handoff — named>
73
+ locus: C2C # context lost between steps/components
74
+ cls: B # producer not run / not threaded
75
+ producer: <the node name that should have threaded it>
76
+ whyNotProduced: <dropped result | incomplete dispatch brief>
77
+ formalStructure: none|partial|exists
78
+ severity: HIGH|MED|LOW
79
+ whatsLost: <the slot/context + the downstream step that needed it>
80
+ evidence: <flow-graph node ids + slot, e.g. "n3.draft unthreaded; n7 sendMessage proceeded without it">
81
+ ```
82
+
83
+ **Never fabricate.** If a candidate turns out to be legitimately unused
84
+ (side-effect, log, terminal output), DO NOT emit a leak for it — say so in
85
+ `summary`. The flow-graph is the ground truth; cite node ids + slot names from it.
@@ -0,0 +1,47 @@
1
+ # Data Lens — generic pinned-judge prompt
2
+
3
+ > **Track:** Tab-1 judge rows (checkMethod `trace-cross-ref` on data rows).
4
+ > **Pinning (R10):** PINNED model id + **temperature = 0**, recorded. **Mask the
5
+ > output.** Two audits on one bundle ⇒ byte-identical verdict.
6
+ > **Parameterized by the loaded subject profile** — no subject-specific logic.
7
+
8
+ ## Purpose
9
+
10
+ Judges **data correctness** rows that cannot be settled by schema-presence alone:
11
+ faithfulness of a produced artifact to its evidence source, threading of a
12
+ producer's output to its consumer, and the C2C/UI loci where data is produced
13
+ but not drawn. (Schema-shape rows are handled deterministically; this lens is
14
+ only for the `trace-cross-ref` rows the deterministic engine defers.)
15
+
16
+ ## Inputs (supplied by the harness)
17
+
18
+ - `criterion` — the single data criterion under judgment (statement +
19
+ passCondition + severity).
20
+ - `runBundle` — the produced artifacts (runMeta / render-input / evidence /
21
+ traces-metadata) to cross-reference.
22
+
23
+ ## Method
24
+
25
+ 1. Identify the **producer** artifact and the **consumer** surface named in the
26
+ criterion's `passCondition`.
27
+ 2. Cross-reference: does the value the producer emitted reach the consumer
28
+ **unaltered and non-empty**? Spot-check 2 concrete values
29
+ (producer-side vs consumer-side) and compare verbatim.
30
+ 3. A value that is silently dropped, altered, or re-derived ad hoc (instead of
31
+ threaded from the script-of-record) **FAILS**. An identical, faithfully
32
+ threaded value **PASSES**.
33
+
34
+ ## Output contract (masked, schema-validated)
35
+
36
+ ```yaml
37
+ criterion: <statement>
38
+ producer: <artifact/field>
39
+ consumer: <surface/field>
40
+ result: pass | fail
41
+ evidence: <the two compared values + their file:locations>
42
+ rationale: <faithful & threaded → pass; dropped/altered/re-derived → fail>
43
+ ```
44
+
45
+ **Never fabricate.** If the producer or consumer artifact is absent from the
46
+ bundle, return `result: fail` (a missing producer is a leak, not a pass) with an
47
+ evidence note naming the absent artifact.
@@ -0,0 +1,48 @@
1
+ # Decision Lens — generic pinned-judge prompt
2
+
3
+ > **Track:** Tab-1 judge rows (checkMethod `trajectory-diff` on decision nodes).
4
+ > **Pinning (decision #10 / R10):** run at a PINNED model id + **temperature = 0**.
5
+ > Record the resolved model id + temperature into the scorecard. **Mask the
6
+ > output** (runId / timestamps / abs-paths) so two audits on one bundle produce a
7
+ > byte-identical verdict.
8
+ > **Parameterized by the loaded subject profile** — this lens ships ZERO subject-
9
+ > specific logic; the behavior-tree supplies the expected decisions.
10
+
11
+ ## Inputs (supplied by the harness)
12
+
13
+ - `behaviorTree` — the subject's `behavior-tree.yaml` (the golden behavioral spec).
14
+ - `runTrajectory` — the run-bundle's transcript / runMeta / evidence.
15
+ - `node` — the single decision node under judgment (one row per node-scenario).
16
+
17
+ ## The generic comparison (specific ↔ generic)
18
+
19
+ At the given behavior-tree node, determine **which scenario the agent was
20
+ actually in** (match the run's tier-0 signals + brief state against each
21
+ scenario's `when`). Then compare:
22
+
23
+ 1. **expected-scenario vs observed-scenario** — did the agent correctly identify
24
+ the situation it was in?
25
+ 2. **expected-decision vs observed-decision** — given the scenario it was
26
+ actually in, did the agent make the decision the methodology expected
27
+ (`expectedDecision`) and take the expected fork (`expectedFork`)?
28
+
29
+ A decision that reaches the goal via an out-of-order-but-valid path **PASSES**
30
+ (trajectory judging rewards goal-reaching, not rote path-matching). A decision
31
+ that takes a fork the scenario did not warrant **FAILS**.
32
+
33
+ ## Output contract (masked, schema-validated)
34
+
35
+ ```yaml
36
+ nodeId: <string>
37
+ observedScenario: <scenarioId | "unmatched">
38
+ expectedDecision: <verbatim from the node>
39
+ observedDecision: <what the agent actually did, quoted from the transcript>
40
+ result: pass | fail
41
+ evidence: <transcript quote / runMeta field proving the observed decision>
42
+ rationale: <why pass/fail — cite the scenario's rationale>
43
+ ```
44
+
45
+ **Never fabricate a verdict.** If the transcript does not contain enough to
46
+ identify the observed decision, return `result: fail` with
47
+ `observedScenario: unmatched` and an evidence note — an unobservable decision is
48
+ a determinism defect, not a pass.
@@ -0,0 +1,53 @@
1
+ # Methodology-Critic Lens — Tab-4 (FITNESS, not conformance)
2
+
3
+ > **Track:** Tab-4 — the §1.5 family. **Advisory, NOT pass/fail** (decision #5
4
+ > keeps GATE and TREND/fitness separate). A methodology can score 100%
5
+ > conformance (Tab-1) and still be the wrong/inefficient choice; this lens
6
+ > answers that second question independently.
7
+ > **Pinning (R10):** PINNED model id + **temperature = 0**, recorded. **Mask the
8
+ > output.**
9
+ > **Parameterized by the loaded subject profile** — the subject's behavior-tree +
10
+ > MR rubric drive the critique; no subject-specific logic in the lens.
11
+
12
+ ## Inputs (supplied by the harness / methodology-review.ts)
13
+
14
+ - `behaviorTree` — the subject's decision-tree.
15
+ - `methodologyRubric` — the subject's `methodology-review.yaml` (MR-1..9).
16
+ - `runTrajectory` — the run's trajectory + findings + data-pipeline trace.
17
+
18
+ ## The rubric (run each item; emit a finding, ranked)
19
+
20
+ | MR | Concern | What to interrogate |
21
+ |----|---------|---------------------|
22
+ | MR-1 | Decision-tree fitness | Does each fork earn its place? Flag **dead / rarely-useful / mis-placed** forks vs what the run needed. |
23
+ | MR-2 | Data-flow efficiency | Redundant/recomputed transforms; stages that could collapse/parallelize; artifacts produced-and-never-consumed. |
24
+ | MR-3 | Methodology fitness given findings | Was depth/breadth (deep-read tier · analyzer count · sampling) over- or under-scaled for what the findings turned out to be? |
25
+ | MR-4 | Sequence soundness | Reactive one-at-a-time crash patching, re-dispatch loops, redo-after-failure = the order/contract is wrong, not just the code. |
26
+ | MR-5 | Process self-feedback | Concrete, **impact-ranked** proposals: collapse a stage, drop a fork, re-order, pin a choice. |
27
+ | MR-6 | Followed ≠ Right | Explicitly separate conformance (Tab-1) from fitness (here). |
28
+ | MR-7 | Signal/failure-mode selection | Was the primary signal grounded in the RIGHT evidence tier (deep-read-evidenced WHAT, not a frequency artifact)? Highest-leverage. |
29
+ | MR-8 | Confidence derivation | Does the confidence number FOLLOW from the LLM-trace evidence + sample representativeness? Catch asserted-not-earned confidence on imbalanced samples. |
30
+ | MR-9 | Focus determination → search-shaping | Expected-focus vs observed-focus; a wrong/early focus mis-steers every downstream trace selection. |
31
+
32
+ ## The generic engine (MR-7/8/9 generalized)
33
+
34
+ At every behavior-tree node, compare **expected-decision vs observed-decision**
35
+ and **expected-scenario vs observed-scenario**. Diagnostics' signal-selection /
36
+ confidence / focus are the concrete instances; for ANY audited agent, judge its
37
+ sub-decisions the same way: *given the scenario it was actually in, did the agent
38
+ make the decision the methodology expected?*
39
+
40
+ ## Output contract (masked)
41
+
42
+ ```yaml
43
+ findings:
44
+ - mr: MR-7
45
+ verdict: <fit | mis-fit | inefficient>
46
+ observation: <what the run actually did at this methodology decision>
47
+ recommendation: <concrete rearrange/improve proposal>
48
+ impactRank: <1=highest> # ranked self-feedback (MR-5)
49
+ advisory: true # NEVER gates the run
50
+ ```
51
+
52
+ This lens **never** emits a pass/fail that feeds the GATE. It is process
53
+ self-feedback only.
@@ -0,0 +1,44 @@
1
+ # Trajectory Lens — generic pinned-judge prompt
2
+
3
+ > **Track:** Tab-1 judge rows (checkMethod `trajectory-diff` on operational-
4
+ > deviation rows — R3).
5
+ > **Pinning (R10):** PINNED model id + **temperature = 0**, recorded. **Mask the
6
+ > output.** Two audits on one bundle ⇒ byte-identical verdict.
7
+ > **Parameterized by the loaded subject profile** — no subject-specific logic.
8
+
9
+ ## Purpose
10
+
11
+ Judges **operational deviation** (expected-vs-observed trajectory): which input →
12
+ which path → which fork at known decision points. This is the R3/R9 family — the
13
+ judge is the only thing in the loop for these rows, reading the transcript
14
+ against the behavior-tree.
15
+
16
+ ## Inputs (supplied by the harness)
17
+
18
+ - `behaviorTree` — the golden state-transition spec.
19
+ - `runTrajectory` — the transcript + runMeta stamps.
20
+ - `criterion` — the operational-deviation row under judgment.
21
+
22
+ ## Method
23
+
24
+ 1. Reconstruct the **observed path** through the behavior-tree from the
25
+ transcript (node → fork → node …).
26
+ 2. Compare against the **expected path** for the scenario the run was in.
27
+ 3. **Out-of-order tool sequences that still reach the goal PASS** — trajectory
28
+ judging is about goal-reaching and decision-point correctness, not literal
29
+ ordering. Skipping a *mandatory* step, taking an unwarranted fork, or a
30
+ reactive re-dispatch loop (the same failure patched one-at-a-time) **FAILS**.
31
+
32
+ ## Output contract (masked, schema-validated)
33
+
34
+ ```yaml
35
+ criterion: <statement>
36
+ observedPath: [<nodeId>, <fork>, ...]
37
+ expectedPath: [<nodeId>, <fork>, ...]
38
+ result: pass | fail
39
+ deviation: <the first divergence point, or "none">
40
+ evidence: <transcript quotes proving the observed path>
41
+ rationale: <goal reached via valid path → pass; mandatory-skip / unwarranted-fork → fail>
42
+ ```
43
+
44
+ **Never fabricate.** An unobservable trajectory is a determinism defect → `fail`.
@@ -0,0 +1,83 @@
1
+ # build-review-interface — a browser annotation UI to collect human labels
2
+
3
+ > **Source:** absorbed from `mutagent-system/.memory/features/evals-skills-source/skills/build-review-interface/SKILL.md`.
4
+ > **Loaded by:** `*review` (EV-045), rendered by `scripts/build-review-ui.ts`. Load on demand.
5
+ > **Sibling refs:** `error-analysis.md` (what to look for) · `validate-evaluator.md` (the labels feed TPR/TNR).
6
+
7
+ Build an HTML page that loads traces from a data source, shows ONE trace at a time with Pass/Fail
8
+ buttons, a notes field, and Next/Previous navigation, and persists labels to a local file. The
9
+ human labels it collects are the ground truth `*validate` calibrates the judge against
10
+ (`HumanLabel`, `scripts/contracts/validation.ts`).
11
+
12
+ ## How this maps onto the evaluator (the Hybrid, EV-045)
13
+
14
+ | Piece | Type | Who |
15
+ |-------|------|-----|
16
+ | **Render the annotation HTML + labels persistence** | Code-only (deterministic template, like `render-report.ts`) | `scripts/build-review-ui.ts` |
17
+ | **A human labels traces in the browser** | HITL gate | a domain expert |
18
+
19
+ **Autonomy caveat (afkloop):** in the autonomous loop NO human labels in-browser. The UI is BUILT +
20
+ deterministically smoke-tested (DOM structure asserted) and surfaced as an artifact; `*validate`
21
+ proceeds on whatever labels exist and marks criteria with < ~60 labels `unvalidated` (bias-corrected,
22
+ never blocking on a human — see `validate-evaluator.md`).
23
+
24
+ ## Data display (render in the most human-readable form for the domain)
25
+ - **Native format**: emails look like emails, markdown rendered, code highlighted, JSON
26
+ pretty-printed + collapsible, tables as tables, URLs clickable.
27
+ - **Collapse repetitive elements** (a shared system prompt → a `<details>` toggle).
28
+ - **Extract + surface key metadata** (subject id, channel, session id) as a prominent header/badge.
29
+ - **Color-code by role/status** (left-border colors for user / assistant / tool / system).
30
+ - **Group related elements** (a tool call + its response visually linked).
31
+ - **Highlight what matters** (bold prices/dates/names; hierarchy via size + spacing).
32
+ - **Show the full trace** — all intermediate steps accessible, collapsed by default.
33
+ - **Sanitize rendered content** — strip raw HTML from LLM outputs before rendering; disable images
34
+ in rendered markdown (tracking-pixel risk).
35
+
36
+ ## Feedback collection (trace-level, not span-level)
37
+ - Binary **Pass / Fail** buttons as the primary action (visually distinct: color + size).
38
+ - Free-text **notes** field.
39
+ - **Defer** button for uncertain cases.
40
+ - **Auto-save on every action** — labels persist without an explicit save.
41
+ - (Later, once failure categories exist, predefined failure-mode tags can be added as checkboxes —
42
+ NOT in the initial build.)
43
+
44
+ ## Navigation & status
45
+ Next/Previous (buttons + arrow keys) · trace counter ("12 of 87 remaining") · jump-to-id · labeled
46
+ vs unlabeled counts.
47
+
48
+ ## Keyboard shortcuts
49
+ ```
50
+ Arrow keys = Navigate 1 = Pass 2 = Fail
51
+ D = Defer U = Undo Cmd+S = Save Cmd+Enter = Save and next
52
+ ```
53
+
54
+ ## Selecting traces to load
55
+ The app accepts traces from any source; keep sampling OUTSIDE the app in `scripts/sample-traces.ts`
56
+ (start with the balanced ✓/✗ mix). The app is a pure renderer + label collector.
57
+
58
+ ## Testing
59
+ After building, verify with Playwright (the human-run path):
60
+ - **Visual review** — screenshots with representative data: visual hierarchy clear? all data in
61
+ native format (no raw JSON blobs / unrendered markdown)? professional + clean? responsive?
62
+ - **Functional test** — load app → click Pass (label saved) → click Fail + note (both saved) →
63
+ Defer (recorded) → navigate (buttons + keyboard) → counter updates → reload → labels persist →
64
+ expand collapsed sections → every keyboard shortcut fires its action.
65
+
66
+ In this skill the **deterministic DOM-structure smoke test** (`tests/build-review-ui.test.ts`)
67
+ asserts the controls + handlers + persistence shape exist without a browser dep, so the gate stays
68
+ austere; the Playwright workflow above is the human-run visual/functional verification.
69
+
70
+ ## Design checklist
71
+ - [ ] Same layout, controls, terminology on every trace
72
+ - [ ] Pass/Fail buttons visually distinct
73
+ - [ ] Keyboard shortcuts work for all primary actions
74
+ - [ ] Full trace accessible even when sections are collapsed
75
+ - [ ] Labels persist automatically (no explicit save)
76
+ - [ ] Trace-level annotation as the default
77
+ - [ ] All data rendered in its native format
78
+
79
+ ## Anti-patterns
80
+ - **Span-level annotation by default** — judge the whole trace.
81
+ - **Explicit-save-only** — auto-save or labels get lost.
82
+ - **Raw unrendered data** (JSON blobs, unescaped LLM HTML) — render native + sanitize.
83
+ - **Sampling logic inside the app** — keep it in `sample-traces.ts` (separable, testable).