@eir-labs/coltrane 0.4.0

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 (279) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +85 -0
  3. package/agents/anticipation-mapper.json +34 -0
  4. package/agents/claim-amender.json +34 -0
  5. package/agents/claim-architect.json +34 -0
  6. package/agents/claim-rewriter.json +32 -0
  7. package/agents/delivery-finalizer.json +40 -0
  8. package/agents/diamond-cutter.json +33 -0
  9. package/agents/disclosure-analyst.json +26 -0
  10. package/agents/domain-explorer.json +37 -0
  11. package/agents/e2e-runner.json +34 -0
  12. package/agents/e2e-suite-judge.json +26 -0
  13. package/agents/event-clusterer.json +29 -0
  14. package/agents/novelty-searcher.json +40 -0
  15. package/agents/patent-browser-scout.json +49 -0
  16. package/agents/patent-examiner.json +36 -0
  17. package/agents/phase_agents/claim-rewriter.md +44 -0
  18. package/agents/phase_agents/delivery-finalizer.md +30 -0
  19. package/agents/phase_agents/diamond-cutter.md +47 -0
  20. package/agents/phase_agents/domain-explorer.md +27 -0
  21. package/agents/phase_agents/novelty-searcher.md +50 -0
  22. package/agents/phase_agents/problem-definer.md +32 -0
  23. package/agents/phase_agents/solution-developer.md +26 -0
  24. package/agents/phase_agents/verdict-judger.md +70 -0
  25. package/agents/players/audience-modeler.md +40 -0
  26. package/agents/players/chain-audit-keeper.md +41 -0
  27. package/agents/players/illumination-reviewer.md +42 -0
  28. package/agents/players/methodology-cadence-keeper.md +42 -0
  29. package/agents/players/substrate-edge-keeper.md +45 -0
  30. package/agents/prior-art-scout.json +45 -0
  31. package/agents/problem-definer.json +35 -0
  32. package/agents/seeds/steve_seed_a.json +12 -0
  33. package/agents/seeds/steve_seed_b.json +12 -0
  34. package/agents/seeds/steve_seed_c.json +12 -0
  35. package/agents/seeds/steve_seed_d.json +12 -0
  36. package/agents/sensor.json +22 -0
  37. package/agents/solution-developer.json +35 -0
  38. package/agents/source-walker.json +38 -0
  39. package/agents/spec-drafter.json +31 -0
  40. package/agents/sub_thread_soft_judge.json +26 -0
  41. package/agents/sub_thread_trace_sensor.json +22 -0
  42. package/agents/summarizer.json +25 -0
  43. package/agents/synthesis-writer.json +29 -0
  44. package/agents/triage-judge.json +39 -0
  45. package/agents/user_flow_judge.json +26 -0
  46. package/agents/user_flow_sensor.json +22 -0
  47. package/agents/verdict-judger.json +39 -0
  48. package/core_types/artifact.json +17 -0
  49. package/core_types/interpretation.json +16 -0
  50. package/core_types/judgment.json +16 -0
  51. package/core_types/plan.json +16 -0
  52. package/core_types/signal.json +16 -0
  53. package/core_types/verdict.json +27 -0
  54. package/dist/src/access_grant.d.ts +46 -0
  55. package/dist/src/access_grant.js +76 -0
  56. package/dist/src/access_grant.js.map +1 -0
  57. package/dist/src/acoustics.d.ts +9 -0
  58. package/dist/src/acoustics.js +65 -0
  59. package/dist/src/acoustics.js.map +1 -0
  60. package/dist/src/agent_profile.d.ts +36 -0
  61. package/dist/src/agent_profile.js +57 -0
  62. package/dist/src/agent_profile.js.map +1 -0
  63. package/dist/src/bifrost_invoker.d.ts +33 -0
  64. package/dist/src/bifrost_invoker.js +85 -0
  65. package/dist/src/bifrost_invoker.js.map +1 -0
  66. package/dist/src/canonical_core_types.d.ts +2 -0
  67. package/dist/src/canonical_core_types.js +111 -0
  68. package/dist/src/canonical_core_types.js.map +1 -0
  69. package/dist/src/canonical_form.d.ts +55 -0
  70. package/dist/src/canonical_form.js +93 -0
  71. package/dist/src/canonical_form.js.map +1 -0
  72. package/dist/src/charter.d.ts +37 -0
  73. package/dist/src/charter.js +86 -0
  74. package/dist/src/charter.js.map +1 -0
  75. package/dist/src/circle_of_fifths.d.ts +27 -0
  76. package/dist/src/circle_of_fifths.js +78 -0
  77. package/dist/src/circle_of_fifths.js.map +1 -0
  78. package/dist/src/claude_invoker.d.ts +102 -0
  79. package/dist/src/claude_invoker.js +760 -0
  80. package/dist/src/claude_invoker.js.map +1 -0
  81. package/dist/src/coltrane_profile.d.ts +87 -0
  82. package/dist/src/coltrane_profile.js +132 -0
  83. package/dist/src/coltrane_profile.js.map +1 -0
  84. package/dist/src/composition.d.ts +57 -0
  85. package/dist/src/composition.js +447 -0
  86. package/dist/src/composition.js.map +1 -0
  87. package/dist/src/core_types.d.ts +6 -0
  88. package/dist/src/core_types.js +25 -0
  89. package/dist/src/core_types.js.map +1 -0
  90. package/dist/src/document_factory.d.ts +89 -0
  91. package/dist/src/document_factory.js +176 -0
  92. package/dist/src/document_factory.js.map +1 -0
  93. package/dist/src/genome_schema.d.ts +512 -0
  94. package/dist/src/genome_schema.js +168 -0
  95. package/dist/src/genome_schema.js.map +1 -0
  96. package/dist/src/genome_writer.d.ts +67 -0
  97. package/dist/src/genome_writer.js +179 -0
  98. package/dist/src/genome_writer.js.map +1 -0
  99. package/dist/src/gig_song.d.ts +29 -0
  100. package/dist/src/gig_song.js +56 -0
  101. package/dist/src/gig_song.js.map +1 -0
  102. package/dist/src/gig_tracker.d.ts +54 -0
  103. package/dist/src/gig_tracker.js +109 -0
  104. package/dist/src/gig_tracker.js.map +1 -0
  105. package/dist/src/harmonic_validation.d.ts +11 -0
  106. package/dist/src/harmonic_validation.js +35 -0
  107. package/dist/src/harmonic_validation.js.map +1 -0
  108. package/dist/src/hooks.d.ts +27 -0
  109. package/dist/src/hooks.js +2 -0
  110. package/dist/src/hooks.js.map +1 -0
  111. package/dist/src/index.d.ts +36 -0
  112. package/dist/src/index.js +37 -0
  113. package/dist/src/index.js.map +1 -0
  114. package/dist/src/jsong.d.ts +47 -0
  115. package/dist/src/jsong.js +130 -0
  116. package/dist/src/jsong.js.map +1 -0
  117. package/dist/src/judges/user_flow_judge.d.ts +89 -0
  118. package/dist/src/judges/user_flow_judge.js +200 -0
  119. package/dist/src/judges/user_flow_judge.js.map +1 -0
  120. package/dist/src/learner.d.ts +37 -0
  121. package/dist/src/learner.js +30 -0
  122. package/dist/src/learner.js.map +1 -0
  123. package/dist/src/ledger.d.ts +225 -0
  124. package/dist/src/ledger.js +306 -0
  125. package/dist/src/ledger.js.map +1 -0
  126. package/dist/src/loader.d.ts +87 -0
  127. package/dist/src/loader.js +504 -0
  128. package/dist/src/loader.js.map +1 -0
  129. package/dist/src/mcp.d.ts +23 -0
  130. package/dist/src/mcp.js +125 -0
  131. package/dist/src/mcp.js.map +1 -0
  132. package/dist/src/modulation_path.d.ts +42 -0
  133. package/dist/src/modulation_path.js +60 -0
  134. package/dist/src/modulation_path.js.map +1 -0
  135. package/dist/src/output_validation.d.ts +19 -0
  136. package/dist/src/output_validation.js +51 -0
  137. package/dist/src/output_validation.js.map +1 -0
  138. package/dist/src/outputs.d.ts +125 -0
  139. package/dist/src/outputs.js +452 -0
  140. package/dist/src/outputs.js.map +1 -0
  141. package/dist/src/overtones.d.ts +42 -0
  142. package/dist/src/overtones.js +98 -0
  143. package/dist/src/overtones.js.map +1 -0
  144. package/dist/src/player_to_claude_code.d.ts +17 -0
  145. package/dist/src/player_to_claude_code.js +141 -0
  146. package/dist/src/player_to_claude_code.js.map +1 -0
  147. package/dist/src/playwright_cage.d.ts +28 -0
  148. package/dist/src/playwright_cage.js +47 -0
  149. package/dist/src/playwright_cage.js.map +1 -0
  150. package/dist/src/polyphony.d.ts +46 -0
  151. package/dist/src/polyphony.js +91 -0
  152. package/dist/src/polyphony.js.map +1 -0
  153. package/dist/src/portfolio.d.ts +52 -0
  154. package/dist/src/portfolio.js +186 -0
  155. package/dist/src/portfolio.js.map +1 -0
  156. package/dist/src/pricing.d.ts +23 -0
  157. package/dist/src/pricing.js +16 -0
  158. package/dist/src/pricing.js.map +1 -0
  159. package/dist/src/registry.d.ts +46 -0
  160. package/dist/src/registry.js +199 -0
  161. package/dist/src/registry.js.map +1 -0
  162. package/dist/src/runtime.d.ts +304 -0
  163. package/dist/src/runtime.js +1099 -0
  164. package/dist/src/runtime.js.map +1 -0
  165. package/dist/src/server.d.ts +88 -0
  166. package/dist/src/server.js +1692 -0
  167. package/dist/src/server.js.map +1 -0
  168. package/dist/src/server_entry.d.ts +2 -0
  169. package/dist/src/server_entry.js +40 -0
  170. package/dist/src/server_entry.js.map +1 -0
  171. package/dist/src/server_relay.d.ts +82 -0
  172. package/dist/src/server_relay.js +341 -0
  173. package/dist/src/server_relay.js.map +1 -0
  174. package/dist/src/simulate.d.ts +60 -0
  175. package/dist/src/simulate.js +72 -0
  176. package/dist/src/simulate.js.map +1 -0
  177. package/dist/src/skill_runner.mjs +34 -0
  178. package/dist/src/skill_subprocess.d.ts +65 -0
  179. package/dist/src/skill_subprocess.js +132 -0
  180. package/dist/src/skill_subprocess.js.map +1 -0
  181. package/dist/src/skills.d.ts +85 -0
  182. package/dist/src/skills.js +258 -0
  183. package/dist/src/skills.js.map +1 -0
  184. package/dist/src/subthread_recorder.d.ts +68 -0
  185. package/dist/src/subthread_recorder.js +166 -0
  186. package/dist/src/subthread_recorder.js.map +1 -0
  187. package/dist/src/tensor_read.d.ts +38 -0
  188. package/dist/src/tensor_read.js +60 -0
  189. package/dist/src/tensor_read.js.map +1 -0
  190. package/dist/src/test_honest_broker.d.ts +34 -0
  191. package/dist/src/test_honest_broker.js +155 -0
  192. package/dist/src/test_honest_broker.js.map +1 -0
  193. package/dist/src/test_topology.d.ts +22 -0
  194. package/dist/src/test_topology.js +137 -0
  195. package/dist/src/test_topology.js.map +1 -0
  196. package/dist/src/tones.d.ts +20 -0
  197. package/dist/src/tones.js +81 -0
  198. package/dist/src/tones.js.map +1 -0
  199. package/dist/src/tool_providers.d.ts +45 -0
  200. package/dist/src/tool_providers.js +104 -0
  201. package/dist/src/tool_providers.js.map +1 -0
  202. package/dist/src/type_versioning.d.ts +23 -0
  203. package/dist/src/type_versioning.js +31 -0
  204. package/dist/src/type_versioning.js.map +1 -0
  205. package/dist/src/version.d.ts +28 -0
  206. package/dist/src/version.js +86 -0
  207. package/dist/src/version.js.map +1 -0
  208. package/domain_types/claim-draft.json +34 -0
  209. package/domain_types/coverage-report.json +31 -0
  210. package/domain_types/draft-agent-profile.json +31 -0
  211. package/domain_types/draft-domain-type.json +28 -0
  212. package/domain_types/draft-standard.json +46 -0
  213. package/domain_types/e2e-observation.json +32 -0
  214. package/domain_types/e2e-report.json +30 -0
  215. package/domain_types/e2e-target.json +26 -0
  216. package/domain_types/e2e-verdict.json +26 -0
  217. package/domain_types/examine-round-record.json +40 -0
  218. package/domain_types/examiner-rejection.json +28 -0
  219. package/domain_types/failure-modes.json +31 -0
  220. package/domain_types/invention-analysis.json +34 -0
  221. package/domain_types/invention-spec.json +34 -0
  222. package/domain_types/novelty-analysis.json +28 -0
  223. package/domain_types/novelty-verdict.json +35 -0
  224. package/domain_types/parsed-conversation-trace.json +38 -0
  225. package/domain_types/pattern-extraction.json +62 -0
  226. package/domain_types/prior-art-hit.json +50 -0
  227. package/domain_types/project-charter.json +71 -0
  228. package/domain_types/provisional-draft.json +34 -0
  229. package/domain_types/raw-note.json +19 -0
  230. package/domain_types/repo-survey.json +28 -0
  231. package/domain_types/seeding-verdict.json +70 -0
  232. package/domain_types/soft-verdict.json +55 -0
  233. package/domain_types/summary.json +19 -0
  234. package/domain_types/triage-verdict.json +59 -0
  235. package/domain_types/user-flow-transcript.json +43 -0
  236. package/domain_types/user-flow-verdict.json +60 -0
  237. package/domain_types/verdict-record.json +39 -0
  238. package/package.json +82 -0
  239. package/skills/citation-verify/fixtures/basic.json +14 -0
  240. package/skills/citation-verify/meta.json +10 -0
  241. package/skills/citation-verify/skill.mjs +26 -0
  242. package/skills/claim-element-decompose/fixtures/basic.json +11 -0
  243. package/skills/claim-element-decompose/meta.json +10 -0
  244. package/skills/claim-element-decompose/skill.mjs +14 -0
  245. package/skills/diamond-cutting-discipline/fixtures/basic.json +13 -0
  246. package/skills/diamond-cutting-discipline/meta.json +19 -0
  247. package/skills/diamond-cutting-discipline/skill.md +46 -0
  248. package/skills/element-mapping-matrix/fixtures/basic.json +13 -0
  249. package/skills/element-mapping-matrix/meta.json +10 -0
  250. package/skills/element-mapping-matrix/skill.mjs +20 -0
  251. package/skills/number-adder/fixtures/basic.json +9 -0
  252. package/skills/number-adder/meta.json +10 -0
  253. package/skills/number-adder/skill.mjs +12 -0
  254. package/skills/patent-fetch/fixtures/parse.json +18 -0
  255. package/skills/patent-fetch/meta.json +11 -0
  256. package/skills/patent-fetch/skill.mjs +34 -0
  257. package/skills/query-expand/fixtures/basic.json +14 -0
  258. package/skills/query-expand/meta.json +10 -0
  259. package/skills/query-expand/skill.mjs +29 -0
  260. package/skills/run-vitest-band/fixtures/basic.json +9 -0
  261. package/skills/run-vitest-band/meta.json +18 -0
  262. package/skills/run-vitest-band/skill.mjs +22 -0
  263. package/skills/statutory-checklist/fixtures/basic.json +16 -0
  264. package/skills/statutory-checklist/meta.json +10 -0
  265. package/skills/statutory-checklist/skill.mjs +25 -0
  266. package/skills/summarize-tight/fixtures/basic.json +13 -0
  267. package/skills/summarize-tight/meta.json +20 -0
  268. package/skills/summarize-tight/skill.md +1 -0
  269. package/skills/verdict-gate/fixtures/basic.json +9 -0
  270. package/skills/verdict-gate/meta.json +10 -0
  271. package/skills/verdict-gate/skill.mjs +82 -0
  272. package/standards/e2e-suite-v0.json +44 -0
  273. package/standards/patent-triage-v0.json +98 -0
  274. package/standards/patent-triage-v1.json +84 -0
  275. package/standards/seed-from-local-repos-v0.json +115 -0
  276. package/standards/sub_thread_invocation.json +50 -0
  277. package/standards/summarize.json +40 -0
  278. package/standards/synthesis-walk-v0.json +108 -0
  279. package/standards/user_flow_correctness.json +57 -0
@@ -0,0 +1,108 @@
1
+ {
2
+ "slug": "synthesis-walk-v0",
3
+ "domain": "introspection",
4
+ "description": "Walk recent activity across repos, Claude Code session transcripts, working dirs, and Drive — emit a synthesis ledger (human-readable markdown + machine-readable structured JSON) that captures who contributed what, what landed, what failed, and what's queued.",
5
+ "execution_modes": {
6
+ "conductor_mode": {
7
+ "default": true,
8
+ "description": "User says 'synthesize the last 24h' or '...last 7d' or names a window. Claude walks phases conversationally, surfaces sources before walking, asks for permission on private sources.",
9
+ "user_invocation_examples": [
10
+ "synthesize last 24h",
11
+ "walk last 7 days across our work",
12
+ "let's run synthesis-walk",
13
+ "what happened last week"
14
+ ]
15
+ },
16
+ "dispatch_mode": {
17
+ "description": "Same standard via subagent dispatch · power-user surface for long windows / multi-repo walks.",
18
+ "tradeoff": "dispatch_mode parallelizes the source-discovery phases (one subagent per source-class)"
19
+ }
20
+ },
21
+ "agent_slugs": [
22
+ "source-walker",
23
+ "event-clusterer",
24
+ "synthesis-writer"
25
+ ],
26
+ "phases": [
27
+ {
28
+ "name": "discover",
29
+ "chairs": [
30
+ {
31
+ "role": "discover",
32
+ "agent_slug": "source-walker",
33
+ "depends_on": [],
34
+ "input_contract": [],
35
+ "output_contract": [
36
+ "repo-survey"
37
+ ],
38
+ "required_skills": []
39
+ }
40
+ ],
41
+ "intent": "Diverge. Catalog all sources for the synthesis window: (a) git logs across registered repos, (b) Claude Code session jsonl under ~/.claude/projects/, (c) /tmp working dirs created in the window, (d) Drive doc index, (e) Slack channel history if permitted. Emit a sources_catalog. Refuses premature interpretation."
42
+ },
43
+ {
44
+ "name": "cluster",
45
+ "chairs": [
46
+ {
47
+ "role": "cluster",
48
+ "agent_slug": "event-clusterer",
49
+ "depends_on": [],
50
+ "input_contract": [],
51
+ "output_contract": [
52
+ "Interpretation"
53
+ ],
54
+ "required_skills": []
55
+ }
56
+ ],
57
+ "intent": "Converge along author and lane axes. Group source-events by author, repo, and lane (architecture · math · review · etc). Emit a clustered view of the discover-phase catalog."
58
+ },
59
+ {
60
+ "name": "synthesize",
61
+ "chairs": [
62
+ {
63
+ "role": "synthesize",
64
+ "agent_slug": "synthesis-writer",
65
+ "depends_on": [],
66
+ "input_contract": [],
67
+ "output_contract": [
68
+ "Artifact"
69
+ ],
70
+ "required_skills": []
71
+ }
72
+ ],
73
+ "intent": "Generate the deliverables: (a) human-readable markdown with per-author contribution + landings + PR mentions, (b) machine-readable structured JSON for training feed. Both outputs cite the same source-event references."
74
+ }
75
+ ],
76
+ "input_types": [
77
+ "raw-note"
78
+ ],
79
+ "output_types": [
80
+ "Artifact"
81
+ ],
82
+ "sources": {
83
+ "git_repos": [
84
+ "registered repos (see repo_register)"
85
+ ],
86
+ "claude_threads": "~/.claude/projects/**/transcripts/*.jsonl",
87
+ "tmp_workspaces": "/tmp/coltrane_*",
88
+ "drive_recent": "Google Drive recent files (with permission)",
89
+ "slack_channels": "configured per workspace; permission-gated"
90
+ },
91
+ "window_options": [
92
+ "24h",
93
+ "48h",
94
+ "7d",
95
+ "30d",
96
+ "custom <ISO-8601 start> <ISO-8601 end>"
97
+ ],
98
+ "outputs": {
99
+ "markdown_synthesis": ".coltrane/syntheses/<window_id>/synthesis.md",
100
+ "structured_synthesis": ".coltrane/syntheses/<window_id>/synthesis.json"
101
+ },
102
+ "rules": [
103
+ "sources walked READ-ONLY · never edits source events",
104
+ "Claude Code session jsonl + /tmp + Drive read with explicit user permission per session",
105
+ "citations MUST credit source event ids · synthesis is not original content, it is derived",
106
+ "synthesis output is read-only once written"
107
+ ]
108
+ }
@@ -0,0 +1,57 @@
1
+ {
2
+ "slug": "user_flow_correctness",
3
+ "domain": "self_judge",
4
+ "agent_slugs": [
5
+ "user_flow_sensor",
6
+ "user_flow_judge"
7
+ ],
8
+ "phases": [
9
+ {
10
+ "name": "sense",
11
+ "chairs": [
12
+ {
13
+ "role": "sense",
14
+ "agent_slug": "user_flow_sensor",
15
+ "depends_on": [],
16
+ "input_contract": [],
17
+ "output_contract": [
18
+ "user-flow-transcript"
19
+ ],
20
+ "required_skills": []
21
+ }
22
+ ]
23
+ },
24
+ {
25
+ "name": "interpret",
26
+ "chairs": [
27
+ {
28
+ "role": "interpret",
29
+ "agent_slug": "user_flow_judge",
30
+ "depends_on": [],
31
+ "input_contract": [],
32
+ "output_contract": [
33
+ "user-flow-verdict"
34
+ ],
35
+ "required_skills": []
36
+ }
37
+ ]
38
+ }
39
+ ],
40
+ "identity": {
41
+ "id": "user_flow_correctness@1",
42
+ "name": "User-flow behavioral correctness soft-judge",
43
+ "version": 1,
44
+ "purpose": "Scores whether claude PICKED the right coltrane MCP tool for a fuzzy user intent across multi-turn user-manual flows. SENSE normalizes a structured user-flow transcript (per-turn user intent, claude response, tool calls, post-turn genome state). INTERPRET LLM-scores five soft criteria the deterministic prompt tests cannot reach: tool-pick appropriateness, response faithfulness to stated intent, genome-state structural validity after the workflow, typed-error vs raw-stack-trace on malformed input, and multi-turn continuity (turn N+1 consistent with turn N's recorded state)."
45
+ },
46
+ "scoring": {
47
+ "scale": "0-1 per criterion (float)",
48
+ "pass_threshold_per_criterion": 0.6,
49
+ "overall_pass_threshold_sum": 3.0,
50
+ "overall_pass_threshold_max": 5.0,
51
+ "noise_band_repro": 1.0
52
+ },
53
+ "prompt_templates": {
54
+ "sense": "You are the SENSE phase of the user_flow_correctness standard.\n\nINPUT: gig_input.transcript_json (a JSON-encoded array of turn objects). Each turn has: { user_intent: string, claude_response: string, tool_calls: array, post_turn_genome_state?: object|null, malformed_input?: boolean }.\n\nTASK: parse the transcript into a normalized `user-flow-transcript`. For each turn capture turn_idx, user_intent (verbatim), claude_response (verbatim), tool_calls (array of { tool_name: string, args?: object }), post_turn_genome_state (object or null), and malformed_input (boolean, default false). If the input cannot be parsed, set turns=[] and put the diagnosis in notes — do NOT fabricate turns.\n\nOUTPUT (single JSON object, no fence, no prose):\n{\n \"transcript_present\": <bool>,\n \"turn_count\": <int>,\n \"turns\": [\n { \"turn_idx\": 0, \"user_intent\": \"<text>\", \"claude_response\": \"<text>\", \"tool_calls\": [{\"tool_name\":\"<slug>\",\"args\":{}}], \"post_turn_genome_state\": null, \"malformed_input\": false }\n ],\n \"notes\": \"<honesty-note about parse failures or empty input>\"\n}",
55
+ "interpret": "You are the INTERPRET phase of the user_flow_correctness standard — the soft-judge for user-flow behavioral correctness.\n\nINPUT: a `user-flow-transcript` from the SENSE phase (gig_input.transcript).\n\nTASK: score the flow on five criteria. Each criterion gets a float score in [0.0, 1.0] and a rationale grounded in specific turns. If turns=[], set every score to null and the rationale to the diagnosis — do NOT fabricate.\n\nCRITERIA:\n a. tool_pick_appropriate: did claude pick the appropriate coltrane MCP tool for each user's stated intent? Score 1.0 if every turn's tool_calls match the user_intent's clear target; 0.0 if claude picked tools unrelated to the intent or made no tool call when one was clearly required.\n b. response_faithful: did claude's natural-language response acknowledge the user's actual request faithfully, or did it drift to unrelated content? Score by semantic overlap between user_intent and claude_response.\n c. genome_state_valid: did claude write a structurally-valid genome state after the requested workflow? Check that post_turn_genome_state objects have plausible shape (top-level keys like slug, agents, standards, types — coltrane's genome shape) and are not corrupted. Null states are acceptable when the turn is a query, not a write.\n d. typed_error_on_malformed: when a turn has malformed_input=true, did claude surface a typed error (a named error class or a structured error object) rather than a raw stack trace or silent corruption? Score 1.0 for typed/named errors, 0.0 for raw stack traces.\n e. multi_turn_continuity: for each turn N+1, is the behavior consistent with turn N's recorded post_turn_genome_state? (e.g., if turn 0 created a thing called X, does turn 1 acknowledge X exists?) Score 1.0 for full consistency; 0.0 for amnesia / contradiction.\n\nnot-judgeable CASE: turns=[] or the input is structurally insufficient → every score null, rationale states the cause, overall_pass=false, overall_score=null.\n\nOUTPUT (single JSON object, no fence, no prose):\n{\n \"criteria\": {\n \"tool_pick_appropriate\": { \"score\": <0.0-1.0 or null>, \"rationale\": \"<text grounding the score in specific turns>\" },\n \"response_faithful\": { \"score\": <0.0-1.0 or null>, \"rationale\": \"<text>\" },\n \"genome_state_valid\": { \"score\": <0.0-1.0 or null>, \"rationale\": \"<text>\" },\n \"typed_error_on_malformed\": { \"score\": <0.0-1.0 or null>, \"rationale\": \"<text>\" },\n \"multi_turn_continuity\": { \"score\": <0.0-1.0 or null>, \"rationale\": \"<text>\" }\n },\n \"overall_score\": <sum of non-null scores (0.0-5.0), or null if all null>,\n \"overall_pass\": <true if overall_score >= 3.0, else false>,\n \"top_finding\": \"<the single most load-bearing observation; ground it in a specific turn>\"\n}"
56
+ }
57
+ }