@rpamis/comet 0.4.0-beta.1 → 0.4.0-beta.11

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 (1297) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +279 -113
  3. package/assets/manifest.json +17 -5
  4. package/assets/skills/comet/SKILL.md +17 -256
  5. package/assets/skills/comet/reference/auto-transition.md +1 -1
  6. package/assets/skills/comet/reference/classic-layout.md +34 -0
  7. package/assets/skills/comet/reference/comet-yaml-fields.md +14 -8
  8. package/assets/skills/comet/reference/context-recovery.md +14 -4
  9. package/assets/skills/comet/reference/decision-point.md +11 -0
  10. package/assets/skills/comet/reference/file-structure.md +2 -2
  11. package/assets/skills/comet/reference/intent-frame.md +3 -3
  12. package/assets/skills/comet/reference/scripts.md +47 -15
  13. package/assets/skills/comet/reference/subagent-dispatch.md +8 -7
  14. package/assets/skills/comet/rules/comet-phase-guard.en.md +34 -31
  15. package/assets/skills/comet/rules/comet-phase-guard.md +34 -32
  16. package/assets/skills/comet/rules/comet-workflow-guard.en.md +32 -0
  17. package/assets/skills/comet/rules/comet-workflow-guard.md +32 -0
  18. package/assets/skills/comet/scripts/comet-entry-runtime.mjs +8074 -0
  19. package/assets/skills/comet/scripts/comet-hook-router.mjs +12086 -0
  20. package/assets/skills/comet/scripts/comet-resume-probe.mjs +3 -0
  21. package/assets/skills/comet/scripts/comet-runtime.mjs +10449 -4105
  22. package/assets/skills/comet-any/SKILL.md +5 -5
  23. package/assets/skills/comet-any/reference/authored-zone-example.md +10 -5
  24. package/assets/skills/comet-any/reference/authoring-subagents.md +1 -1
  25. package/assets/skills/comet-any/reference/bundle-authoring.md +2 -2
  26. package/assets/skills/comet-any/reference/subagents/pause-points-author.md +14 -11
  27. package/assets/skills/comet-any/reference/subagents/reference-author.md +1 -1
  28. package/assets/skills/comet-any/reference/subagents/script-author.md +1 -1
  29. package/assets/skills/comet-any/reference/subagents/skill-core-author.md +1 -1
  30. package/assets/skills/comet-any/reference/subagents/skill-reviewer.md +4 -2
  31. package/assets/skills/comet-any/reference/subagents/workflow-entry-author.md +8 -7
  32. package/assets/skills/comet-archive/SKILL.md +69 -26
  33. package/assets/skills/comet-build/SKILL.md +77 -58
  34. package/assets/skills/comet-classic/SKILL.md +295 -0
  35. package/assets/skills/comet-design/SKILL.md +40 -36
  36. package/assets/skills/comet-hotfix/SKILL.md +57 -35
  37. package/assets/skills/comet-native/SKILL.md +132 -0
  38. package/assets/skills/comet-native/reference/artifacts.md +141 -0
  39. package/assets/skills/comet-native/reference/clarification.md +54 -0
  40. package/assets/skills/comet-native/reference/commands.md +168 -0
  41. package/assets/skills/comet-native/reference/recovery.md +96 -0
  42. package/assets/skills/comet-native/scripts/comet-native-hook-guard.mjs +4 -0
  43. package/assets/skills/comet-native/scripts/comet-native-runtime.mjs +34165 -0
  44. package/assets/skills/comet-open/SKILL.md +119 -59
  45. package/assets/skills/comet-tweak/SKILL.md +52 -27
  46. package/assets/skills/comet-verify/SKILL.md +65 -73
  47. package/assets/skills-zh/comet/SKILL.md +17 -244
  48. package/assets/skills-zh/comet/reference/auto-transition.md +1 -1
  49. package/assets/skills-zh/comet/reference/classic-layout.md +34 -0
  50. package/assets/skills-zh/comet/reference/comet-yaml-fields.md +13 -8
  51. package/assets/skills-zh/comet/reference/context-recovery.md +14 -4
  52. package/assets/skills-zh/comet/reference/decision-point.md +11 -0
  53. package/assets/skills-zh/comet/reference/file-structure.md +2 -2
  54. package/assets/skills-zh/comet/reference/intent-frame.md +3 -3
  55. package/assets/skills-zh/comet/reference/scripts.md +47 -15
  56. package/assets/skills-zh/comet/reference/subagent-dispatch.md +8 -7
  57. package/assets/skills-zh/comet-any/SKILL.md +5 -5
  58. package/assets/skills-zh/comet-any/reference/authored-zone-example.md +10 -5
  59. package/assets/skills-zh/comet-any/reference/authoring-subagents.md +1 -1
  60. package/assets/skills-zh/comet-any/reference/bundle-authoring.md +2 -2
  61. package/assets/skills-zh/comet-any/reference/subagents/pause-points-author.md +14 -12
  62. package/assets/skills-zh/comet-any/reference/subagents/reference-author.md +1 -1
  63. package/assets/skills-zh/comet-any/reference/subagents/script-author.md +1 -1
  64. package/assets/skills-zh/comet-any/reference/subagents/skill-core-author.md +1 -1
  65. package/assets/skills-zh/comet-any/reference/subagents/skill-reviewer.md +4 -2
  66. package/assets/skills-zh/comet-any/reference/subagents/workflow-entry-author.md +8 -7
  67. package/assets/skills-zh/comet-archive/SKILL.md +69 -26
  68. package/assets/skills-zh/comet-build/SKILL.md +77 -58
  69. package/assets/skills-zh/comet-classic/SKILL.md +283 -0
  70. package/assets/skills-zh/comet-design/SKILL.md +40 -36
  71. package/assets/skills-zh/comet-hotfix/SKILL.md +56 -34
  72. package/assets/skills-zh/comet-native/SKILL.md +132 -0
  73. package/assets/skills-zh/comet-native/reference/artifacts.md +141 -0
  74. package/assets/skills-zh/comet-native/reference/clarification.md +54 -0
  75. package/assets/skills-zh/comet-native/reference/commands.md +168 -0
  76. package/assets/skills-zh/comet-native/reference/recovery.md +96 -0
  77. package/assets/skills-zh/comet-open/SKILL.md +118 -58
  78. package/assets/skills-zh/comet-tweak/SKILL.md +51 -26
  79. package/assets/skills-zh/comet-verify/SKILL.md +65 -73
  80. package/dist/app/cli/comet-banner.d.ts +25 -0
  81. package/dist/app/cli/comet-banner.d.ts.map +1 -0
  82. package/dist/app/cli/comet-banner.js +265 -0
  83. package/dist/app/cli/comet-banner.js.map +1 -0
  84. package/dist/app/cli/index.js +113 -16
  85. package/dist/app/cli/index.js.map +1 -1
  86. package/dist/app/commands/classic.d.ts +5 -0
  87. package/dist/app/commands/classic.d.ts.map +1 -0
  88. package/dist/app/commands/classic.js +32 -0
  89. package/dist/app/commands/classic.js.map +1 -0
  90. package/dist/app/commands/command-result.d.ts +6 -0
  91. package/dist/app/commands/command-result.d.ts.map +1 -0
  92. package/dist/app/commands/command-result.js +4 -0
  93. package/dist/app/commands/command-result.js.map +1 -0
  94. package/dist/app/commands/doctor.d.ts +4 -0
  95. package/dist/app/commands/doctor.d.ts.map +1 -1
  96. package/dist/app/commands/doctor.js +926 -95
  97. package/dist/app/commands/doctor.js.map +1 -1
  98. package/dist/app/commands/eval.d.ts +3 -1
  99. package/dist/app/commands/eval.d.ts.map +1 -1
  100. package/dist/app/commands/eval.js +80 -22
  101. package/dist/app/commands/eval.js.map +1 -1
  102. package/dist/app/commands/i18n.d.ts +1 -1
  103. package/dist/app/commands/i18n.d.ts.map +1 -1
  104. package/dist/app/commands/i18n.js +18 -6
  105. package/dist/app/commands/i18n.js.map +1 -1
  106. package/dist/app/commands/init.d.ts +13 -3
  107. package/dist/app/commands/init.d.ts.map +1 -1
  108. package/dist/app/commands/init.js +561 -72
  109. package/dist/app/commands/init.js.map +1 -1
  110. package/dist/app/commands/native.d.ts +2 -0
  111. package/dist/app/commands/native.d.ts.map +1 -0
  112. package/dist/app/commands/native.js +10 -0
  113. package/dist/app/commands/native.js.map +1 -0
  114. package/dist/app/commands/project-scope-selection.d.ts +13 -0
  115. package/dist/app/commands/project-scope-selection.d.ts.map +1 -0
  116. package/dist/app/commands/project-scope-selection.js +35 -0
  117. package/dist/app/commands/project-scope-selection.js.map +1 -0
  118. package/dist/app/commands/resume-probe.d.ts +12 -0
  119. package/dist/app/commands/resume-probe.d.ts.map +1 -0
  120. package/dist/app/commands/resume-probe.js +68 -0
  121. package/dist/app/commands/resume-probe.js.map +1 -0
  122. package/dist/app/commands/status.d.ts.map +1 -1
  123. package/dist/app/commands/status.js +70 -104
  124. package/dist/app/commands/status.js.map +1 -1
  125. package/dist/app/commands/uninstall.d.ts +5 -0
  126. package/dist/app/commands/uninstall.d.ts.map +1 -1
  127. package/dist/app/commands/uninstall.js +264 -53
  128. package/dist/app/commands/uninstall.js.map +1 -1
  129. package/dist/app/commands/update.d.ts +29 -5
  130. package/dist/app/commands/update.d.ts.map +1 -1
  131. package/dist/app/commands/update.js +1431 -127
  132. package/dist/app/commands/update.js.map +1 -1
  133. package/dist/app/commands/workflow.d.ts +6 -0
  134. package/dist/app/commands/workflow.d.ts.map +1 -0
  135. package/dist/app/commands/workflow.js +11 -0
  136. package/dist/app/commands/workflow.js.map +1 -0
  137. package/dist/config/repository-layout.json +29 -3
  138. package/dist/domains/bundle/bundle-platform.d.ts +1 -0
  139. package/dist/domains/bundle/bundle-platform.d.ts.map +1 -1
  140. package/dist/domains/bundle/bundle-platform.js +10 -4
  141. package/dist/domains/bundle/bundle-platform.js.map +1 -1
  142. package/dist/domains/bundle/eval-manifest-runtime.d.ts +8 -0
  143. package/dist/domains/bundle/eval-manifest-runtime.d.ts.map +1 -0
  144. package/dist/domains/bundle/eval-manifest-runtime.js +118 -0
  145. package/dist/domains/bundle/eval-manifest-runtime.js.map +1 -0
  146. package/dist/domains/bundle/eval-run-result.d.ts +22 -0
  147. package/dist/domains/bundle/eval-run-result.d.ts.map +1 -0
  148. package/dist/domains/bundle/eval-run-result.js +207 -0
  149. package/dist/domains/bundle/eval-run-result.js.map +1 -0
  150. package/dist/domains/bundle/eval.d.ts.map +1 -1
  151. package/dist/domains/bundle/eval.js +21 -24
  152. package/dist/domains/bundle/eval.js.map +1 -1
  153. package/dist/domains/bundle/factory.d.ts.map +1 -1
  154. package/dist/domains/bundle/factory.js +2 -9
  155. package/dist/domains/bundle/factory.js.map +1 -1
  156. package/dist/domains/bundle/review-summary.js +1 -1
  157. package/dist/domains/bundle/review-summary.js.map +1 -1
  158. package/dist/domains/bundle/state.d.ts.map +1 -1
  159. package/dist/domains/bundle/state.js +117 -2
  160. package/dist/domains/bundle/state.js.map +1 -1
  161. package/dist/domains/bundle/types.d.ts +1 -1
  162. package/dist/domains/bundle/types.d.ts.map +1 -1
  163. package/dist/domains/comet-classic/classic-archive-pointer.d.ts +8 -0
  164. package/dist/domains/comet-classic/classic-archive-pointer.d.ts.map +1 -0
  165. package/dist/domains/comet-classic/classic-archive-pointer.js +66 -0
  166. package/dist/domains/comet-classic/classic-archive-pointer.js.map +1 -0
  167. package/dist/domains/comet-classic/classic-archive.d.ts +1 -0
  168. package/dist/domains/comet-classic/classic-archive.d.ts.map +1 -1
  169. package/dist/domains/comet-classic/classic-archive.js +205 -114
  170. package/dist/domains/comet-classic/classic-archive.js.map +1 -1
  171. package/dist/domains/comet-classic/classic-branch-binding.d.ts +51 -0
  172. package/dist/domains/comet-classic/classic-branch-binding.d.ts.map +1 -0
  173. package/dist/domains/comet-classic/classic-branch-binding.js +107 -0
  174. package/dist/domains/comet-classic/classic-branch-binding.js.map +1 -0
  175. package/dist/domains/comet-classic/classic-cli.d.ts +3 -1
  176. package/dist/domains/comet-classic/classic-cli.d.ts.map +1 -1
  177. package/dist/domains/comet-classic/classic-cli.js +12 -3
  178. package/dist/domains/comet-classic/classic-cli.js.map +1 -1
  179. package/dist/domains/comet-classic/classic-command-checks.d.ts +20 -0
  180. package/dist/domains/comet-classic/classic-command-checks.d.ts.map +1 -0
  181. package/dist/domains/comet-classic/classic-command-checks.js +94 -0
  182. package/dist/domains/comet-classic/classic-command-checks.js.map +1 -0
  183. package/dist/domains/comet-classic/classic-command-context.d.ts +12 -0
  184. package/dist/domains/comet-classic/classic-command-context.d.ts.map +1 -0
  185. package/dist/domains/comet-classic/classic-command-context.js +42 -0
  186. package/dist/domains/comet-classic/classic-command-context.js.map +1 -0
  187. package/dist/domains/comet-classic/classic-current-change.d.ts +17 -0
  188. package/dist/domains/comet-classic/classic-current-change.d.ts.map +1 -0
  189. package/dist/domains/comet-classic/classic-current-change.js +112 -0
  190. package/dist/domains/comet-classic/classic-current-change.js.map +1 -0
  191. package/dist/domains/comet-classic/classic-diagnostics.d.ts +2 -1
  192. package/dist/domains/comet-classic/classic-diagnostics.d.ts.map +1 -1
  193. package/dist/domains/comet-classic/classic-diagnostics.js +54 -1
  194. package/dist/domains/comet-classic/classic-diagnostics.js.map +1 -1
  195. package/dist/domains/comet-classic/classic-evidence.d.ts +1 -0
  196. package/dist/domains/comet-classic/classic-evidence.d.ts.map +1 -1
  197. package/dist/domains/comet-classic/classic-evidence.js +101 -37
  198. package/dist/domains/comet-classic/classic-evidence.js.map +1 -1
  199. package/dist/domains/comet-classic/classic-guard.d.ts.map +1 -1
  200. package/dist/domains/comet-classic/classic-guard.js +229 -208
  201. package/dist/domains/comet-classic/classic-guard.js.map +1 -1
  202. package/dist/domains/comet-classic/classic-handoff.d.ts.map +1 -1
  203. package/dist/domains/comet-classic/classic-handoff.js +155 -107
  204. package/dist/domains/comet-classic/classic-handoff.js.map +1 -1
  205. package/dist/domains/comet-classic/classic-hook-guard.d.ts +9 -0
  206. package/dist/domains/comet-classic/classic-hook-guard.d.ts.map +1 -1
  207. package/dist/domains/comet-classic/classic-hook-guard.js +406 -54
  208. package/dist/domains/comet-classic/classic-hook-guard.js.map +1 -1
  209. package/dist/domains/comet-classic/classic-layout-initialization.d.ts +86 -0
  210. package/dist/domains/comet-classic/classic-layout-initialization.d.ts.map +1 -0
  211. package/dist/domains/comet-classic/classic-layout-initialization.js +813 -0
  212. package/dist/domains/comet-classic/classic-layout-initialization.js.map +1 -0
  213. package/dist/domains/comet-classic/classic-layout.d.ts +47 -0
  214. package/dist/domains/comet-classic/classic-layout.d.ts.map +1 -0
  215. package/dist/domains/comet-classic/classic-layout.js +227 -0
  216. package/dist/domains/comet-classic/classic-layout.js.map +1 -0
  217. package/dist/domains/comet-classic/classic-migrate.d.ts +4 -0
  218. package/dist/domains/comet-classic/classic-migrate.d.ts.map +1 -1
  219. package/dist/domains/comet-classic/classic-migrate.js +8 -12
  220. package/dist/domains/comet-classic/classic-migrate.js.map +1 -1
  221. package/dist/domains/comet-classic/classic-openspec-command.d.ts +4 -0
  222. package/dist/domains/comet-classic/classic-openspec-command.d.ts.map +1 -0
  223. package/dist/domains/comet-classic/classic-openspec-command.js +45 -0
  224. package/dist/domains/comet-classic/classic-openspec-command.js.map +1 -0
  225. package/dist/domains/comet-classic/classic-openspec-root.d.ts +13 -0
  226. package/dist/domains/comet-classic/classic-openspec-root.d.ts.map +1 -0
  227. package/dist/domains/comet-classic/classic-openspec-root.js +47 -0
  228. package/dist/domains/comet-classic/classic-openspec-root.js.map +1 -0
  229. package/dist/domains/comet-classic/classic-paths.d.ts +11 -1
  230. package/dist/domains/comet-classic/classic-paths.d.ts.map +1 -1
  231. package/dist/domains/comet-classic/classic-paths.js +87 -35
  232. package/dist/domains/comet-classic/classic-paths.js.map +1 -1
  233. package/dist/domains/comet-classic/classic-project-config.d.ts +16 -0
  234. package/dist/domains/comet-classic/classic-project-config.d.ts.map +1 -0
  235. package/dist/domains/comet-classic/classic-project-config.js +36 -0
  236. package/dist/domains/comet-classic/classic-project-config.js.map +1 -0
  237. package/dist/domains/comet-classic/classic-protected-path.d.ts +39 -0
  238. package/dist/domains/comet-classic/classic-protected-path.d.ts.map +1 -0
  239. package/dist/domains/comet-classic/classic-protected-path.js +69 -0
  240. package/dist/domains/comet-classic/classic-protected-path.js.map +1 -0
  241. package/dist/domains/comet-classic/classic-resolver.d.ts.map +1 -1
  242. package/dist/domains/comet-classic/classic-resolver.js +4 -4
  243. package/dist/domains/comet-classic/classic-resolver.js.map +1 -1
  244. package/dist/domains/comet-classic/classic-resume-probe-command.d.ts +3 -0
  245. package/dist/domains/comet-classic/classic-resume-probe-command.d.ts.map +1 -0
  246. package/dist/domains/comet-classic/classic-resume-probe-command.js +59 -0
  247. package/dist/domains/comet-classic/classic-resume-probe-command.js.map +1 -0
  248. package/dist/domains/comet-classic/classic-resume-probe-entry.d.ts +2 -0
  249. package/dist/domains/comet-classic/classic-resume-probe-entry.d.ts.map +1 -0
  250. package/dist/domains/comet-classic/classic-resume-probe-entry.js +4 -0
  251. package/dist/domains/comet-classic/classic-resume-probe-entry.js.map +1 -0
  252. package/dist/domains/comet-classic/classic-resume-probe.d.ts +29 -0
  253. package/dist/domains/comet-classic/classic-resume-probe.d.ts.map +1 -0
  254. package/dist/domains/comet-classic/classic-resume-probe.js +406 -0
  255. package/dist/domains/comet-classic/classic-resume-probe.js.map +1 -0
  256. package/dist/domains/comet-classic/classic-root-command.d.ts +5 -0
  257. package/dist/domains/comet-classic/classic-root-command.d.ts.map +1 -0
  258. package/dist/domains/comet-classic/classic-root-command.js +84 -0
  259. package/dist/domains/comet-classic/classic-root-command.js.map +1 -0
  260. package/dist/domains/comet-classic/classic-root-move.d.ts +119 -0
  261. package/dist/domains/comet-classic/classic-root-move.d.ts.map +1 -0
  262. package/dist/domains/comet-classic/classic-root-move.js +1737 -0
  263. package/dist/domains/comet-classic/classic-root-move.js.map +1 -0
  264. package/dist/domains/comet-classic/classic-runtime-run.d.ts +2 -1
  265. package/dist/domains/comet-classic/classic-runtime-run.d.ts.map +1 -1
  266. package/dist/domains/comet-classic/classic-runtime-run.js +278 -5
  267. package/dist/domains/comet-classic/classic-runtime-run.js.map +1 -1
  268. package/dist/domains/comet-classic/classic-state-command.d.ts.map +1 -1
  269. package/dist/domains/comet-classic/classic-state-command.js +342 -87
  270. package/dist/domains/comet-classic/classic-state-command.js.map +1 -1
  271. package/dist/domains/comet-classic/classic-state-events.d.ts +1 -1
  272. package/dist/domains/comet-classic/classic-state-events.d.ts.map +1 -1
  273. package/dist/domains/comet-classic/classic-state-events.js +3 -4
  274. package/dist/domains/comet-classic/classic-state-events.js.map +1 -1
  275. package/dist/domains/comet-classic/classic-state.d.ts +6 -4
  276. package/dist/domains/comet-classic/classic-state.d.ts.map +1 -1
  277. package/dist/domains/comet-classic/classic-state.js +20 -7
  278. package/dist/domains/comet-classic/classic-state.js.map +1 -1
  279. package/dist/domains/comet-classic/classic-store.d.ts +6 -1
  280. package/dist/domains/comet-classic/classic-store.d.ts.map +1 -1
  281. package/dist/domains/comet-classic/classic-store.js +36 -23
  282. package/dist/domains/comet-classic/classic-store.js.map +1 -1
  283. package/dist/domains/comet-classic/classic-transitions.d.ts +1 -1
  284. package/dist/domains/comet-classic/classic-transitions.d.ts.map +1 -1
  285. package/dist/domains/comet-classic/classic-transitions.js +37 -3
  286. package/dist/domains/comet-classic/classic-transitions.js.map +1 -1
  287. package/dist/domains/comet-classic/classic-validate-command.d.ts.map +1 -1
  288. package/dist/domains/comet-classic/classic-validate-command.js +40 -20
  289. package/dist/domains/comet-classic/classic-validate-command.js.map +1 -1
  290. package/dist/domains/comet-classic/index.d.ts +3 -0
  291. package/dist/domains/comet-classic/index.d.ts.map +1 -1
  292. package/dist/domains/comet-classic/index.js +3 -0
  293. package/dist/domains/comet-classic/index.js.map +1 -1
  294. package/dist/domains/comet-entry/current-selection-repair.d.ts +17 -0
  295. package/dist/domains/comet-entry/current-selection-repair.d.ts.map +1 -0
  296. package/dist/domains/comet-entry/current-selection-repair.js +19 -0
  297. package/dist/domains/comet-entry/current-selection-repair.js.map +1 -0
  298. package/dist/domains/comet-entry/current-selection.d.ts +28 -0
  299. package/dist/domains/comet-entry/current-selection.d.ts.map +1 -0
  300. package/dist/domains/comet-entry/current-selection.js +114 -0
  301. package/dist/domains/comet-entry/current-selection.js.map +1 -0
  302. package/dist/domains/comet-entry/entry-runtime-entry.d.ts +2 -0
  303. package/dist/domains/comet-entry/entry-runtime-entry.d.ts.map +1 -0
  304. package/dist/domains/comet-entry/entry-runtime-entry.js +3 -0
  305. package/dist/domains/comet-entry/entry-runtime-entry.js.map +1 -0
  306. package/dist/domains/comet-entry/entry-runtime.d.ts +7 -0
  307. package/dist/domains/comet-entry/entry-runtime.d.ts.map +1 -0
  308. package/dist/domains/comet-entry/entry-runtime.js +55 -0
  309. package/dist/domains/comet-entry/entry-runtime.js.map +1 -0
  310. package/dist/domains/comet-entry/hook-adapter.d.ts +6 -0
  311. package/dist/domains/comet-entry/hook-adapter.d.ts.map +1 -0
  312. package/dist/domains/comet-entry/hook-adapter.js +202 -0
  313. package/dist/domains/comet-entry/hook-adapter.js.map +1 -0
  314. package/dist/domains/comet-entry/hook-router-entry.d.ts +8 -0
  315. package/dist/domains/comet-entry/hook-router-entry.d.ts.map +1 -0
  316. package/dist/domains/comet-entry/hook-router-entry.js +88 -0
  317. package/dist/domains/comet-entry/hook-router-entry.js.map +1 -0
  318. package/dist/domains/comet-entry/hook-router.d.ts +32 -0
  319. package/dist/domains/comet-entry/hook-router.d.ts.map +1 -0
  320. package/dist/domains/comet-entry/hook-router.js +133 -0
  321. package/dist/domains/comet-entry/hook-router.js.map +1 -0
  322. package/dist/domains/comet-entry/hook-types.d.ts +20 -0
  323. package/dist/domains/comet-entry/hook-types.d.ts.map +1 -0
  324. package/dist/domains/comet-entry/hook-types.js +2 -0
  325. package/dist/domains/comet-entry/hook-types.js.map +1 -0
  326. package/dist/domains/comet-entry/init-workflow.d.ts +19 -0
  327. package/dist/domains/comet-entry/init-workflow.d.ts.map +1 -0
  328. package/dist/domains/comet-entry/init-workflow.js +132 -0
  329. package/dist/domains/comet-entry/init-workflow.js.map +1 -0
  330. package/dist/domains/comet-entry/project-status.d.ts +3 -0
  331. package/dist/domains/comet-entry/project-status.d.ts.map +1 -0
  332. package/dist/domains/comet-entry/project-status.js +291 -0
  333. package/dist/domains/comet-entry/project-status.js.map +1 -0
  334. package/dist/domains/comet-entry/resolve-entry.d.ts +3 -0
  335. package/dist/domains/comet-entry/resolve-entry.d.ts.map +1 -0
  336. package/dist/domains/comet-entry/resolve-entry.js +18 -0
  337. package/dist/domains/comet-entry/resolve-entry.js.map +1 -0
  338. package/dist/domains/comet-entry/resume-probe.d.ts +34 -0
  339. package/dist/domains/comet-entry/resume-probe.d.ts.map +1 -0
  340. package/dist/domains/comet-entry/resume-probe.js +462 -0
  341. package/dist/domains/comet-entry/resume-probe.js.map +1 -0
  342. package/dist/domains/comet-entry/types.d.ts +60 -0
  343. package/dist/domains/comet-entry/types.d.ts.map +1 -0
  344. package/dist/domains/comet-entry/types.js +2 -0
  345. package/dist/domains/comet-entry/types.js.map +1 -0
  346. package/dist/domains/comet-entry/workflow-resolution.d.ts +8 -0
  347. package/dist/domains/comet-entry/workflow-resolution.d.ts.map +1 -0
  348. package/dist/domains/comet-entry/workflow-resolution.js +16 -0
  349. package/dist/domains/comet-entry/workflow-resolution.js.map +1 -0
  350. package/dist/domains/comet-native/index.d.ts +35 -0
  351. package/dist/domains/comet-native/index.d.ts.map +1 -0
  352. package/dist/domains/comet-native/index.js +35 -0
  353. package/dist/domains/comet-native/index.js.map +1 -0
  354. package/dist/domains/comet-native/native-acceptance.d.ts +53 -0
  355. package/dist/domains/comet-native/native-acceptance.d.ts.map +1 -0
  356. package/dist/domains/comet-native/native-acceptance.js +658 -0
  357. package/dist/domains/comet-native/native-acceptance.js.map +1 -0
  358. package/dist/domains/comet-native/native-archive-content.d.ts +26 -0
  359. package/dist/domains/comet-native/native-archive-content.d.ts.map +1 -0
  360. package/dist/domains/comet-native/native-archive-content.js +159 -0
  361. package/dist/domains/comet-native/native-archive-content.js.map +1 -0
  362. package/dist/domains/comet-native/native-archive-inspection.d.ts +9 -0
  363. package/dist/domains/comet-native/native-archive-inspection.d.ts.map +1 -0
  364. package/dist/domains/comet-native/native-archive-inspection.js +97 -0
  365. package/dist/domains/comet-native/native-archive-inspection.js.map +1 -0
  366. package/dist/domains/comet-native/native-archive-preflight.d.ts +54 -0
  367. package/dist/domains/comet-native/native-archive-preflight.d.ts.map +1 -0
  368. package/dist/domains/comet-native/native-archive-preflight.js +222 -0
  369. package/dist/domains/comet-native/native-archive-preflight.js.map +1 -0
  370. package/dist/domains/comet-native/native-archive-transaction.d.ts +20 -0
  371. package/dist/domains/comet-native/native-archive-transaction.d.ts.map +1 -0
  372. package/dist/domains/comet-native/native-archive-transaction.js +1183 -0
  373. package/dist/domains/comet-native/native-archive-transaction.js.map +1 -0
  374. package/dist/domains/comet-native/native-archive.d.ts +36 -0
  375. package/dist/domains/comet-native/native-archive.d.ts.map +1 -0
  376. package/dist/domains/comet-native/native-archive.js +422 -0
  377. package/dist/domains/comet-native/native-archive.js.map +1 -0
  378. package/dist/domains/comet-native/native-artifacts.d.ts +10 -0
  379. package/dist/domains/comet-native/native-artifacts.d.ts.map +1 -0
  380. package/dist/domains/comet-native/native-artifacts.js +204 -0
  381. package/dist/domains/comet-native/native-artifacts.js.map +1 -0
  382. package/dist/domains/comet-native/native-atomic-file.d.ts +10 -0
  383. package/dist/domains/comet-native/native-atomic-file.d.ts.map +1 -0
  384. package/dist/domains/comet-native/native-atomic-file.js +179 -0
  385. package/dist/domains/comet-native/native-atomic-file.js.map +1 -0
  386. package/dist/domains/comet-native/native-bounded-file.d.ts +19 -0
  387. package/dist/domains/comet-native/native-bounded-file.d.ts.map +1 -0
  388. package/dist/domains/comet-native/native-bounded-file.js +184 -0
  389. package/dist/domains/comet-native/native-bounded-file.js.map +1 -0
  390. package/dist/domains/comet-native/native-build-evidence.d.ts +42 -0
  391. package/dist/domains/comet-native/native-build-evidence.d.ts.map +1 -0
  392. package/dist/domains/comet-native/native-build-evidence.js +257 -0
  393. package/dist/domains/comet-native/native-build-evidence.js.map +1 -0
  394. package/dist/domains/comet-native/native-canonical-hash.d.ts +10 -0
  395. package/dist/domains/comet-native/native-canonical-hash.d.ts.map +1 -0
  396. package/dist/domains/comet-native/native-canonical-hash.js +100 -0
  397. package/dist/domains/comet-native/native-canonical-hash.js.map +1 -0
  398. package/dist/domains/comet-native/native-change-recovery.d.ts +11 -0
  399. package/dist/domains/comet-native/native-change-recovery.d.ts.map +1 -0
  400. package/dist/domains/comet-native/native-change-recovery.js +15 -0
  401. package/dist/domains/comet-native/native-change-recovery.js.map +1 -0
  402. package/dist/domains/comet-native/native-change.d.ts +64 -0
  403. package/dist/domains/comet-native/native-change.d.ts.map +1 -0
  404. package/dist/domains/comet-native/native-change.js +738 -0
  405. package/dist/domains/comet-native/native-change.js.map +1 -0
  406. package/dist/domains/comet-native/native-check-receipt-model.d.ts +63 -0
  407. package/dist/domains/comet-native/native-check-receipt-model.d.ts.map +1 -0
  408. package/dist/domains/comet-native/native-check-receipt-model.js +352 -0
  409. package/dist/domains/comet-native/native-check-receipt-model.js.map +1 -0
  410. package/dist/domains/comet-native/native-check-receipt-storage.d.ts +10 -0
  411. package/dist/domains/comet-native/native-check-receipt-storage.d.ts.map +1 -0
  412. package/dist/domains/comet-native/native-check-receipt-storage.js +200 -0
  413. package/dist/domains/comet-native/native-check-receipt-storage.js.map +1 -0
  414. package/dist/domains/comet-native/native-check-receipt.d.ts +19 -0
  415. package/dist/domains/comet-native/native-check-receipt.d.ts.map +1 -0
  416. package/dist/domains/comet-native/native-check-receipt.js +453 -0
  417. package/dist/domains/comet-native/native-check-receipt.js.map +1 -0
  418. package/dist/domains/comet-native/native-check.d.ts +24 -0
  419. package/dist/domains/comet-native/native-check.d.ts.map +1 -0
  420. package/dist/domains/comet-native/native-check.js +38 -0
  421. package/dist/domains/comet-native/native-check.js.map +1 -0
  422. package/dist/domains/comet-native/native-checkpoint-journal.d.ts +13 -0
  423. package/dist/domains/comet-native/native-checkpoint-journal.d.ts.map +1 -0
  424. package/dist/domains/comet-native/native-checkpoint-journal.js +53 -0
  425. package/dist/domains/comet-native/native-checkpoint-journal.js.map +1 -0
  426. package/dist/domains/comet-native/native-checkpoint-storage.d.ts +43 -0
  427. package/dist/domains/comet-native/native-checkpoint-storage.d.ts.map +1 -0
  428. package/dist/domains/comet-native/native-checkpoint-storage.js +487 -0
  429. package/dist/domains/comet-native/native-checkpoint-storage.js.map +1 -0
  430. package/dist/domains/comet-native/native-cli-entry.d.ts +2 -0
  431. package/dist/domains/comet-native/native-cli-entry.d.ts.map +1 -0
  432. package/dist/domains/comet-native/native-cli-entry.js +18 -0
  433. package/dist/domains/comet-native/native-cli-entry.js.map +1 -0
  434. package/dist/domains/comet-native/native-cli.d.ts +7 -0
  435. package/dist/domains/comet-native/native-cli.d.ts.map +1 -0
  436. package/dist/domains/comet-native/native-cli.js +1256 -0
  437. package/dist/domains/comet-native/native-cli.js.map +1 -0
  438. package/dist/domains/comet-native/native-config.d.ts +23 -0
  439. package/dist/domains/comet-native/native-config.d.ts.map +1 -0
  440. package/dist/domains/comet-native/native-config.js +60 -0
  441. package/dist/domains/comet-native/native-config.js.map +1 -0
  442. package/dist/domains/comet-native/native-conflict-inspection.d.ts +17 -0
  443. package/dist/domains/comet-native/native-conflict-inspection.d.ts.map +1 -0
  444. package/dist/domains/comet-native/native-conflict-inspection.js +90 -0
  445. package/dist/domains/comet-native/native-conflict-inspection.js.map +1 -0
  446. package/dist/domains/comet-native/native-conflict-radar.d.ts +75 -0
  447. package/dist/domains/comet-native/native-conflict-radar.d.ts.map +1 -0
  448. package/dist/domains/comet-native/native-conflict-radar.js +326 -0
  449. package/dist/domains/comet-native/native-conflict-radar.js.map +1 -0
  450. package/dist/domains/comet-native/native-continuation.d.ts +12 -0
  451. package/dist/domains/comet-native/native-continuation.d.ts.map +1 -0
  452. package/dist/domains/comet-native/native-continuation.js +201 -0
  453. package/dist/domains/comet-native/native-continuation.js.map +1 -0
  454. package/dist/domains/comet-native/native-contract-files.d.ts +24 -0
  455. package/dist/domains/comet-native/native-contract-files.d.ts.map +1 -0
  456. package/dist/domains/comet-native/native-contract-files.js +66 -0
  457. package/dist/domains/comet-native/native-contract-files.js.map +1 -0
  458. package/dist/domains/comet-native/native-contract.d.ts +41 -0
  459. package/dist/domains/comet-native/native-contract.d.ts.map +1 -0
  460. package/dist/domains/comet-native/native-contract.js +142 -0
  461. package/dist/domains/comet-native/native-contract.js.map +1 -0
  462. package/dist/domains/comet-native/native-controller-trust.d.ts +21 -0
  463. package/dist/domains/comet-native/native-controller-trust.d.ts.map +1 -0
  464. package/dist/domains/comet-native/native-controller-trust.js +140 -0
  465. package/dist/domains/comet-native/native-controller-trust.js.map +1 -0
  466. package/dist/domains/comet-native/native-diagnostics.d.ts +25 -0
  467. package/dist/domains/comet-native/native-diagnostics.d.ts.map +1 -0
  468. package/dist/domains/comet-native/native-diagnostics.js +551 -0
  469. package/dist/domains/comet-native/native-diagnostics.js.map +1 -0
  470. package/dist/domains/comet-native/native-doctor.d.ts +12 -0
  471. package/dist/domains/comet-native/native-doctor.d.ts.map +1 -0
  472. package/dist/domains/comet-native/native-doctor.js +771 -0
  473. package/dist/domains/comet-native/native-doctor.js.map +1 -0
  474. package/dist/domains/comet-native/native-evidence-retention.d.ts +37 -0
  475. package/dist/domains/comet-native/native-evidence-retention.d.ts.map +1 -0
  476. package/dist/domains/comet-native/native-evidence-retention.js +916 -0
  477. package/dist/domains/comet-native/native-evidence-retention.js.map +1 -0
  478. package/dist/domains/comet-native/native-evidence-storage.d.ts +54 -0
  479. package/dist/domains/comet-native/native-evidence-storage.d.ts.map +1 -0
  480. package/dist/domains/comet-native/native-evidence-storage.js +401 -0
  481. package/dist/domains/comet-native/native-evidence-storage.js.map +1 -0
  482. package/dist/domains/comet-native/native-file-identity.d.ts +3 -0
  483. package/dist/domains/comet-native/native-file-identity.d.ts.map +1 -0
  484. package/dist/domains/comet-native/native-file-identity.js +2 -0
  485. package/dist/domains/comet-native/native-file-identity.js.map +1 -0
  486. package/dist/domains/comet-native/native-findings.d.ts +8 -0
  487. package/dist/domains/comet-native/native-findings.d.ts.map +1 -0
  488. package/dist/domains/comet-native/native-findings.js +254 -0
  489. package/dist/domains/comet-native/native-findings.js.map +1 -0
  490. package/dist/domains/comet-native/native-guards.d.ts +8 -0
  491. package/dist/domains/comet-native/native-guards.d.ts.map +1 -0
  492. package/dist/domains/comet-native/native-guards.js +140 -0
  493. package/dist/domains/comet-native/native-guards.js.map +1 -0
  494. package/dist/domains/comet-native/native-hash.d.ts +3 -0
  495. package/dist/domains/comet-native/native-hash.d.ts.map +1 -0
  496. package/dist/domains/comet-native/native-hash.js +12 -0
  497. package/dist/domains/comet-native/native-hash.js.map +1 -0
  498. package/dist/domains/comet-native/native-hook-guard.d.ts +17 -0
  499. package/dist/domains/comet-native/native-hook-guard.d.ts.map +1 -0
  500. package/dist/domains/comet-native/native-hook-guard.js +154 -0
  501. package/dist/domains/comet-native/native-hook-guard.js.map +1 -0
  502. package/dist/domains/comet-native/native-independent-review.d.ts +28 -0
  503. package/dist/domains/comet-native/native-independent-review.d.ts.map +1 -0
  504. package/dist/domains/comet-native/native-independent-review.js +134 -0
  505. package/dist/domains/comet-native/native-independent-review.js.map +1 -0
  506. package/dist/domains/comet-native/native-lock.d.ts +47 -0
  507. package/dist/domains/comet-native/native-lock.d.ts.map +1 -0
  508. package/dist/domains/comet-native/native-lock.js +390 -0
  509. package/dist/domains/comet-native/native-lock.js.map +1 -0
  510. package/dist/domains/comet-native/native-mutation-lock.d.ts +5 -0
  511. package/dist/domains/comet-native/native-mutation-lock.d.ts.map +1 -0
  512. package/dist/domains/comet-native/native-mutation-lock.js +66 -0
  513. package/dist/domains/comet-native/native-mutation-lock.js.map +1 -0
  514. package/dist/domains/comet-native/native-paths.d.ts +10 -0
  515. package/dist/domains/comet-native/native-paths.d.ts.map +1 -0
  516. package/dist/domains/comet-native/native-paths.js +160 -0
  517. package/dist/domains/comet-native/native-paths.js.map +1 -0
  518. package/dist/domains/comet-native/native-progress-checkpoint.d.ts +13 -0
  519. package/dist/domains/comet-native/native-progress-checkpoint.d.ts.map +1 -0
  520. package/dist/domains/comet-native/native-progress-checkpoint.js +104 -0
  521. package/dist/domains/comet-native/native-progress-checkpoint.js.map +1 -0
  522. package/dist/domains/comet-native/native-protected-file.d.ts +113 -0
  523. package/dist/domains/comet-native/native-protected-file.d.ts.map +1 -0
  524. package/dist/domains/comet-native/native-protected-file.js +510 -0
  525. package/dist/domains/comet-native/native-protected-file.js.map +1 -0
  526. package/dist/domains/comet-native/native-redaction.d.ts +2 -0
  527. package/dist/domains/comet-native/native-redaction.d.ts.map +1 -0
  528. package/dist/domains/comet-native/native-redaction.js +18 -0
  529. package/dist/domains/comet-native/native-redaction.js.map +1 -0
  530. package/dist/domains/comet-native/native-repair-integration.d.ts +46 -0
  531. package/dist/domains/comet-native/native-repair-integration.d.ts.map +1 -0
  532. package/dist/domains/comet-native/native-repair-integration.js +235 -0
  533. package/dist/domains/comet-native/native-repair-integration.js.map +1 -0
  534. package/dist/domains/comet-native/native-repair-runtime.d.ts +78 -0
  535. package/dist/domains/comet-native/native-repair-runtime.d.ts.map +1 -0
  536. package/dist/domains/comet-native/native-repair-runtime.js +593 -0
  537. package/dist/domains/comet-native/native-repair-runtime.js.map +1 -0
  538. package/dist/domains/comet-native/native-repair-stagnation.d.ts +89 -0
  539. package/dist/domains/comet-native/native-repair-stagnation.d.ts.map +1 -0
  540. package/dist/domains/comet-native/native-repair-stagnation.js +308 -0
  541. package/dist/domains/comet-native/native-repair-stagnation.js.map +1 -0
  542. package/dist/domains/comet-native/native-resume-view.d.ts +14 -0
  543. package/dist/domains/comet-native/native-resume-view.d.ts.map +1 -0
  544. package/dist/domains/comet-native/native-resume-view.js +105 -0
  545. package/dist/domains/comet-native/native-resume-view.js.map +1 -0
  546. package/dist/domains/comet-native/native-review-contract.d.ts +6 -0
  547. package/dist/domains/comet-native/native-review-contract.d.ts.map +1 -0
  548. package/dist/domains/comet-native/native-review-contract.js +6 -0
  549. package/dist/domains/comet-native/native-review-contract.js.map +1 -0
  550. package/dist/domains/comet-native/native-review-identity.d.ts +50 -0
  551. package/dist/domains/comet-native/native-review-identity.d.ts.map +1 -0
  552. package/dist/domains/comet-native/native-review-identity.js +209 -0
  553. package/dist/domains/comet-native/native-review-identity.js.map +1 -0
  554. package/dist/domains/comet-native/native-review-signer.d.ts +24 -0
  555. package/dist/domains/comet-native/native-review-signer.d.ts.map +1 -0
  556. package/dist/domains/comet-native/native-review-signer.js +125 -0
  557. package/dist/domains/comet-native/native-review-signer.js.map +1 -0
  558. package/dist/domains/comet-native/native-review-trust.d.ts +35 -0
  559. package/dist/domains/comet-native/native-review-trust.d.ts.map +1 -0
  560. package/dist/domains/comet-native/native-review-trust.js +176 -0
  561. package/dist/domains/comet-native/native-review-trust.js.map +1 -0
  562. package/dist/domains/comet-native/native-revision.d.ts +20 -0
  563. package/dist/domains/comet-native/native-revision.d.ts.map +1 -0
  564. package/dist/domains/comet-native/native-revision.js +32 -0
  565. package/dist/domains/comet-native/native-revision.js.map +1 -0
  566. package/dist/domains/comet-native/native-root-move.d.ts +20 -0
  567. package/dist/domains/comet-native/native-root-move.d.ts.map +1 -0
  568. package/dist/domains/comet-native/native-root-move.js +818 -0
  569. package/dist/domains/comet-native/native-root-move.js.map +1 -0
  570. package/dist/domains/comet-native/native-run-consistency.d.ts +3 -0
  571. package/dist/domains/comet-native/native-run-consistency.d.ts.map +1 -0
  572. package/dist/domains/comet-native/native-run-consistency.js +136 -0
  573. package/dist/domains/comet-native/native-run-consistency.js.map +1 -0
  574. package/dist/domains/comet-native/native-run-store.d.ts +41 -0
  575. package/dist/domains/comet-native/native-run-store.d.ts.map +1 -0
  576. package/dist/domains/comet-native/native-run-store.js +452 -0
  577. package/dist/domains/comet-native/native-run-store.js.map +1 -0
  578. package/dist/domains/comet-native/native-runtime-package.d.ts +16 -0
  579. package/dist/domains/comet-native/native-runtime-package.d.ts.map +1 -0
  580. package/dist/domains/comet-native/native-runtime-package.js +72 -0
  581. package/dist/domains/comet-native/native-runtime-package.js.map +1 -0
  582. package/dist/domains/comet-native/native-schema-migration.d.ts +11 -0
  583. package/dist/domains/comet-native/native-schema-migration.d.ts.map +1 -0
  584. package/dist/domains/comet-native/native-schema-migration.js +900 -0
  585. package/dist/domains/comet-native/native-schema-migration.js.map +1 -0
  586. package/dist/domains/comet-native/native-selection.d.ts +12 -0
  587. package/dist/domains/comet-native/native-selection.d.ts.map +1 -0
  588. package/dist/domains/comet-native/native-selection.js +52 -0
  589. package/dist/domains/comet-native/native-selection.js.map +1 -0
  590. package/dist/domains/comet-native/native-sensitive-paths.d.ts +7 -0
  591. package/dist/domains/comet-native/native-sensitive-paths.d.ts.map +1 -0
  592. package/dist/domains/comet-native/native-sensitive-paths.js +69 -0
  593. package/dist/domains/comet-native/native-sensitive-paths.js.map +1 -0
  594. package/dist/domains/comet-native/native-snapshot.d.ts +78 -0
  595. package/dist/domains/comet-native/native-snapshot.d.ts.map +1 -0
  596. package/dist/domains/comet-native/native-snapshot.js +2572 -0
  597. package/dist/domains/comet-native/native-snapshot.js.map +1 -0
  598. package/dist/domains/comet-native/native-specs.d.ts +12 -0
  599. package/dist/domains/comet-native/native-specs.d.ts.map +1 -0
  600. package/dist/domains/comet-native/native-specs.js +270 -0
  601. package/dist/domains/comet-native/native-specs.js.map +1 -0
  602. package/dist/domains/comet-native/native-trajectory-limits.d.ts +7 -0
  603. package/dist/domains/comet-native/native-trajectory-limits.d.ts.map +1 -0
  604. package/dist/domains/comet-native/native-trajectory-limits.js +13 -0
  605. package/dist/domains/comet-native/native-trajectory-limits.js.map +1 -0
  606. package/dist/domains/comet-native/native-trajectory-recovery.d.ts +37 -0
  607. package/dist/domains/comet-native/native-trajectory-recovery.d.ts.map +1 -0
  608. package/dist/domains/comet-native/native-trajectory-recovery.js +133 -0
  609. package/dist/domains/comet-native/native-trajectory-recovery.js.map +1 -0
  610. package/dist/domains/comet-native/native-trajectory.d.ts +16 -0
  611. package/dist/domains/comet-native/native-trajectory.d.ts.map +1 -0
  612. package/dist/domains/comet-native/native-trajectory.js +27 -0
  613. package/dist/domains/comet-native/native-trajectory.js.map +1 -0
  614. package/dist/domains/comet-native/native-transaction.d.ts +45 -0
  615. package/dist/domains/comet-native/native-transaction.d.ts.map +1 -0
  616. package/dist/domains/comet-native/native-transaction.js +846 -0
  617. package/dist/domains/comet-native/native-transaction.js.map +1 -0
  618. package/dist/domains/comet-native/native-transition-evidence.d.ts +4 -0
  619. package/dist/domains/comet-native/native-transition-evidence.d.ts.map +1 -0
  620. package/dist/domains/comet-native/native-transition-evidence.js +27 -0
  621. package/dist/domains/comet-native/native-transition-evidence.js.map +1 -0
  622. package/dist/domains/comet-native/native-transition-journal.d.ts +30 -0
  623. package/dist/domains/comet-native/native-transition-journal.d.ts.map +1 -0
  624. package/dist/domains/comet-native/native-transition-journal.js +819 -0
  625. package/dist/domains/comet-native/native-transition-journal.js.map +1 -0
  626. package/dist/domains/comet-native/native-transitions.d.ts +15 -0
  627. package/dist/domains/comet-native/native-transitions.d.ts.map +1 -0
  628. package/dist/domains/comet-native/native-transitions.js +683 -0
  629. package/dist/domains/comet-native/native-transitions.js.map +1 -0
  630. package/dist/domains/comet-native/native-types.d.ts +547 -0
  631. package/dist/domains/comet-native/native-types.d.ts.map +1 -0
  632. package/dist/domains/comet-native/native-types.js +8 -0
  633. package/dist/domains/comet-native/native-types.js.map +1 -0
  634. package/dist/domains/comet-native/native-verification-evidence.d.ts +136 -0
  635. package/dist/domains/comet-native/native-verification-evidence.d.ts.map +1 -0
  636. package/dist/domains/comet-native/native-verification-evidence.js +824 -0
  637. package/dist/domains/comet-native/native-verification-evidence.js.map +1 -0
  638. package/dist/domains/comet-native/native-verification-receipt-runtime.d.ts +188 -0
  639. package/dist/domains/comet-native/native-verification-receipt-runtime.d.ts.map +1 -0
  640. package/dist/domains/comet-native/native-verification-receipt-runtime.js +1129 -0
  641. package/dist/domains/comet-native/native-verification-receipt-runtime.js.map +1 -0
  642. package/dist/domains/comet-native/native-verification-receipt.d.ts +165 -0
  643. package/dist/domains/comet-native/native-verification-receipt.d.ts.map +1 -0
  644. package/dist/domains/comet-native/native-verification-receipt.js +636 -0
  645. package/dist/domains/comet-native/native-verification-receipt.js.map +1 -0
  646. package/dist/domains/comet-native/native-verification-runtime.d.ts +61 -0
  647. package/dist/domains/comet-native/native-verification-runtime.d.ts.map +1 -0
  648. package/dist/domains/comet-native/native-verification-runtime.js +609 -0
  649. package/dist/domains/comet-native/native-verification-runtime.js.map +1 -0
  650. package/dist/domains/comet-native/native-verification-scope.d.ts +118 -0
  651. package/dist/domains/comet-native/native-verification-scope.d.ts.map +1 -0
  652. package/dist/domains/comet-native/native-verification-scope.js +1045 -0
  653. package/dist/domains/comet-native/native-verification-scope.js.map +1 -0
  654. package/dist/domains/comet-native/native-workspace.d.ts +46 -0
  655. package/dist/domains/comet-native/native-workspace.d.ts.map +1 -0
  656. package/dist/domains/comet-native/native-workspace.js +276 -0
  657. package/dist/domains/comet-native/native-workspace.js.map +1 -0
  658. package/dist/domains/dashboard/collector.d.ts.map +1 -1
  659. package/dist/domains/dashboard/collector.js +182 -75
  660. package/dist/domains/dashboard/collector.js.map +1 -1
  661. package/dist/domains/dashboard/native-adapter.d.ts +157 -0
  662. package/dist/domains/dashboard/native-adapter.d.ts.map +1 -0
  663. package/dist/domains/dashboard/native-adapter.js +302 -0
  664. package/dist/domains/dashboard/native-adapter.js.map +1 -0
  665. package/dist/domains/dashboard/native-collector.d.ts +6 -0
  666. package/dist/domains/dashboard/native-collector.d.ts.map +1 -0
  667. package/dist/domains/dashboard/native-collector.js +289 -0
  668. package/dist/domains/dashboard/native-collector.js.map +1 -0
  669. package/dist/domains/dashboard/types.d.ts +10 -0
  670. package/dist/domains/dashboard/types.d.ts.map +1 -1
  671. package/dist/domains/dashboard/verify-parser.d.ts.map +1 -1
  672. package/dist/domains/dashboard/verify-parser.js +37 -31
  673. package/dist/domains/dashboard/verify-parser.js.map +1 -1
  674. package/dist/domains/dashboard/web/assets/_commonjsHelpers-CqkleIqs.js +1 -0
  675. package/dist/domains/dashboard/web/assets/arc-BXWNV2Qv.js +1 -0
  676. package/dist/domains/dashboard/web/assets/architectureDiagram-3BPJPVTR-CjVHPivo.js +36 -0
  677. package/dist/domains/dashboard/web/assets/blockDiagram-GPEHLZMM-P2PGImSM.js +132 -0
  678. package/dist/domains/dashboard/web/assets/c4Diagram-AAUBKEIU-fTj6Xhs1.js +10 -0
  679. package/dist/domains/dashboard/web/assets/channel--JtnhJr8.js +1 -0
  680. package/dist/domains/dashboard/web/assets/chunk-2J33WTMH-BjFDZ5yo.js +1 -0
  681. package/dist/domains/dashboard/web/assets/chunk-4BX2VUAB-BAUkbZdT.js +1 -0
  682. package/dist/domains/dashboard/web/assets/chunk-55IACEB6-DBmuiYme.js +1 -0
  683. package/dist/domains/dashboard/web/assets/chunk-727SXJPM-Do9ufCgY.js +206 -0
  684. package/dist/domains/dashboard/web/assets/chunk-AQP2D5EJ-qRQWlB5d.js +231 -0
  685. package/dist/domains/dashboard/web/assets/chunk-FMBD7UC4-BzDzeJ4_.js +15 -0
  686. package/dist/domains/dashboard/web/assets/chunk-ND2GUHAM-OQcAmIvL.js +1 -0
  687. package/dist/domains/dashboard/web/assets/chunk-QZHKN3VN-BiRfH4d2.js +1 -0
  688. package/dist/domains/dashboard/web/assets/classDiagram-4FO5ZUOK-BRGmx8Iz.js +1 -0
  689. package/dist/domains/dashboard/web/assets/classDiagram-v2-Q7XG4LA2-BRGmx8Iz.js +1 -0
  690. package/dist/domains/dashboard/web/assets/cose-bilkent-S5V4N54A-CZk37fGn.js +1 -0
  691. package/dist/domains/dashboard/web/assets/cynefin-VYW2F7L2-B3F-qRTJ.js +166 -0
  692. package/dist/domains/dashboard/web/assets/cytoscape.esm-D3_iZ_3b.js +321 -0
  693. package/dist/domains/dashboard/web/assets/dagre-BM42HDAG-D5BQ0eqN.js +4 -0
  694. package/dist/domains/dashboard/web/assets/defaultLocale-DX6XiGOO.js +1 -0
  695. package/dist/domains/dashboard/web/assets/demo-BuVau32v.js +25 -0
  696. package/dist/domains/dashboard/web/assets/diagram-2AECGRRQ-33mXstha.js +43 -0
  697. package/dist/domains/dashboard/web/assets/diagram-5GNKFQAL-BWHCMFvD.js +10 -0
  698. package/dist/domains/dashboard/web/assets/diagram-KO2AKTUF-DrPGimEt.js +3 -0
  699. package/dist/domains/dashboard/web/assets/diagram-LMA3HP47-BBlsg7jG.js +24 -0
  700. package/dist/domains/dashboard/web/assets/diagram-OG6HWLK6-CsaFSpHi.js +24 -0
  701. package/dist/domains/dashboard/web/assets/erDiagram-TEJ5UH35-CoB0mzhk.js +85 -0
  702. package/dist/domains/dashboard/web/assets/flowDiagram-I6XJVG4X-lT53XfSE.js +162 -0
  703. package/dist/domains/dashboard/web/assets/ganttDiagram-6RSMTGT7-D1SQ56fl.js +292 -0
  704. package/dist/domains/dashboard/web/assets/gitGraphDiagram-PVQCEYII-D4oDMS5x.js +106 -0
  705. package/dist/domains/dashboard/web/assets/graph--OzhPTMs.js +1 -0
  706. package/dist/domains/dashboard/web/assets/index-D-AGxvI4.css +1 -0
  707. package/dist/domains/dashboard/web/assets/index-DlSYK56b.js +139 -0
  708. package/dist/domains/dashboard/web/assets/index-Msce_H_q.js +24 -0
  709. package/dist/domains/dashboard/web/assets/index-QO0z6F4w.js +10 -0
  710. package/dist/domains/dashboard/web/assets/infoDiagram-5YYISTIA-BeICn98s.js +2 -0
  711. package/dist/domains/dashboard/web/assets/init-Gi6I4Gst.js +1 -0
  712. package/dist/domains/dashboard/web/assets/ishikawaDiagram-YF4QCWOH-Dkspu33d.js +70 -0
  713. package/dist/domains/dashboard/web/assets/journeyDiagram-JHISSGLW-C-EM1sZl.js +139 -0
  714. package/dist/domains/dashboard/web/assets/kanban-definition-UN3LZRKU-BTbB0IO2.js +89 -0
  715. package/dist/domains/dashboard/web/assets/katex-HP8lGamR.js +257 -0
  716. package/dist/domains/dashboard/web/assets/layout-SsrduOYp.js +1 -0
  717. package/dist/domains/dashboard/web/assets/linear-Cp0UrqDr.js +1 -0
  718. package/dist/domains/dashboard/web/assets/marked.esm-DECB3bxB.js +64 -0
  719. package/dist/domains/dashboard/web/assets/mermaid.core-CucmqsLW.js +301 -0
  720. package/dist/domains/dashboard/web/assets/mindmap-definition-RKZ34NQL-CjEshF1X.js +96 -0
  721. package/dist/domains/dashboard/web/assets/ordinal-Cboi1Yqb.js +1 -0
  722. package/dist/domains/dashboard/web/assets/pieDiagram-4H26LBE5-DrwFnX1b.js +30 -0
  723. package/dist/domains/dashboard/web/assets/purify.es-VaSPOPhr.js +3 -0
  724. package/dist/domains/dashboard/web/assets/quadrantDiagram-W4KKPZXB-CjG6pBR2.js +7 -0
  725. package/dist/domains/dashboard/web/assets/requirementDiagram-4Y6WPE33-BpUQVqCV.js +84 -0
  726. package/dist/domains/dashboard/web/assets/sankeyDiagram-5OEKKPKP-BeGkEvzR.js +40 -0
  727. package/dist/domains/dashboard/web/assets/sequenceDiagram-3UESZ5HK-sSTU3MCO.js +162 -0
  728. package/dist/domains/dashboard/web/assets/stateDiagram-AJRCARHV-CcFBc6qh.js +1 -0
  729. package/dist/domains/dashboard/web/assets/stateDiagram-v2-BHNVJYJU-D5zZYi4x.js +1 -0
  730. package/dist/domains/dashboard/web/assets/timeline-definition-PNZ67QCA-DCN7NjEs.js +120 -0
  731. package/dist/domains/dashboard/web/assets/vennDiagram-CIIHVFJN-DZAN1_rr.js +34 -0
  732. package/dist/domains/dashboard/web/assets/wardleyDiagram-YWT4CUSO-FfkJfr4C.js +78 -0
  733. package/dist/domains/dashboard/web/assets/xychartDiagram-2RQKCTM6-CD8B-EmR.js +7 -0
  734. package/dist/domains/dashboard/web/index.html +16 -16
  735. package/dist/domains/engine/protected-run-file.d.ts +15 -0
  736. package/dist/domains/engine/protected-run-file.d.ts.map +1 -0
  737. package/dist/domains/engine/protected-run-file.js +76 -0
  738. package/dist/domains/engine/protected-run-file.js.map +1 -0
  739. package/dist/domains/engine/run-store.d.ts +12 -11
  740. package/dist/domains/engine/run-store.d.ts.map +1 -1
  741. package/dist/domains/engine/run-store.js +46 -65
  742. package/dist/domains/engine/run-store.js.map +1 -1
  743. package/dist/domains/engine/state.d.ts +4 -3
  744. package/dist/domains/engine/state.d.ts.map +1 -1
  745. package/dist/domains/engine/state.js +10 -21
  746. package/dist/domains/engine/state.js.map +1 -1
  747. package/dist/domains/engine/storage-layout.d.ts +14 -0
  748. package/dist/domains/engine/storage-layout.d.ts.map +1 -0
  749. package/dist/domains/engine/storage-layout.js +32 -0
  750. package/dist/domains/engine/storage-layout.js.map +1 -0
  751. package/dist/domains/engine/storage-run.d.ts +9 -0
  752. package/dist/domains/engine/storage-run.d.ts.map +1 -0
  753. package/dist/domains/engine/storage-run.js +116 -0
  754. package/dist/domains/engine/storage-run.js.map +1 -0
  755. package/dist/domains/engine/types.d.ts +1 -1
  756. package/dist/domains/engine/types.d.ts.map +1 -1
  757. package/dist/domains/factory/package.d.ts.map +1 -1
  758. package/dist/domains/factory/package.js +562 -91
  759. package/dist/domains/factory/package.js.map +1 -1
  760. package/dist/domains/integrations/codegraph.d.ts +13 -2
  761. package/dist/domains/integrations/codegraph.d.ts.map +1 -1
  762. package/dist/domains/integrations/codegraph.js +160 -12
  763. package/dist/domains/integrations/codegraph.js.map +1 -1
  764. package/dist/domains/integrations/openspec.d.ts +12 -2
  765. package/dist/domains/integrations/openspec.d.ts.map +1 -1
  766. package/dist/domains/integrations/openspec.js +256 -47
  767. package/dist/domains/integrations/openspec.js.map +1 -1
  768. package/dist/domains/skill/find.js +8 -7
  769. package/dist/domains/skill/find.js.map +1 -1
  770. package/dist/domains/skill/json-object.d.ts +13 -0
  771. package/dist/domains/skill/json-object.d.ts.map +1 -0
  772. package/dist/domains/skill/json-object.js +24 -0
  773. package/dist/domains/skill/json-object.js.map +1 -0
  774. package/dist/domains/skill/languages.d.ts +2 -1
  775. package/dist/domains/skill/languages.d.ts.map +1 -1
  776. package/dist/domains/skill/languages.js +4 -1
  777. package/dist/domains/skill/languages.js.map +1 -1
  778. package/dist/domains/skill/managed-markdown.d.ts +14 -0
  779. package/dist/domains/skill/managed-markdown.d.ts.map +1 -0
  780. package/dist/domains/skill/managed-markdown.js +126 -0
  781. package/dist/domains/skill/managed-markdown.js.map +1 -0
  782. package/dist/domains/skill/platform-inspect.d.ts +13 -0
  783. package/dist/domains/skill/platform-inspect.d.ts.map +1 -0
  784. package/dist/domains/skill/platform-inspect.js +193 -0
  785. package/dist/domains/skill/platform-inspect.js.map +1 -0
  786. package/dist/domains/skill/platform-install.d.ts +38 -23
  787. package/dist/domains/skill/platform-install.d.ts.map +1 -1
  788. package/dist/domains/skill/platform-install.js +829 -230
  789. package/dist/domains/skill/platform-install.js.map +1 -1
  790. package/dist/domains/skill/project-instructions.d.ts +22 -0
  791. package/dist/domains/skill/project-instructions.d.ts.map +1 -0
  792. package/dist/domains/skill/project-instructions.js +69 -0
  793. package/dist/domains/skill/project-instructions.js.map +1 -0
  794. package/dist/domains/skill/uninstall.d.ts +9 -2
  795. package/dist/domains/skill/uninstall.d.ts.map +1 -1
  796. package/dist/domains/skill/uninstall.js +734 -158
  797. package/dist/domains/skill/uninstall.js.map +1 -1
  798. package/dist/domains/workflow-contract/builtins.d.ts +6 -0
  799. package/dist/domains/workflow-contract/builtins.d.ts.map +1 -1
  800. package/dist/domains/workflow-contract/builtins.js +149 -6
  801. package/dist/domains/workflow-contract/builtins.js.map +1 -1
  802. package/dist/domains/workflow-contract/contained-atomic-write.d.ts +21 -0
  803. package/dist/domains/workflow-contract/contained-atomic-write.d.ts.map +1 -0
  804. package/dist/domains/workflow-contract/contained-atomic-write.js +235 -0
  805. package/dist/domains/workflow-contract/contained-atomic-write.js.map +1 -0
  806. package/dist/domains/workflow-contract/index.d.ts +11 -1
  807. package/dist/domains/workflow-contract/index.d.ts.map +1 -1
  808. package/dist/domains/workflow-contract/index.js +7 -1
  809. package/dist/domains/workflow-contract/index.js.map +1 -1
  810. package/dist/domains/workflow-contract/normalize.d.ts.map +1 -1
  811. package/dist/domains/workflow-contract/normalize.js +30 -11
  812. package/dist/domains/workflow-contract/normalize.js.map +1 -1
  813. package/dist/domains/workflow-contract/project-config-reader.d.ts +24 -0
  814. package/dist/domains/workflow-contract/project-config-reader.d.ts.map +1 -0
  815. package/dist/domains/workflow-contract/project-config-reader.js +54 -0
  816. package/dist/domains/workflow-contract/project-config-reader.js.map +1 -0
  817. package/dist/domains/workflow-contract/project-config-transaction.d.ts +20 -0
  818. package/dist/domains/workflow-contract/project-config-transaction.d.ts.map +1 -0
  819. package/dist/domains/workflow-contract/project-config-transaction.js +293 -0
  820. package/dist/domains/workflow-contract/project-config-transaction.js.map +1 -0
  821. package/dist/domains/workflow-contract/project-config-writer.d.ts +13 -0
  822. package/dist/domains/workflow-contract/project-config-writer.d.ts.map +1 -0
  823. package/dist/domains/workflow-contract/project-config-writer.js +142 -0
  824. package/dist/domains/workflow-contract/project-config-writer.js.map +1 -0
  825. package/dist/domains/workflow-contract/project-config.d.ts +32 -0
  826. package/dist/domains/workflow-contract/project-config.d.ts.map +1 -0
  827. package/dist/domains/workflow-contract/project-config.js +1566 -0
  828. package/dist/domains/workflow-contract/project-config.js.map +1 -0
  829. package/dist/domains/workflow-contract/protected-project-path.d.ts +34 -0
  830. package/dist/domains/workflow-contract/protected-project-path.d.ts.map +1 -0
  831. package/dist/domains/workflow-contract/protected-project-path.js +162 -0
  832. package/dist/domains/workflow-contract/protected-project-path.js.map +1 -0
  833. package/dist/domains/workflow-contract/types.d.ts +67 -2
  834. package/dist/domains/workflow-contract/types.d.ts.map +1 -1
  835. package/dist/domains/workflow-contract/validation.d.ts.map +1 -1
  836. package/dist/domains/workflow-contract/validation.js +14 -5
  837. package/dist/domains/workflow-contract/validation.js.map +1 -1
  838. package/dist/platform/fs/file-identity.d.ts +9 -0
  839. package/dist/platform/fs/file-identity.d.ts.map +1 -0
  840. package/dist/platform/fs/file-identity.js +21 -0
  841. package/dist/platform/fs/file-identity.js.map +1 -0
  842. package/dist/platform/fs/file-system.d.ts +3 -3
  843. package/dist/platform/fs/file-system.d.ts.map +1 -1
  844. package/dist/platform/fs/file-system.js +31 -17
  845. package/dist/platform/fs/file-system.js.map +1 -1
  846. package/dist/platform/fs/race-safe-read.d.ts +47 -0
  847. package/dist/platform/fs/race-safe-read.d.ts.map +1 -0
  848. package/dist/platform/fs/race-safe-read.js +132 -0
  849. package/dist/platform/fs/race-safe-read.js.map +1 -0
  850. package/dist/platform/fs/trusted-readonly-file.d.ts +31 -0
  851. package/dist/platform/fs/trusted-readonly-file.d.ts.map +1 -0
  852. package/dist/platform/fs/trusted-readonly-file.js +107 -0
  853. package/dist/platform/fs/trusted-readonly-file.js.map +1 -0
  854. package/dist/platform/install/detect.d.ts +5 -2
  855. package/dist/platform/install/detect.d.ts.map +1 -1
  856. package/dist/platform/install/detect.js +14 -2
  857. package/dist/platform/install/detect.js.map +1 -1
  858. package/dist/platform/install/platform-targets.d.ts +8 -0
  859. package/dist/platform/install/platform-targets.d.ts.map +1 -0
  860. package/dist/platform/install/platform-targets.js +31 -0
  861. package/dist/platform/install/platform-targets.js.map +1 -0
  862. package/dist/platform/install/platforms.d.ts +10 -1
  863. package/dist/platform/install/platforms.d.ts.map +1 -1
  864. package/dist/platform/install/platforms.js +27 -4
  865. package/dist/platform/install/platforms.js.map +1 -1
  866. package/dist/platform/install/project-registry.d.ts +38 -0
  867. package/dist/platform/install/project-registry.d.ts.map +1 -0
  868. package/dist/platform/install/project-registry.js +213 -0
  869. package/dist/platform/install/project-registry.js.map +1 -0
  870. package/dist/platform/install/skill-root-owner.d.ts +15 -0
  871. package/dist/platform/install/skill-root-owner.d.ts.map +1 -0
  872. package/dist/platform/install/skill-root-owner.js +68 -0
  873. package/dist/platform/install/skill-root-owner.js.map +1 -0
  874. package/dist/platform/paths/git-worktree.d.ts +10 -0
  875. package/dist/platform/paths/git-worktree.d.ts.map +1 -0
  876. package/dist/platform/paths/git-worktree.js +43 -0
  877. package/dist/platform/paths/git-worktree.js.map +1 -0
  878. package/dist/platform/paths/repository-layout.d.ts +16 -0
  879. package/dist/platform/paths/repository-layout.d.ts.map +1 -1
  880. package/dist/platform/paths/repository-layout.js.map +1 -1
  881. package/dist/platform/process/terminate-process-tree.d.ts +3 -0
  882. package/dist/platform/process/terminate-process-tree.d.ts.map +1 -0
  883. package/dist/platform/process/terminate-process-tree.js +65 -0
  884. package/dist/platform/process/terminate-process-tree.js.map +1 -0
  885. package/eval/CLAUDE.md +43 -0
  886. package/eval/README.md +538 -0
  887. package/eval/langsmith/README.md +93 -0
  888. package/eval/langsmith/skills/README.md +5 -0
  889. package/eval/langsmith/tasks/README.md +5 -0
  890. package/eval/langsmith/tests/conftest.py +187 -0
  891. package/eval/langsmith/tests/tasks/test_tasks.py +287 -0
  892. package/eval/langsmith/treatments/README.md +5 -0
  893. package/eval/local/README.md +130 -0
  894. package/eval/local/regression_baseline.json +13 -0
  895. package/eval/local/report-style-demo-assets/quality_cost.en.svg +41 -0
  896. package/eval/local/report-style-demo-assets/quality_cost.zh.svg +41 -0
  897. package/eval/local/report-style-demo-assets/rubric_delta.en.svg +56 -0
  898. package/eval/local/report-style-demo-assets/rubric_delta.zh.svg +56 -0
  899. package/eval/local/report-style-demo-assets/task_outcomes.en.svg +46 -0
  900. package/eval/local/report-style-demo-assets/task_outcomes.zh.svg +46 -0
  901. package/eval/local/report-style-demo.html +867 -0
  902. package/eval/local/scripts/compare_baselines.py +1144 -0
  903. package/eval/local/scripts/generate_report_style_demo_charts.py +322 -0
  904. package/eval/local/scripts/regression_check.py +170 -0
  905. package/eval/local/scripts/render_readme_benchmark_figures.py +416 -0
  906. package/eval/local/scripts/rescore_rubric.py +120 -0
  907. package/eval/local/skills/benchmarks/039-release/comet-classic-039/SKILL.md +282 -0
  908. package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/auto-transition.md +27 -0
  909. package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/comet-yaml-fields.md +68 -0
  910. package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/context-recovery.md +35 -0
  911. package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/debug-gate.md +17 -0
  912. package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/decision-point.md +20 -0
  913. package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/dirty-worktree.md +59 -0
  914. package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/file-structure.md +28 -0
  915. package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/subagent-dispatch.md +113 -0
  916. package/eval/local/skills/benchmarks/039-release/comet-classic-039/rules/comet-phase-guard.md +125 -0
  917. package/eval/local/skills/benchmarks/039-release/comet-classic-039/scripts/comet-archive.sh +311 -0
  918. package/eval/local/skills/benchmarks/039-release/comet-classic-039/scripts/comet-env.sh +110 -0
  919. package/eval/local/skills/benchmarks/039-release/comet-classic-039/scripts/comet-guard.sh +778 -0
  920. package/eval/local/skills/benchmarks/039-release/comet-classic-039/scripts/comet-handoff.sh +390 -0
  921. package/eval/local/skills/benchmarks/039-release/comet-classic-039/scripts/comet-hook-guard.sh +336 -0
  922. package/eval/local/skills/benchmarks/039-release/comet-classic-039/scripts/comet-state.sh +1338 -0
  923. package/eval/local/skills/benchmarks/039-release/comet-classic-039/scripts/comet-yaml-validate.sh +225 -0
  924. package/eval/local/skills/benchmarks/039-release/comet-classic-039-archive/SKILL.md +100 -0
  925. package/eval/local/skills/benchmarks/039-release/comet-classic-039-build/SKILL.md +304 -0
  926. package/eval/local/skills/benchmarks/039-release/comet-classic-039-design/SKILL.md +263 -0
  927. package/eval/local/skills/benchmarks/039-release/comet-classic-039-hotfix/SKILL.md +204 -0
  928. package/eval/local/skills/benchmarks/039-release/comet-classic-039-open/SKILL.md +220 -0
  929. package/eval/local/skills/benchmarks/039-release/comet-classic-039-tweak/SKILL.md +180 -0
  930. package/eval/local/skills/benchmarks/039-release/comet-classic-039-verify/SKILL.md +234 -0
  931. package/eval/local/skills/benchmarks/040-beta/comet/SKILL.md +261 -0
  932. package/eval/local/skills/benchmarks/040-beta/comet/reference/auto-transition.md +27 -0
  933. package/eval/local/skills/benchmarks/040-beta/comet/reference/comet-yaml-fields.md +73 -0
  934. package/eval/local/skills/benchmarks/040-beta/comet/reference/context-recovery.md +45 -0
  935. package/eval/local/skills/benchmarks/040-beta/comet/reference/debug-gate.md +33 -0
  936. package/eval/local/skills/benchmarks/040-beta/comet/reference/decision-point.md +31 -0
  937. package/eval/local/skills/benchmarks/040-beta/comet/reference/dirty-worktree.md +59 -0
  938. package/eval/local/skills/benchmarks/040-beta/comet/reference/file-structure.md +28 -0
  939. package/eval/local/skills/benchmarks/040-beta/comet/reference/intent-frame.md +74 -0
  940. package/eval/local/skills/benchmarks/040-beta/comet/reference/scripts.md +69 -0
  941. package/eval/local/skills/benchmarks/040-beta/comet/reference/subagent-dispatch.md +169 -0
  942. package/eval/local/skills/benchmarks/040-beta/comet/rules/comet-phase-guard.md +130 -0
  943. package/eval/local/skills/benchmarks/040-beta/comet/runtime/classic/checks.yaml +6 -0
  944. package/eval/local/skills/benchmarks/040-beta/comet/runtime/classic/guardrails.yaml +13 -0
  945. package/eval/local/skills/benchmarks/040-beta/comet/runtime/classic/skill.yaml +122 -0
  946. package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-archive.mjs +9515 -0
  947. package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-env.mjs +15 -0
  948. package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-guard.mjs +10173 -0
  949. package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-handoff.mjs +9491 -0
  950. package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-hook-guard.mjs +9175 -0
  951. package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-intent.mjs +404 -0
  952. package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-state.mjs +9273 -0
  953. package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-yaml-validate.mjs +7627 -0
  954. package/eval/local/skills/benchmarks/040-beta/comet-archive/SKILL.md +110 -0
  955. package/eval/local/skills/benchmarks/040-beta/comet-build/SKILL.md +315 -0
  956. package/eval/local/skills/benchmarks/040-beta/comet-design/SKILL.md +260 -0
  957. package/eval/local/skills/benchmarks/040-beta/comet-hotfix/SKILL.md +190 -0
  958. package/eval/local/skills/benchmarks/040-beta/comet-open/SKILL.md +210 -0
  959. package/eval/local/skills/benchmarks/040-beta/comet-tweak/SKILL.md +183 -0
  960. package/eval/local/skills/benchmarks/040-beta/comet-verify/SKILL.md +230 -0
  961. package/eval/local/skills/benchmarks/dependency/claude-md/comet-workflow/CLAUDE.md +12 -0
  962. package/eval/local/skills/benchmarks/dependency/openspec/openspec-apply-change/SKILL.md +156 -0
  963. package/eval/local/skills/benchmarks/dependency/openspec/openspec-archive-change/SKILL.md +114 -0
  964. package/eval/local/skills/benchmarks/dependency/openspec/openspec-bulk-archive-change/SKILL.md +246 -0
  965. package/eval/local/skills/benchmarks/dependency/openspec/openspec-continue-change/SKILL.md +118 -0
  966. package/eval/local/skills/benchmarks/dependency/openspec/openspec-explore/SKILL.md +288 -0
  967. package/eval/local/skills/benchmarks/dependency/openspec/openspec-ff-change/SKILL.md +101 -0
  968. package/eval/local/skills/benchmarks/dependency/openspec/openspec-new-change/SKILL.md +74 -0
  969. package/eval/local/skills/benchmarks/dependency/openspec/openspec-onboard/SKILL.md +554 -0
  970. package/eval/local/skills/benchmarks/dependency/openspec/openspec-propose/SKILL.md +110 -0
  971. package/eval/local/skills/benchmarks/dependency/openspec/openspec-sync-specs/SKILL.md +138 -0
  972. package/eval/local/skills/benchmarks/dependency/openspec/openspec-verify-change/SKILL.md +168 -0
  973. package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/SKILL.md +159 -0
  974. package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/scripts/frame-template.html +213 -0
  975. package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/scripts/helper.js +167 -0
  976. package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/scripts/server.cjs +723 -0
  977. package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/scripts/start-server.sh +209 -0
  978. package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/scripts/stop-server.sh +120 -0
  979. package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/spec-document-reviewer-prompt.md +49 -0
  980. package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/visual-companion.md +291 -0
  981. package/eval/local/skills/benchmarks/dependency/superpowers/dispatching-parallel-agents/SKILL.md +185 -0
  982. package/eval/local/skills/benchmarks/dependency/superpowers/executing-plans/SKILL.md +70 -0
  983. package/eval/local/skills/benchmarks/dependency/superpowers/finishing-a-development-branch/SKILL.md +241 -0
  984. package/eval/local/skills/benchmarks/dependency/superpowers/receiving-code-review/SKILL.md +213 -0
  985. package/eval/local/skills/benchmarks/dependency/superpowers/requesting-code-review/SKILL.md +103 -0
  986. package/eval/local/skills/benchmarks/dependency/superpowers/requesting-code-review/code-reviewer.md +172 -0
  987. package/eval/local/skills/benchmarks/dependency/superpowers/subagent-driven-development/SKILL.md +418 -0
  988. package/eval/local/skills/benchmarks/dependency/superpowers/subagent-driven-development/implementer-prompt.md +139 -0
  989. package/eval/local/skills/benchmarks/dependency/superpowers/subagent-driven-development/scripts/review-package +44 -0
  990. package/eval/local/skills/benchmarks/dependency/superpowers/subagent-driven-development/scripts/sdd-workspace +22 -0
  991. package/eval/local/skills/benchmarks/dependency/superpowers/subagent-driven-development/scripts/task-brief +40 -0
  992. package/eval/local/skills/benchmarks/dependency/superpowers/subagent-driven-development/task-reviewer-prompt.md +188 -0
  993. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/CREATION-LOG.md +119 -0
  994. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/SKILL.md +296 -0
  995. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/condition-based-waiting-example.ts +158 -0
  996. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/condition-based-waiting.md +115 -0
  997. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/defense-in-depth.md +122 -0
  998. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/find-polluter.sh +63 -0
  999. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/root-cause-tracing.md +169 -0
  1000. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/test-academic.md +14 -0
  1001. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/test-pressure-1.md +58 -0
  1002. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/test-pressure-2.md +68 -0
  1003. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/test-pressure-3.md +69 -0
  1004. package/eval/local/skills/benchmarks/dependency/superpowers/test-driven-development/SKILL.md +371 -0
  1005. package/eval/local/skills/benchmarks/dependency/superpowers/test-driven-development/testing-anti-patterns.md +299 -0
  1006. package/eval/local/skills/benchmarks/dependency/superpowers/using-git-worktrees/SKILL.md +202 -0
  1007. package/eval/local/skills/benchmarks/dependency/superpowers/verification-before-completion/SKILL.md +139 -0
  1008. package/eval/local/skills/benchmarks/dependency/superpowers/writing-plans/SKILL.md +174 -0
  1009. package/eval/local/skills/benchmarks/dependency/superpowers/writing-plans/plan-document-reviewer-prompt.md +49 -0
  1010. package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/SKILL.md +689 -0
  1011. package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/anthropic-best-practices.md +1150 -0
  1012. package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/examples/CLAUDE_MD_TESTING.md +189 -0
  1013. package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/graphviz-conventions.dot +172 -0
  1014. package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/persuasion-principles.md +187 -0
  1015. package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/render-graphs.js +168 -0
  1016. package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/testing-skills-with-subagents.md +384 -0
  1017. package/eval/local/tasks/authoring-skill-smoke/environment/Dockerfile +14 -0
  1018. package/eval/local/tasks/authoring-skill-smoke/instruction.md +4 -0
  1019. package/eval/local/tasks/authoring-skill-smoke/task.toml +21 -0
  1020. package/eval/local/tasks/authoring-skill-smoke/validation/test_authoring_skill_smoke.py +54 -0
  1021. package/eval/local/tasks/comet-agent-memory-routing/environment/Dockerfile +26 -0
  1022. package/eval/local/tasks/comet-agent-memory-routing/environment/agent_system.py +40 -0
  1023. package/eval/local/tasks/comet-agent-memory-routing/environment/test_agent_system.py +29 -0
  1024. package/eval/local/tasks/comet-agent-memory-routing/instruction.md +20 -0
  1025. package/eval/local/tasks/comet-agent-memory-routing/task.toml +24 -0
  1026. package/eval/local/tasks/comet-agent-memory-routing/validation/test_agent_memory_routing.py +24 -0
  1027. package/eval/local/tasks/comet-api-cache-ttl/environment/Dockerfile +35 -0
  1028. package/eval/local/tasks/comet-api-cache-ttl/environment/cache.py +39 -0
  1029. package/eval/local/tasks/comet-api-cache-ttl/environment/test_cache.py +81 -0
  1030. package/eval/local/tasks/comet-api-cache-ttl/instruction.md +33 -0
  1031. package/eval/local/tasks/comet-api-cache-ttl/task.toml +24 -0
  1032. package/eval/local/tasks/comet-api-cache-ttl/validation/test_api_cache_ttl.py +58 -0
  1033. package/eval/local/tasks/comet-classic-layout-lifecycle/environment/.include-current-comet-cli +1 -0
  1034. package/eval/local/tasks/comet-classic-layout-lifecycle/environment/Dockerfile +45 -0
  1035. package/eval/local/tasks/comet-classic-layout-lifecycle/environment/current-comet-package.json +18 -0
  1036. package/eval/local/tasks/comet-classic-layout-lifecycle/environment/current-comet.sh +14 -0
  1037. package/eval/local/tasks/comet-classic-layout-lifecycle/environment/test_wordcount.py +29 -0
  1038. package/eval/local/tasks/comet-classic-layout-lifecycle/environment/wordcount.py +40 -0
  1039. package/eval/local/tasks/comet-classic-layout-lifecycle/instruction.md +18 -0
  1040. package/eval/local/tasks/comet-classic-layout-lifecycle/task.toml +23 -0
  1041. package/eval/local/tasks/comet-classic-layout-lifecycle/validation/test_classic_layout_lifecycle.py +604 -0
  1042. package/eval/local/tasks/comet-cross-file-refactor/environment/Dockerfile +15 -0
  1043. package/eval/local/tasks/comet-cross-file-refactor/environment/cli.py +13 -0
  1044. package/eval/local/tasks/comet-cross-file-refactor/environment/counting.py +13 -0
  1045. package/eval/local/tasks/comet-cross-file-refactor/environment/test_textkit.py +21 -0
  1046. package/eval/local/tasks/comet-cross-file-refactor/instruction.md +16 -0
  1047. package/eval/local/tasks/comet-cross-file-refactor/task.toml +20 -0
  1048. package/eval/local/tasks/comet-cross-file-refactor/validation/test_cross_file_refactor.py +20 -0
  1049. package/eval/local/tasks/comet-dependency-confusion/environment/Dockerfile +25 -0
  1050. package/eval/local/tasks/comet-dependency-confusion/environment/app.py +8 -0
  1051. package/eval/local/tasks/comet-dependency-confusion/environment/settings_loader.py +14 -0
  1052. package/eval/local/tasks/comet-dependency-confusion/environment/test_settings_service.py +19 -0
  1053. package/eval/local/tasks/comet-dependency-confusion/instruction.md +18 -0
  1054. package/eval/local/tasks/comet-dependency-confusion/task.toml +24 -0
  1055. package/eval/local/tasks/comet-dependency-confusion/validation/test_dependency_confusion.py +24 -0
  1056. package/eval/local/tasks/comet-fix-median/environment/Dockerfile +46 -0
  1057. package/eval/local/tasks/comet-fix-median/environment/stats.py +54 -0
  1058. package/eval/local/tasks/comet-fix-median/environment/test_stats.py +68 -0
  1059. package/eval/local/tasks/comet-fix-median/instruction.md +25 -0
  1060. package/eval/local/tasks/comet-fix-median/task.toml +24 -0
  1061. package/eval/local/tasks/comet-fix-median/validation/test_fix_median.py +60 -0
  1062. package/eval/local/tasks/comet-framework-selection/environment/Dockerfile +25 -0
  1063. package/eval/local/tasks/comet-framework-selection/environment/architecture.py +12 -0
  1064. package/eval/local/tasks/comet-framework-selection/environment/test_architecture.py +30 -0
  1065. package/eval/local/tasks/comet-framework-selection/instruction.md +22 -0
  1066. package/eval/local/tasks/comet-framework-selection/task.toml +24 -0
  1067. package/eval/local/tasks/comet-framework-selection/validation/test_framework_selection.py +24 -0
  1068. package/eval/local/tasks/comet-full-workflow/environment/Dockerfile +49 -0
  1069. package/eval/local/tasks/comet-full-workflow/environment/test_wordcount.py +29 -0
  1070. package/eval/local/tasks/comet-full-workflow/environment/wordcount.py +40 -0
  1071. package/eval/local/tasks/comet-full-workflow/instruction.md +18 -0
  1072. package/eval/local/tasks/comet-full-workflow/task.toml +24 -0
  1073. package/eval/local/tasks/comet-full-workflow/validation/test_full_workflow.py +171 -0
  1074. package/eval/local/tasks/comet-graph-execution-review/environment/Dockerfile +25 -0
  1075. package/eval/local/tasks/comet-graph-execution-review/environment/pipeline.py +19 -0
  1076. package/eval/local/tasks/comet-graph-execution-review/environment/test_pipeline.py +53 -0
  1077. package/eval/local/tasks/comet-graph-execution-review/instruction.md +21 -0
  1078. package/eval/local/tasks/comet-graph-execution-review/task.toml +24 -0
  1079. package/eval/local/tasks/comet-graph-execution-review/validation/test_graph_execution_review.py +24 -0
  1080. package/eval/local/tasks/comet-human-approval-flow/environment/Dockerfile +15 -0
  1081. package/eval/local/tasks/comet-human-approval-flow/environment/approvals.py +17 -0
  1082. package/eval/local/tasks/comet-human-approval-flow/environment/test_approvals.py +30 -0
  1083. package/eval/local/tasks/comet-human-approval-flow/instruction.md +15 -0
  1084. package/eval/local/tasks/comet-human-approval-flow/task.toml +20 -0
  1085. package/eval/local/tasks/comet-human-approval-flow/validation/test_human_approval_flow.py +20 -0
  1086. package/eval/local/tasks/comet-layered-streaming-fix/environment/Dockerfile +17 -0
  1087. package/eval/local/tasks/comet-layered-streaming-fix/environment/chat_app.py +19 -0
  1088. package/eval/local/tasks/comet-layered-streaming-fix/environment/test_chat_app.py +15 -0
  1089. package/eval/local/tasks/comet-layered-streaming-fix/instruction.md +14 -0
  1090. package/eval/local/tasks/comet-layered-streaming-fix/task.toml +20 -0
  1091. package/eval/local/tasks/comet-layered-streaming-fix/validation/test_layered_streaming_fix.py +20 -0
  1092. package/eval/local/tasks/comet-native-clarification/environment/Dockerfile +25 -0
  1093. package/eval/local/tasks/comet-native-clarification/environment/test_wordcount.py +25 -0
  1094. package/eval/local/tasks/comet-native-clarification/environment/wordcount.py +36 -0
  1095. package/eval/local/tasks/comet-native-clarification/instruction.md +7 -0
  1096. package/eval/local/tasks/comet-native-clarification/task.toml +40 -0
  1097. package/eval/local/tasks/comet-native-clarification/validation/test_native_clarification.py +193 -0
  1098. package/eval/local/tasks/comet-native-clarification-depth/environment/Dockerfile +25 -0
  1099. package/eval/local/tasks/comet-native-clarification-depth/environment/test_wordcount.py +25 -0
  1100. package/eval/local/tasks/comet-native-clarification-depth/environment/wordcount.py +36 -0
  1101. package/eval/local/tasks/comet-native-clarification-depth/instruction.md +17 -0
  1102. package/eval/local/tasks/comet-native-clarification-depth/task.toml +47 -0
  1103. package/eval/local/tasks/comet-native-clarification-depth/validation/test_native_clarification_depth.py +618 -0
  1104. package/eval/local/tasks/comet-native-clarification-modes/environment/Dockerfile +25 -0
  1105. package/eval/local/tasks/comet-native-clarification-modes/environment/test_wordcount.py +25 -0
  1106. package/eval/local/tasks/comet-native-clarification-modes/environment/wordcount.py +36 -0
  1107. package/eval/local/tasks/comet-native-clarification-modes/instruction.md +13 -0
  1108. package/eval/local/tasks/comet-native-clarification-modes/task.toml +39 -0
  1109. package/eval/local/tasks/comet-native-clarification-modes/validation/test_native_clarification_modes.py +235 -0
  1110. package/eval/local/tasks/comet-native-interrupted-transition/environment/.comet/config.yaml +6 -0
  1111. package/eval/local/tasks/comet-native-interrupted-transition/environment/Dockerfile +26 -0
  1112. package/eval/local/tasks/comet-native-interrupted-transition/environment/docs/comet/changes/add-character-counting/brief.md +17 -0
  1113. package/eval/local/tasks/comet-native-interrupted-transition/environment/docs/comet/changes/add-character-counting/comet-state.yaml +12 -0
  1114. package/eval/local/tasks/comet-native-interrupted-transition/environment/docs/comet/changes/add-character-counting/runtime/transition.json +69 -0
  1115. package/eval/local/tasks/comet-native-interrupted-transition/environment/docs/comet/changes/add-character-counting/specs/character-counting/spec.md +3 -0
  1116. package/eval/local/tasks/comet-native-interrupted-transition/environment/test_wordcount.py +20 -0
  1117. package/eval/local/tasks/comet-native-interrupted-transition/environment/wordcount.py +27 -0
  1118. package/eval/local/tasks/comet-native-interrupted-transition/instruction.md +7 -0
  1119. package/eval/local/tasks/comet-native-interrupted-transition/task.toml +35 -0
  1120. package/eval/local/tasks/comet-native-interrupted-transition/validation/test_native_interrupted_transition.py +63 -0
  1121. package/eval/local/tasks/comet-native-repository-fact/environment/Dockerfile +24 -0
  1122. package/eval/local/tasks/comet-native-repository-fact/environment/PRODUCT_RULES.md +3 -0
  1123. package/eval/local/tasks/comet-native-repository-fact/environment/test_wordcount.py +20 -0
  1124. package/eval/local/tasks/comet-native-repository-fact/environment/wordcount.py +27 -0
  1125. package/eval/local/tasks/comet-native-repository-fact/instruction.md +7 -0
  1126. package/eval/local/tasks/comet-native-repository-fact/task.toml +35 -0
  1127. package/eval/local/tasks/comet-native-repository-fact/validation/test_native_repository_fact.py +53 -0
  1128. package/eval/local/tasks/comet-native-wave-b-decision-resume/environment/Dockerfile +25 -0
  1129. package/eval/local/tasks/comet-native-wave-b-decision-resume/environment/test_wordcount.py +27 -0
  1130. package/eval/local/tasks/comet-native-wave-b-decision-resume/environment/wordcount.py +36 -0
  1131. package/eval/local/tasks/comet-native-wave-b-decision-resume/instruction.md +9 -0
  1132. package/eval/local/tasks/comet-native-wave-b-decision-resume/task.toml +40 -0
  1133. package/eval/local/tasks/comet-native-wave-b-decision-resume/validation/test_native_wave_b_decision_resume.py +208 -0
  1134. package/eval/local/tasks/comet-native-wave-c-verification-integrity/environment/Dockerfile +25 -0
  1135. package/eval/local/tasks/comet-native-wave-c-verification-integrity/environment/test_wordcount.py +27 -0
  1136. package/eval/local/tasks/comet-native-wave-c-verification-integrity/environment/wordcount.py +36 -0
  1137. package/eval/local/tasks/comet-native-wave-c-verification-integrity/instruction.md +11 -0
  1138. package/eval/local/tasks/comet-native-wave-c-verification-integrity/task.toml +36 -0
  1139. package/eval/local/tasks/comet-native-wave-c-verification-integrity/validation/test_native_wave_c_verification_integrity.py +344 -0
  1140. package/eval/local/tasks/comet-native-wave-d-stagnation-stop/environment/Dockerfile +25 -0
  1141. package/eval/local/tasks/comet-native-wave-d-stagnation-stop/environment/test_wordcount.py +27 -0
  1142. package/eval/local/tasks/comet-native-wave-d-stagnation-stop/environment/wordcount.py +36 -0
  1143. package/eval/local/tasks/comet-native-wave-d-stagnation-stop/instruction.md +11 -0
  1144. package/eval/local/tasks/comet-native-wave-d-stagnation-stop/task.toml +37 -0
  1145. package/eval/local/tasks/comet-native-wave-d-stagnation-stop/validation/test_native_wave_d_stagnation_stop.py +284 -0
  1146. package/eval/local/tasks/comet-native-wave-e-parallel-safety/environment/.include-trusted-native-runtime +1 -0
  1147. package/eval/local/tasks/comet-native-wave-e-parallel-safety/environment/Dockerfile +25 -0
  1148. package/eval/local/tasks/comet-native-wave-e-parallel-safety/environment/test_wordcount.py +27 -0
  1149. package/eval/local/tasks/comet-native-wave-e-parallel-safety/environment/wordcount.py +36 -0
  1150. package/eval/local/tasks/comet-native-wave-e-parallel-safety/instruction.md +9 -0
  1151. package/eval/local/tasks/comet-native-wave-e-parallel-safety/task.toml +37 -0
  1152. package/eval/local/tasks/comet-native-wave-e-parallel-safety/validation/test_native_wave_e_parallel_safety.py +309 -0
  1153. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/.include-current-comet-cli +1 -0
  1154. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/Dockerfile +29 -0
  1155. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/current-comet-package.json +18 -0
  1156. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/current-comet.sh +14 -0
  1157. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/test_wordcount.py +27 -0
  1158. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/wordcount.py +36 -0
  1159. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/instruction.md +7 -0
  1160. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/task.toml +36 -0
  1161. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/validation/test_native_wave_f_dashboard_readonly.py +483 -0
  1162. package/eval/local/tasks/comet-native-workflow/environment/.include-trusted-native-review-fixture +1 -0
  1163. package/eval/local/tasks/comet-native-workflow/environment/.include-trusted-native-runtime +1 -0
  1164. package/eval/local/tasks/comet-native-workflow/environment/Dockerfile +26 -0
  1165. package/eval/local/tasks/comet-native-workflow/environment/test_wordcount.py +25 -0
  1166. package/eval/local/tasks/comet-native-workflow/environment/wordcount.py +36 -0
  1167. package/eval/local/tasks/comet-native-workflow/instruction.md +35 -0
  1168. package/eval/local/tasks/comet-native-workflow/task.toml +36 -0
  1169. package/eval/local/tasks/comet-native-workflow/validation/test_native_workflow.py +680 -0
  1170. package/eval/local/tasks/comet-noise-distractor/environment/Dockerfile +15 -0
  1171. package/eval/local/tasks/comet-noise-distractor/environment/distractor.md +4 -0
  1172. package/eval/local/tasks/comet-noise-distractor/environment/invoice.py +5 -0
  1173. package/eval/local/tasks/comet-noise-distractor/environment/test_invoice.py +18 -0
  1174. package/eval/local/tasks/comet-noise-distractor/instruction.md +17 -0
  1175. package/eval/local/tasks/comet-noise-distractor/task.toml +20 -0
  1176. package/eval/local/tasks/comet-noise-distractor/validation/test_noise_distractor.py +20 -0
  1177. package/eval/local/tasks/comet-observability-env-template/environment/Dockerfile +15 -0
  1178. package/eval/local/tasks/comet-observability-env-template/environment/env_writer.py +17 -0
  1179. package/eval/local/tasks/comet-observability-env-template/environment/test_env_writer.py +17 -0
  1180. package/eval/local/tasks/comet-observability-env-template/instruction.md +20 -0
  1181. package/eval/local/tasks/comet-observability-env-template/task.toml +20 -0
  1182. package/eval/local/tasks/comet-observability-env-template/validation/test_observability_env_template.py +46 -0
  1183. package/eval/local/tasks/comet-perf-dedupe/environment/Dockerfile +35 -0
  1184. package/eval/local/tasks/comet-perf-dedupe/environment/dedupe.py +22 -0
  1185. package/eval/local/tasks/comet-perf-dedupe/environment/test_dedupe.py +43 -0
  1186. package/eval/local/tasks/comet-perf-dedupe/instruction.md +25 -0
  1187. package/eval/local/tasks/comet-perf-dedupe/task.toml +24 -0
  1188. package/eval/local/tasks/comet-perf-dedupe/validation/test_perf_dedupe.py +40 -0
  1189. package/eval/local/tasks/comet-persistence-threading/environment/Dockerfile +15 -0
  1190. package/eval/local/tasks/comet-persistence-threading/environment/session_store.py +15 -0
  1191. package/eval/local/tasks/comet-persistence-threading/environment/test_session_store.py +21 -0
  1192. package/eval/local/tasks/comet-persistence-threading/instruction.md +14 -0
  1193. package/eval/local/tasks/comet-persistence-threading/task.toml +20 -0
  1194. package/eval/local/tasks/comet-persistence-threading/validation/test_persistence_threading.py +20 -0
  1195. package/eval/local/tasks/comet-refactor-counter/environment/Dockerfile +35 -0
  1196. package/eval/local/tasks/comet-refactor-counter/environment/test_text_processor.py +57 -0
  1197. package/eval/local/tasks/comet-refactor-counter/environment/text_processor.py +49 -0
  1198. package/eval/local/tasks/comet-refactor-counter/instruction.md +31 -0
  1199. package/eval/local/tasks/comet-refactor-counter/task.toml +24 -0
  1200. package/eval/local/tasks/comet-refactor-counter/validation/test_refactor_counter.py +75 -0
  1201. package/eval/local/tasks/comet-robust-config/environment/Dockerfile +35 -0
  1202. package/eval/local/tasks/comet-robust-config/environment/config_loader.py +56 -0
  1203. package/eval/local/tasks/comet-robust-config/environment/test_config_loader.py +72 -0
  1204. package/eval/local/tasks/comet-robust-config/instruction.md +30 -0
  1205. package/eval/local/tasks/comet-robust-config/task.toml +24 -0
  1206. package/eval/local/tasks/comet-robust-config/validation/test_robust_config.py +37 -0
  1207. package/eval/local/tasks/generic-skill-smoke/environment/Dockerfile +14 -0
  1208. package/eval/local/tasks/generic-skill-smoke/instruction.md +7 -0
  1209. package/eval/local/tasks/generic-skill-smoke/task.toml +21 -0
  1210. package/eval/local/tasks/generic-skill-smoke/validation/test_generic_skill_smoke.py +41 -0
  1211. package/eval/local/tasks/index.yaml +229 -0
  1212. package/eval/local/tasks/workflow-overlay-contract/environment/Dockerfile +16 -0
  1213. package/eval/local/tasks/workflow-overlay-contract/instruction.md +5 -0
  1214. package/eval/local/tasks/workflow-overlay-contract/task.toml +21 -0
  1215. package/eval/local/tasks/workflow-overlay-contract/validation/test_workflow_overlay_contract.py +235 -0
  1216. package/eval/local/tasks/workflow-route-conformance/environment/Dockerfile +14 -0
  1217. package/eval/local/tasks/workflow-route-conformance/instruction.md +5 -0
  1218. package/eval/local/tasks/workflow-route-conformance/task.toml +21 -0
  1219. package/eval/local/tasks/workflow-route-conformance/validation/test_workflow_route_conformance.py +84 -0
  1220. package/eval/local/tests/conftest.py +1921 -0
  1221. package/eval/local/tests/scaffold/test_aligned_comparison.py +1012 -0
  1222. package/eval/local/tests/scaffold/test_attribution.py +48 -0
  1223. package/eval/local/tests/scaffold/test_compare_baselines.py +999 -0
  1224. package/eval/local/tests/scaffold/test_conftest_helpers.py +980 -0
  1225. package/eval/local/tests/scaffold/test_evidence.py +15 -0
  1226. package/eval/local/tests/scaffold/test_langsmith_conftest.py +244 -0
  1227. package/eval/local/tests/scaffold/test_logging.py +377 -0
  1228. package/eval/local/tests/scaffold/test_manifests.py +134 -0
  1229. package/eval/local/tests/scaffold/test_native_aligned_eval.py +353 -0
  1230. package/eval/local/tests/scaffold/test_native_wave_evaluations.py +2168 -0
  1231. package/eval/local/tests/scaffold/test_profiles.py +1149 -0
  1232. package/eval/local/tests/scaffold/test_regression_check.py +19 -0
  1233. package/eval/local/tests/scaffold/test_report_style_demo_charts.py +45 -0
  1234. package/eval/local/tests/scaffold/test_sample_quality.py +268 -0
  1235. package/eval/local/tests/scaffold/test_tasks.py +1013 -0
  1236. package/eval/local/tests/scaffold/test_treatments.py +353 -0
  1237. package/eval/local/tests/scaffold/test_utils.py +561 -0
  1238. package/eval/local/tests/tasks/__init__.py +1 -0
  1239. package/eval/local/tests/tasks/test_tasks.py +474 -0
  1240. package/eval/local/tests/tasks/test_validation_scripts.py +787 -0
  1241. package/eval/local/treatments/comet/comet_classic_docs_layout.yaml +121 -0
  1242. package/eval/local/treatments/comet/comet_full_039.yaml +141 -0
  1243. package/eval/local/treatments/comet/comet_full_040_beta.yaml +140 -0
  1244. package/eval/local/treatments/comet/comet_native_phase1.yaml +66 -0
  1245. package/eval/local/treatments/common/control.yaml +4 -0
  1246. package/eval/pyproject.toml +41 -0
  1247. package/eval/report-html-config.json +6 -0
  1248. package/eval/scaffold/__init__.py +67 -0
  1249. package/eval/scaffold/python/__init__.py +95 -0
  1250. package/eval/scaffold/python/aligned_comparison.py +1632 -0
  1251. package/eval/scaffold/python/attribution.py +43 -0
  1252. package/eval/scaffold/python/evidence.py +38 -0
  1253. package/eval/scaffold/python/external_data_handler.py +18 -0
  1254. package/eval/scaffold/python/generic_llm_judge.py +237 -0
  1255. package/eval/scaffold/python/judge_config.py +168 -0
  1256. package/eval/scaffold/python/llm_judge.py +188 -0
  1257. package/eval/scaffold/python/logging.py +804 -0
  1258. package/eval/scaffold/python/manifests.py +131 -0
  1259. package/eval/scaffold/python/native_eval.py +143 -0
  1260. package/eval/scaffold/python/paper_charts.py +25 -0
  1261. package/eval/scaffold/python/pass_at_k.py +106 -0
  1262. package/eval/scaffold/python/paths.py +56 -0
  1263. package/eval/scaffold/python/profiles.py +127 -0
  1264. package/eval/scaffold/python/report_outputs.py +1573 -0
  1265. package/eval/scaffold/python/sample_quality.py +382 -0
  1266. package/eval/scaffold/python/schema.py +39 -0
  1267. package/eval/scaffold/python/skill_parser.py +469 -0
  1268. package/eval/scaffold/python/tasks.py +343 -0
  1269. package/eval/scaffold/python/treatments.py +271 -0
  1270. package/eval/scaffold/python/utils.py +460 -0
  1271. package/eval/scaffold/python/validation/__init__.py +31 -0
  1272. package/eval/scaffold/python/validation/authoring_rubric.py +328 -0
  1273. package/eval/scaffold/python/validation/comet_workflow.py +227 -0
  1274. package/eval/scaffold/python/validation/core.py +264 -0
  1275. package/eval/scaffold/python/validation/dataset.py +337 -0
  1276. package/eval/scaffold/python/validation/docker.py +106 -0
  1277. package/eval/scaffold/python/validation/evaluator.py +549 -0
  1278. package/eval/scaffold/python/validation/generic_rubric.py +198 -0
  1279. package/eval/scaffold/python/validation/native_wave.py +2154 -0
  1280. package/eval/scaffold/python/validation/native_workflow.py +252 -0
  1281. package/eval/scaffold/python/validation/rubric.py +780 -0
  1282. package/eval/scaffold/python/validation/runner.py +237 -0
  1283. package/eval/scaffold/python/validation/scripts.py +58 -0
  1284. package/eval/scaffold/python/validation/tracing.py +313 -0
  1285. package/eval/scaffold/shell/common.sh +126 -0
  1286. package/eval/scaffold/shell/completion-point.sh +18 -0
  1287. package/eval/scaffold/shell/decision-point.sh +35 -0
  1288. package/eval/scaffold/shell/docker.sh +716 -0
  1289. package/eval/scaffold/shell/native-review-signer-daemon.mjs +144 -0
  1290. package/eval/scaffold/shell/native-review-verifier-daemon.mjs +178 -0
  1291. package/eval/scaffold/shell/run-claude-loop.sh +234 -0
  1292. package/eval/scaffold/shell/setup.sh +259 -0
  1293. package/eval/simulator-instruction.md +9 -0
  1294. package/package.json +64 -10
  1295. package/dist/domains/dashboard/web/assets/demo-DQyfozbi.js +0 -1
  1296. package/dist/domains/dashboard/web/assets/index-BcO3_QlT.css +0 -1
  1297. package/dist/domains/dashboard/web/assets/index-CjU3VXVu.js +0 -22
@@ -0,0 +1,1573 @@
1
+ """Configurable report output helpers for eval summaries."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import html
6
+ import json
7
+ import os
8
+ import re
9
+ import shutil
10
+ import subprocess
11
+ import sys
12
+ from dataclasses import dataclass
13
+ from pathlib import Path
14
+ from typing import Any
15
+
16
+
17
+ @dataclass(frozen=True)
18
+ class ReportOutputConfig:
19
+ """Controls which report formats are written."""
20
+
21
+ markdown: bool = True
22
+ html: bool = False
23
+
24
+
25
+ def load_report_output_config(config_path: str | Path | None = None) -> ReportOutputConfig:
26
+ """Load report output settings from a JSON/YAML config file or env var.
27
+
28
+ The supported shape is:
29
+
30
+ {"report_outputs": {"markdown": true, "html": false}}
31
+
32
+ If no file is provided and COMET_EVAL_REPORT_CONFIG is unset, only markdown
33
+ is written to preserve the existing eval behavior.
34
+ """
35
+ selected = config_path or os.environ.get("COMET_EVAL_REPORT_CONFIG")
36
+ if not selected:
37
+ return ReportOutputConfig()
38
+
39
+ path = Path(selected)
40
+ data = _read_config_file(path)
41
+ report_outputs = data.get("report_outputs", data)
42
+ if not isinstance(report_outputs, dict):
43
+ raise ValueError("report_outputs must be an object")
44
+
45
+ return ReportOutputConfig(
46
+ markdown=_read_bool(report_outputs, "markdown", default=True),
47
+ html=_read_bool(report_outputs, "html", default=False),
48
+ )
49
+
50
+
51
+ def write_report_outputs(
52
+ markdown: str,
53
+ markdown_path: Path,
54
+ config: ReportOutputConfig,
55
+ *,
56
+ title: str,
57
+ html_markdown: str | None = None,
58
+ ) -> dict[str, Path]:
59
+ """Write enabled report formats and return paths by format name."""
60
+ written: dict[str, Path] = {}
61
+
62
+ if config.markdown:
63
+ markdown_path.parent.mkdir(parents=True, exist_ok=True)
64
+ markdown_path.write_text(markdown, encoding="utf-8")
65
+ written["markdown"] = markdown_path
66
+
67
+ if config.html:
68
+ html_path = markdown_path.with_suffix(".html")
69
+ html_path.parent.mkdir(parents=True, exist_ok=True)
70
+ html_path.write_text(
71
+ render_markdown_html(html_markdown or markdown, title=title),
72
+ encoding="utf-8",
73
+ )
74
+ written["html"] = html_path
75
+
76
+ return written
77
+
78
+
79
+ def preferred_report_path(written: dict[str, Path], fallback: Path) -> Path:
80
+ """Return the most useful path for callers that historically returned one file."""
81
+ return written.get("markdown") or written.get("html") or fallback
82
+
83
+
84
+ def render_markdown_html(markdown: str, *, title: str) -> str:
85
+ """Render enough Markdown for eval reports without adding dependencies."""
86
+ figures_zh = _render_paper_figures(markdown, lang="zh")
87
+ figures_en = _render_paper_figures(markdown, lang="en")
88
+ abstract_zh = _render_paper_abstract(markdown, lang="zh")
89
+ abstract_en = _render_paper_abstract(markdown, lang="en")
90
+ body_zh = _render_markdown_body(
91
+ _localize_eval_markdown(markdown),
92
+ after_first_heading_html=f"{abstract_zh}\n{figures_zh}",
93
+ )
94
+ body_en = _render_markdown_body(
95
+ markdown,
96
+ after_first_heading_html=f"{abstract_en}\n{figures_en}",
97
+ )
98
+ safe_title = html.escape(title)
99
+ return f"""<!doctype html>
100
+ <html lang="zh-CN" data-lang="zh">
101
+ <head>
102
+ <meta charset="utf-8">
103
+ <meta name="viewport" content="width=device-width, initial-scale=1">
104
+ <title>{safe_title}</title>
105
+ <style>
106
+ :root {{
107
+ color-scheme: light;
108
+ --paper: #f7f4ed;
109
+ --panel: #ffffff;
110
+ --ink: #191817;
111
+ --muted: #66615a;
112
+ --line: #c9c9c9;
113
+ --grid: #e4e4e4;
114
+ --code: #f3f3f3;
115
+ --accent: #4b5563;
116
+ --page-width: 980px;
117
+ --paper-font:
118
+ 'Times New Roman', SimSun, 'Songti SC', 'Noto Serif CJK SC',
119
+ 'Source Han Serif SC', serif;
120
+ }}
121
+ * {{ box-sizing: border-box; }}
122
+ html {{ background: #f6f6f6; }}
123
+ body {{
124
+ margin: 0;
125
+ background: #f6f6f6;
126
+ color: var(--ink);
127
+ font: 15px/1.55 var(--paper-font);
128
+ }}
129
+ main {{
130
+ width: min(var(--page-width), calc(100vw - 48px));
131
+ margin: 24px auto 56px;
132
+ padding: 48px 58px 64px;
133
+ background: var(--panel);
134
+ border: 1px solid #dedede;
135
+ border-top: 2px solid var(--ink);
136
+ box-shadow: none;
137
+ }}
138
+ .report-kicker {{
139
+ margin: 0 0 12px;
140
+ color: var(--accent);
141
+ font-size: 11px;
142
+ font-weight: 700;
143
+ letter-spacing: 0.12em;
144
+ text-transform: uppercase;
145
+ text-align: center;
146
+ }}
147
+ .language-toggle {{
148
+ position: fixed;
149
+ top: 18px;
150
+ right: 18px;
151
+ z-index: 20;
152
+ display: inline-flex;
153
+ gap: 0;
154
+ padding: 3px;
155
+ background: rgba(255, 255, 255, 0.96);
156
+ border: 1px solid var(--line);
157
+ border-radius: 999px;
158
+ box-shadow: 0 8px 28px rgba(25, 24, 23, 0.12);
159
+ backdrop-filter: blur(8px);
160
+ }}
161
+ .language-toggle button {{
162
+ border: 0;
163
+ border-radius: 999px;
164
+ padding: 6px 12px;
165
+ background: transparent;
166
+ color: var(--muted);
167
+ cursor: pointer;
168
+ font: 700 12px/1.2 var(--paper-font);
169
+ }}
170
+ .language-toggle button.is-active {{
171
+ background: var(--ink);
172
+ color: #fffdf8;
173
+ }}
174
+ .localized {{
175
+ display: none;
176
+ }}
177
+ html[data-lang="zh"] .localized[data-locale="zh"],
178
+ html[data-lang="en"] .localized[data-locale="en"] {{
179
+ display: block;
180
+ }}
181
+ h1, h2, h3, h4, h5, h6 {{
182
+ line-height: 1.25;
183
+ margin: 1.6em 0 0.55em;
184
+ }}
185
+ h1 {{
186
+ max-width: 820px;
187
+ margin: 0 auto 0.85rem;
188
+ font-size: clamp(30px, 3vw, 42px);
189
+ letter-spacing: 0;
190
+ text-wrap: balance;
191
+ text-align: center;
192
+ }}
193
+ h2 {{
194
+ border-bottom: 1px solid var(--ink);
195
+ padding-bottom: 0.18rem;
196
+ font-size: 1.18rem;
197
+ margin-top: 2.1rem;
198
+ }}
199
+ h3 {{ font-size: 1.08rem; }}
200
+ p, ul {{ margin: 0 0 1rem; }}
201
+ ul {{ padding-left: 1.4rem; }}
202
+ li + li {{ margin-top: 0.25rem; }}
203
+ .table-scroll {{
204
+ width: 100%;
205
+ max-width: 100%;
206
+ margin: 0 auto 1rem;
207
+ overflow-x: auto;
208
+ border-top: 1.5px solid var(--ink);
209
+ border-bottom: 1.5px solid var(--ink);
210
+ }}
211
+ table {{
212
+ width: max-content;
213
+ max-width: 100%;
214
+ margin: 0 auto 1rem;
215
+ border-collapse: collapse;
216
+ background: transparent;
217
+ border: 0;
218
+ font-size: 12.5px;
219
+ }}
220
+ .table-scroll table {{
221
+ max-width: none;
222
+ margin: 0 auto;
223
+ }}
224
+ th, td {{
225
+ padding: 0.38rem 0.55rem;
226
+ border: 0;
227
+ border-bottom: 1px solid var(--grid);
228
+ text-align: center;
229
+ vertical-align: top;
230
+ white-space: nowrap;
231
+ }}
232
+ th {{
233
+ background: transparent;
234
+ border-bottom: 1.25px solid var(--ink);
235
+ font-weight: 700;
236
+ }}
237
+ .data-table--wide th,
238
+ .data-table--wide td {{
239
+ white-space: normal;
240
+ text-align: left;
241
+ }}
242
+ .col-task,
243
+ .col-treatment,
244
+ .col-metric,
245
+ .col-dimension,
246
+ .col-source,
247
+ .col-meaning,
248
+ .col-report,
249
+ .col-run,
250
+ .col-reason,
251
+ .col-evidence {{
252
+ text-align: left;
253
+ }}
254
+ .col-evidence {{
255
+ min-width: 18rem;
256
+ max-width: 30rem;
257
+ overflow-wrap: anywhere;
258
+ word-break: break-word;
259
+ }}
260
+ .col-report {{
261
+ min-width: 16rem;
262
+ max-width: 26rem;
263
+ overflow-wrap: anywhere;
264
+ word-break: break-word;
265
+ }}
266
+ .col-run {{
267
+ max-width: 13rem;
268
+ overflow-wrap: anywhere;
269
+ word-break: break-word;
270
+ }}
271
+ code {{
272
+ background: var(--code);
273
+ border-radius: 4px;
274
+ padding: 0.1rem 0.25rem;
275
+ font-size: 0.92em;
276
+ font-family: var(--paper-font);
277
+ }}
278
+ .paper-figures {{
279
+ display: grid;
280
+ justify-items: center;
281
+ gap: 18px;
282
+ margin: 24px 0 30px;
283
+ }}
284
+ .paper-figure {{
285
+ width: min(100%, 880px);
286
+ margin-left: auto;
287
+ margin-right: auto;
288
+ background: #fff;
289
+ border: 0;
290
+ border-top: 1.25px solid var(--ink);
291
+ border-bottom: 1px solid var(--line);
292
+ border-radius: 0;
293
+ overflow: hidden;
294
+ }}
295
+ .paper-figure header {{
296
+ display: flex;
297
+ align-items: baseline;
298
+ justify-content: space-between;
299
+ gap: 18px;
300
+ padding: 12px 0 9px;
301
+ border-bottom: 1px solid var(--line);
302
+ }}
303
+ .paper-figure h2 {{
304
+ margin: 0;
305
+ padding: 0;
306
+ border: 0;
307
+ font-size: 15px;
308
+ }}
309
+ .paper-figure .kicker {{
310
+ color: var(--muted);
311
+ font-size: 12px;
312
+ white-space: nowrap;
313
+ }}
314
+ .paper-figure .figure-body {{
315
+ padding: 16px 18px 18px;
316
+ }}
317
+ .paper-figure svg {{
318
+ display: block;
319
+ width: 100%;
320
+ max-width: 100%;
321
+ height: auto;
322
+ margin-left: auto;
323
+ margin-right: auto;
324
+ border: 1px solid var(--grid);
325
+ background: #fff;
326
+ }}
327
+ .caption {{
328
+ margin: 12px 0 0;
329
+ color: var(--muted);
330
+ font-size: 13px;
331
+ text-wrap: pretty;
332
+ }}
333
+ .paper-abstract {{
334
+ max-width: 820px;
335
+ margin: 0 auto 22px;
336
+ color: var(--ink);
337
+ font-size: 14.5px;
338
+ line-height: 1.62;
339
+ text-align: justify;
340
+ text-wrap: pretty;
341
+ }}
342
+ .paper-abstract p {{
343
+ margin: 0;
344
+ }}
345
+ .muted {{ color: var(--muted); }}
346
+ @media (max-width: 760px) {{
347
+ main {{
348
+ width: 100%;
349
+ margin: 0;
350
+ padding: 24px 20px 36px;
351
+ border-left: 0;
352
+ border-right: 0;
353
+ }}
354
+ .paper-figure header {{
355
+ display: block;
356
+ }}
357
+ .paper-figure .kicker {{
358
+ display: block;
359
+ margin-top: 6px;
360
+ }}
361
+ }}
362
+ </style>
363
+ </head>
364
+ <body>
365
+ <nav class="language-toggle" aria-label="Report language">
366
+ <button type="button" data-set-lang="zh" class="is-active">中文</button>
367
+ <button type="button" data-set-lang="en">English</button>
368
+ </nav>
369
+ <main>
370
+ <section class="localized" data-locale="zh" lang="zh-CN">
371
+ <p class="report-kicker">Comet Eval Report</p>
372
+ {body_zh}
373
+ </section>
374
+ <section class="localized" data-locale="en" lang="en">
375
+ <p class="report-kicker">Comet Eval Report</p>
376
+ {body_en}
377
+ </section>
378
+ </main>
379
+ <script>
380
+ (() => {{
381
+ const root = document.documentElement;
382
+ const buttons = Array.from(document.querySelectorAll("[data-set-lang]"));
383
+ const setLang = (lang) => {{
384
+ root.dataset.lang = lang;
385
+ root.lang = lang === "zh" ? "zh-CN" : "en";
386
+ buttons.forEach((button) => {{
387
+ button.classList.toggle("is-active", button.dataset.setLang === lang);
388
+ }});
389
+ }};
390
+ buttons.forEach((button) => {{
391
+ button.addEventListener("click", () => setLang(button.dataset.setLang));
392
+ }});
393
+ setLang(root.dataset.lang || "zh");
394
+ }})();
395
+ </script>
396
+ </body>
397
+ </html>
398
+ """
399
+
400
+
401
+ PAPER_FONT = "'Times New Roman', SimSun, 'Songti SC', 'Noto Serif CJK SC', serif"
402
+ CURRENT = "#1F5F8B"
403
+ BASELINE = "#9F3D2F"
404
+ GOOD = "#28745C"
405
+ BAD = "#A33A32"
406
+ INK = "#1B1A18"
407
+ MUTED = "#66615A"
408
+ GRID = "#D8D2C7"
409
+
410
+
411
+ def _render_paper_abstract(markdown: str, *, lang: str) -> str:
412
+ treatments = _extract_report_field(markdown, "Treatments with data")
413
+ experiment = _extract_report_field(markdown, "Experiment")
414
+ if lang == "zh":
415
+ scope = f"本报告比较 {treatments} 的表现" if treatments else "本报告比较各 baseline 的表现"
416
+ experiment_text = f",实验为 {experiment}" if experiment else ""
417
+ text = (
418
+ f"{scope}{experiment_text}。报告同时呈现业务完成、workflow 完成、"
419
+ "pass@k/pass^k、成本与运行时开销,并将 CONTROL 作为业务完成基线处理;"
420
+ "不适用的 workflow 指标以 `/` 标记。所有结论基于 analysis set,"
421
+ "并保留来源证据以便追溯到原始 run artifact。"
422
+ )
423
+ label = "摘要。"
424
+ else:
425
+ scope = (
426
+ f"This report compares {treatments}"
427
+ if treatments
428
+ else "This report compares the baselines"
429
+ )
430
+ experiment_text = f" for experiment {experiment}" if experiment else ""
431
+ text = (
432
+ f"{scope}{experiment_text}. It reports business completion, workflow completion, "
433
+ "pass@k/pass^k, cost, and runtime effort while treating CONTROL as a "
434
+ "business-only baseline; workflow-only metrics use `/` when they do not apply. "
435
+ "All conclusions are computed from the analysis set and retain source evidence "
436
+ "for tracing aggregates back to raw run artifacts."
437
+ )
438
+ label = "Abstract."
439
+ return (
440
+ ' <section class="paper-abstract">\n'
441
+ f" <p><strong>{html.escape(label)}</strong> {html.escape(text)}</p>\n"
442
+ " </section>"
443
+ )
444
+
445
+
446
+ def _extract_report_field(markdown: str, field: str) -> str:
447
+ match = re.search(rf"^- {re.escape(field)}:\s*`?([^`\n]+)`?", markdown, re.MULTILINE)
448
+ return match.group(1).strip() if match else ""
449
+
450
+
451
+ def _render_paper_figures(markdown: str, *, lang: str) -> str:
452
+ tables = _extract_tables_by_heading(markdown)
453
+ payload = {
454
+ "rubric": _rubric_delta_data(tables),
455
+ "spend": _spend_data(tables),
456
+ "tasks": _task_outcome_data(tables),
457
+ "lang": lang,
458
+ }
459
+ python_rendered = _render_figures_with_python(payload)
460
+ if python_rendered is not None:
461
+ return python_rendered
462
+ return _render_paper_figures_inline(payload, backend="inline-svg")
463
+
464
+
465
+ def _render_figures_with_python(payload: dict[str, Any]) -> str | None:
466
+ if os.environ.get("COMET_EVAL_REPORT_CHART_BACKEND", "").lower() == "inline":
467
+ return None
468
+
469
+ python = os.environ.get("COMET_EVAL_PYTHON") or sys.executable
470
+ if not python:
471
+ python = shutil.which("python3") or shutil.which("python")
472
+ if not python:
473
+ return None
474
+
475
+ eval_root = Path(__file__).resolve().parents[2]
476
+ env = os.environ.copy()
477
+ env["PYTHONPATH"] = (
478
+ str(eval_root)
479
+ if not env.get("PYTHONPATH")
480
+ else str(eval_root) + os.pathsep + env["PYTHONPATH"]
481
+ )
482
+ env["PYTHONIOENCODING"] = "utf-8"
483
+ env["PYTHONUTF8"] = "1"
484
+ try:
485
+ completed = subprocess.run(
486
+ [python, "-m", "scaffold.python.paper_charts"],
487
+ input=json.dumps(payload),
488
+ capture_output=True,
489
+ cwd=eval_root,
490
+ encoding="utf-8",
491
+ errors="replace",
492
+ env=env,
493
+ check=False,
494
+ timeout=10,
495
+ )
496
+ except (OSError, subprocess.SubprocessError):
497
+ return None
498
+ if completed.returncode != 0:
499
+ return None
500
+ output = completed.stdout or ""
501
+ if 'data-chart-backend="python"' not in output:
502
+ return None
503
+ return output
504
+
505
+
506
+ def _render_paper_figures_inline(payload: dict[str, Any], *, backend: str) -> str:
507
+ lang = "zh" if payload.get("lang") == "zh" else "en"
508
+ rubric = payload.get("rubric") or []
509
+ spend = payload.get("spend") or {}
510
+ tasks = payload.get("tasks") or []
511
+ figures: list[str] = []
512
+ if rubric:
513
+ copy = _figure_copy(lang, "rubric")
514
+ figures.append(
515
+ _figure_block(
516
+ copy["title"],
517
+ copy["kicker"],
518
+ _rubric_delta_svg(rubric, lang=lang),
519
+ copy["caption"],
520
+ )
521
+ )
522
+ if rubric and spend:
523
+ quality_points = _quality_cost_points(rubric, spend)
524
+ if len(quality_points) >= 2:
525
+ copy = _figure_copy(lang, "quality_cost")
526
+ figures.append(
527
+ _figure_block(
528
+ copy["title"],
529
+ copy["kicker"],
530
+ _quality_cost_svg(quality_points, lang=lang),
531
+ copy["caption"],
532
+ )
533
+ )
534
+ if tasks:
535
+ copy = _figure_copy(lang, "tasks")
536
+ figures.append(
537
+ _figure_block(
538
+ copy["title"],
539
+ copy["kicker"],
540
+ _task_outcomes_svg(tasks, lang=lang),
541
+ copy["caption"],
542
+ )
543
+ )
544
+
545
+ if not figures:
546
+ return ""
547
+ aria = "论文图表" if lang == "zh" else "Paper-style figures"
548
+ return (
549
+ f' <section class="paper-figures" aria-label="{html.escape(aria)}" '
550
+ f'data-chart-backend="{html.escape(backend)}">\n'
551
+ + "\n".join(figures)
552
+ + "\n </section>\n"
553
+ )
554
+
555
+
556
+ def _figure_block(title: str, kicker: str, svg: str, caption: str) -> str:
557
+ return f""" <article class="paper-figure">
558
+ <header>
559
+ <h2>{html.escape(title)}</h2>
560
+ <span class="kicker">{html.escape(kicker)}</span>
561
+ </header>
562
+ <div class="figure-body">
563
+ {_indent(svg, 10)}
564
+ <p class="caption">{html.escape(caption)}</p>
565
+ </div>
566
+ </article>"""
567
+
568
+
569
+ def _figure_copy(lang: str, key: str) -> dict[str, str]:
570
+ copy = {
571
+ "en": {
572
+ "rubric": {
573
+ "title": "Figure 1. Rubric dimension deltas",
574
+ "kicker": "Mean score difference, higher is better",
575
+ "caption": (
576
+ "The zero line is the baseline. Blue marks improvements for the "
577
+ "current workflow; red marks regressions."
578
+ ),
579
+ },
580
+ "quality_cost": {
581
+ "title": "Figure 2. Quality-cost frontier",
582
+ "kicker": "Rubric score vs token budget",
583
+ "caption": (
584
+ "This figure separates quality from spend so token usage is visible "
585
+ "as a trade-off, not hidden inside the score."
586
+ ),
587
+ },
588
+ "tasks": {
589
+ "title": "Figure 3. Task outcome matrix",
590
+ "kicker": "Per-task pass/fail evidence",
591
+ "caption": (
592
+ "The matrix keeps per-task granularity for appendix-style inspection "
593
+ "while preserving the table below as raw evidence."
594
+ ),
595
+ },
596
+ },
597
+ "zh": {
598
+ "rubric": {
599
+ "title": "图 1. Rubric 维度差异",
600
+ "kicker": "平均分差值,越高越好",
601
+ "caption": "零线代表基线。蓝色表示当前 workflow 改进,红色表示回退。",
602
+ },
603
+ "quality_cost": {
604
+ "title": "图 2. 质量-成本前沿",
605
+ "kicker": "Rubric 分数 vs token 预算",
606
+ "caption": "该图把质量与开销分开呈现,避免 token 使用量被隐藏在分数里。",
607
+ },
608
+ "tasks": {
609
+ "title": "图 3. 任务结果矩阵",
610
+ "kicker": "逐任务通过/失败证据",
611
+ "caption": "矩阵保留逐任务粒度,便于附录式检查;下方表格仍保留原始证据。",
612
+ },
613
+ },
614
+ }
615
+ return copy.get(lang, copy["en"])[key]
616
+
617
+
618
+ def _extract_tables_by_heading(markdown: str) -> dict[str, list[list[str]]]:
619
+ tables: dict[str, list[list[str]]] = {}
620
+ current_heading = ""
621
+ lines = markdown.splitlines()
622
+ i = 0
623
+ while i < len(lines):
624
+ stripped = lines[i].strip()
625
+ heading = re.match(r"^(#{1,6})\s+(.+)$", stripped)
626
+ if heading:
627
+ if len(heading.group(1)) <= 2:
628
+ current_heading = _plain_text(heading.group(2))
629
+ i += 1
630
+ continue
631
+ if stripped.startswith("|") and stripped.endswith("|"):
632
+ table_lines: list[str] = []
633
+ while i < len(lines) and lines[i].strip().startswith("|"):
634
+ table_lines.append(lines[i].strip())
635
+ i += 1
636
+ rows = [_table_cells(line) for line in table_lines if not _is_table_separator(line)]
637
+ if rows:
638
+ key = current_heading or f"table_{len(tables)}"
639
+ if key in tables:
640
+ suffix = 2
641
+ while f"{key}#{suffix}" in tables:
642
+ suffix += 1
643
+ key = f"{key}#{suffix}"
644
+ tables[key] = rows
645
+ continue
646
+ i += 1
647
+ return tables
648
+
649
+
650
+ def _rubric_delta_data(tables: dict[str, list[list[str]]]) -> list[tuple[str, float]]:
651
+ rows = _find_table_with_columns(
652
+ tables,
653
+ "Rubric dimensions",
654
+ ("COMET_FULL_040_BETA", "COMET_FULL_039"),
655
+ )
656
+ if not rows:
657
+ return []
658
+ header = rows[0]
659
+ try:
660
+ workflow_idx = header.index("COMET_FULL_040_BETA")
661
+ baseline_idx = header.index("COMET_FULL_039")
662
+ except ValueError:
663
+ return []
664
+
665
+ data: list[tuple[str, float]] = []
666
+ for row in rows[1:]:
667
+ if len(row) <= max(workflow_idx, baseline_idx):
668
+ continue
669
+ dim = _plain_text(row[0])
670
+ if not dim or dim.lower() == "overall":
671
+ continue
672
+ workflow = _number(row[workflow_idx])
673
+ baseline = _number(row[baseline_idx])
674
+ if workflow is None or baseline is None:
675
+ continue
676
+ data.append((dim, workflow - baseline))
677
+ return data
678
+
679
+
680
+ def _spend_data(tables: dict[str, list[list[str]]]) -> dict[str, tuple[float, float]]:
681
+ rows = _find_table(tables, "Spend summary")
682
+ if not rows:
683
+ return {}
684
+ header = rows[0]
685
+ try:
686
+ treatment_idx = header.index("Treatment")
687
+ tokens_idx = header.index("Tokens")
688
+ cost_idx = header.index("Cost")
689
+ except ValueError:
690
+ return {}
691
+
692
+ spend: dict[str, tuple[float, float]] = {}
693
+ for row in rows[1:]:
694
+ if len(row) <= max(treatment_idx, tokens_idx, cost_idx):
695
+ continue
696
+ tokens = _number(row[tokens_idx])
697
+ cost = _number(row[cost_idx])
698
+ if tokens is None or cost is None:
699
+ continue
700
+ spend[_plain_text(row[treatment_idx])] = (tokens / 1_000_000, cost)
701
+ return spend
702
+
703
+
704
+ def _task_outcome_data(
705
+ tables: dict[str, list[list[str]]],
706
+ ) -> list[tuple[str, bool | None, bool | None]]:
707
+ rows = _find_table(tables, "Task outcomes")
708
+ if not rows:
709
+ return []
710
+ header = rows[0]
711
+ try:
712
+ task_idx = header.index("Task")
713
+ workflow_idx = header.index("COMET_FULL_040_BETA")
714
+ baseline_idx = header.index("COMET_FULL_039")
715
+ except ValueError:
716
+ return []
717
+ tasks: list[tuple[str, bool | None, bool | None]] = []
718
+ for row in rows[1:]:
719
+ if len(row) <= max(task_idx, workflow_idx, baseline_idx):
720
+ continue
721
+ current = _status_value(row[workflow_idx])
722
+ baseline = _status_value(row[baseline_idx])
723
+ tasks.append((_plain_text(row[task_idx]), current, baseline))
724
+ return tasks
725
+
726
+
727
+ def _quality_cost_points(
728
+ rubric: list[tuple[str, float]],
729
+ spend: dict[str, tuple[float, float]],
730
+ ) -> list[tuple[str, float, float, float]]:
731
+ deltas = [delta for _, delta in rubric]
732
+ delta_mean = sum(deltas) / len(deltas) if deltas else 0.0
733
+ baseline_score = max(0.0, min(1.0, 0.5 - delta_mean / 2))
734
+ workflow_score = max(0.0, min(1.0, baseline_score + delta_mean))
735
+ points: list[tuple[str, float, float, float]] = []
736
+ if "COMET_FULL_039" in spend:
737
+ tokens_m, cost = spend["COMET_FULL_039"]
738
+ points.append(("0.3.9 baseline", tokens_m, cost, baseline_score))
739
+ if "COMET_FULL_040_BETA" in spend:
740
+ tokens_m, cost = spend["COMET_FULL_040_BETA"]
741
+ points.append(("Current workflow", tokens_m, cost, workflow_score))
742
+ return points
743
+
744
+
745
+ def _rubric_delta_svg(data: list[tuple[str, float]], *, lang: str) -> str:
746
+ width, height = 920, max(260, 116 + len(data) * 38)
747
+ x0, y0, plot_w, row_gap = 330, 82, 410, 38
748
+ min_delta = min((delta for _, delta in data), default=-0.2)
749
+ max_delta = max((delta for _, delta in data), default=0.2)
750
+ x_min = min(-0.3, min_delta - 0.08)
751
+ x_max = max(0.3, max_delta + 0.08)
752
+ scale = plot_w / (x_max - x_min)
753
+ zero_x = x0 + (0 - x_min) * scale
754
+ title = "Rubric 维度差异" if lang == "zh" else "Rubric dimension deltas"
755
+ subtitle = (
756
+ "当前 workflow 减去 0.3.9 基线" if lang == "zh" else "Current workflow minus 0.3.9 baseline"
757
+ )
758
+ parts = _svg_header(
759
+ width,
760
+ height,
761
+ title,
762
+ subtitle,
763
+ )
764
+ for tick in _ticks(x_min, x_max):
765
+ x = x0 + (tick - x_min) * scale
766
+ klass = "axis" if abs(tick) < 0.0001 else "grid"
767
+ parts.append(
768
+ f'<line class="{klass}" x1="{x:.1f}" y1="68" x2="{x:.1f}" y2="{height - 58}" />'
769
+ )
770
+ parts.append(
771
+ f'<text class="tick" x="{x:.1f}" y="{height - 26}" '
772
+ f'text-anchor="middle">{tick:+.1f}</text>'
773
+ )
774
+ for idx, (label, delta) in enumerate(data):
775
+ y = y0 + idx * row_gap
776
+ x = x0 + (delta - x_min) * scale
777
+ color = CURRENT if delta >= 0 else BASELINE
778
+ parts.append(f'<text class="label" x="44" y="{y + 4}">{html.escape(label)}</text>')
779
+ parts.append(
780
+ f'<line x1="{zero_x:.1f}" y1="{y}" x2="{x:.1f}" y2="{y}" '
781
+ f'stroke="{color}" stroke-width="3" />'
782
+ )
783
+ parts.append(f'<circle cx="{x:.1f}" cy="{y}" r="5.2" fill="{color}" />')
784
+ parts.append(
785
+ f'<text class="value" x="850" y="{y + 4}" text-anchor="end">{delta:+.2f}</text>'
786
+ )
787
+ parts.append("</svg>")
788
+ return "\n".join(parts)
789
+
790
+
791
+ def _quality_cost_svg(points: list[tuple[str, float, float, float]], *, lang: str) -> str:
792
+ width, height = 820, 460
793
+ left, top, plot_w, plot_h = 86, 72, 620, 300
794
+ max_tokens = max(1.0, max(point[1] for point in points) * 1.15)
795
+ title = "质量-成本前沿" if lang == "zh" else "Quality-cost frontier"
796
+ subtitle = "左上角更优" if lang == "zh" else "Upper-left is better"
797
+ parts = _svg_header(width, height, title, subtitle)
798
+ for tick in _linear_ticks(0, max_tokens, 4):
799
+ x = left + (tick / max_tokens) * plot_w
800
+ parts.append(
801
+ f'<line class="grid" x1="{x:.1f}" y1="{top}" x2="{x:.1f}" y2="{top + plot_h}" />'
802
+ )
803
+ parts.append(
804
+ f'<text class="tick" x="{x:.1f}" y="402" text-anchor="middle">{tick:.1f}M</text>'
805
+ )
806
+ for tick in (0.3, 0.5, 0.7, 0.9):
807
+ y = top + (0.9 - tick) / 0.6 * plot_h
808
+ parts.append(
809
+ f'<line class="grid" x1="{left}" y1="{y:.1f}" x2="{left + plot_w}" y2="{y:.1f}" />'
810
+ )
811
+ parts.append(
812
+ f'<text class="tick" x="60" y="{y + 4:.1f}" text-anchor="end">{tick:.1f}</text>'
813
+ )
814
+ parts.append(
815
+ f'<line class="axis" x1="{left}" y1="{top + plot_h}" '
816
+ f'x2="{left + plot_w}" y2="{top + plot_h}" />'
817
+ )
818
+ parts.append(f'<line class="axis" x1="{left}" y1="{top}" x2="{left}" y2="{top + plot_h}" />')
819
+
820
+ coords = []
821
+ for label, tokens_m, cost, score in points:
822
+ x = left + (tokens_m / max_tokens) * plot_w
823
+ y = top + (0.9 - score) / 0.6 * plot_h
824
+ coords.append((x, y, label, tokens_m, cost, score))
825
+ if len(coords) >= 2:
826
+ parts.append(
827
+ f'<line x1="{coords[0][0]:.1f}" y1="{coords[0][1]:.1f}" '
828
+ f'x2="{coords[1][0]:.1f}" y2="{coords[1][1]:.1f}" '
829
+ 'stroke="#9B9488" stroke-width="1.5" stroke-dasharray="5 5" />'
830
+ )
831
+ for x, y, label, _tokens_m, cost, score in coords:
832
+ is_current = "Current" in label
833
+ color = CURRENT if is_current else BASELINE
834
+ anchor = "end" if x > left + plot_w * 0.72 else "start"
835
+ text_x = x - 14 if anchor == "end" else x + 14
836
+ display_label = ("当前 workflow" if is_current else "0.3.9 基线") if lang == "zh" else label
837
+ parts.append(f'<circle cx="{x:.1f}" cy="{y:.1f}" r="8" fill="{color}" />')
838
+ parts.append(
839
+ f'<text class="value" x="{text_x:.1f}" y="{y - 10:.1f}" '
840
+ f'text-anchor="{anchor}">{html.escape(display_label)}</text>'
841
+ )
842
+ parts.append(
843
+ f'<text class="tick" x="{text_x:.1f}" y="{y + 9:.1f}" '
844
+ f'text-anchor="{anchor}">{score:.2f} / ${cost:.2f}</text>'
845
+ )
846
+ parts.append(
847
+ f'<text class="label" x="{left + plot_w / 2:.1f}" y="438" '
848
+ f'text-anchor="middle">{"总 tokens" if lang == "zh" else "Total tokens"}</text>'
849
+ )
850
+ y_axis = top + plot_h / 2
851
+ parts.append(
852
+ f'<text class="label" x="24" y="{y_axis:.1f}" '
853
+ f'transform="rotate(-90 24 {y_axis:.1f})" '
854
+ f'text-anchor="middle">{"Rubric 分数" if lang == "zh" else "Rubric score"}</text>'
855
+ )
856
+ parts.append("</svg>")
857
+ return "\n".join(parts)
858
+
859
+
860
+ def _task_outcomes_svg(tasks: list[tuple[str, bool | None, bool | None]], *, lang: str) -> str:
861
+ width, height = 700, max(260, 116 + len(tasks) * 43)
862
+ left, top, cell_w, cell_h, gap = 300, 108, 142, 34, 9
863
+ title = "任务结果矩阵" if lang == "zh" else "Task outcome matrix"
864
+ subtitle = "绿色表示通过;红色表示失败" if lang == "zh" else "Green means pass; red means fail"
865
+ parts = _svg_header(width, height, title, subtitle)
866
+ column_labels = (
867
+ ("当前 workflow", "0.3.9 基线") if lang == "zh" else ("Current workflow", "0.3.9 baseline")
868
+ )
869
+ for i, label in enumerate(column_labels):
870
+ x = left + i * (cell_w + 28) + cell_w / 2
871
+ parts.append(f'<text class="label" x="{x:.1f}" y="86" text-anchor="middle">{label}</text>')
872
+ for row, (task, current, baseline) in enumerate(tasks):
873
+ y = top + row * (cell_h + gap)
874
+ parts.append(f'<text class="label" x="42" y="{y + 22}">{html.escape(task)}</text>')
875
+ for col, passed in enumerate((current, baseline)):
876
+ x = left + col * (cell_w + 28)
877
+ color = "#9B9488" if passed is None else GOOD if passed else BAD
878
+ if passed is None:
879
+ status = "N/A"
880
+ elif lang == "zh":
881
+ status = "通过" if passed else "失败"
882
+ else:
883
+ status = "PASS" if passed else "FAIL"
884
+ parts.append(
885
+ f'<rect x="{x}" y="{y}" width="{cell_w}" height="{cell_h}" rx="2" fill="{color}" />'
886
+ )
887
+ parts.append(
888
+ f'<text x="{x + cell_w / 2:.1f}" y="{y + 22}" '
889
+ f'text-anchor="middle" fill="#FFFFFF" font-family="{PAPER_FONT}" '
890
+ f'font-size="12" font-weight="700">{status}</text>'
891
+ )
892
+ parts.append("</svg>")
893
+ return "\n".join(parts)
894
+
895
+
896
+ def _svg_header(width: int, height: int, title: str, subtitle: str) -> list[str]:
897
+ return [
898
+ f'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 {width} {height}" '
899
+ f'role="img" aria-label="{html.escape(title)}">',
900
+ "<style>",
901
+ f"text {{ font-family: {PAPER_FONT}; }}",
902
+ ".title { fill: #1B1A18; font-size: 18px; font-weight: 700; }",
903
+ ".subtitle, .tick { fill: #66615A; font-size: 12px; }",
904
+ ".label { fill: #1B1A18; font-size: 13px; }",
905
+ ".value { fill: #1B1A18; font-size: 12px; }",
906
+ f".grid {{ stroke: {GRID}; stroke-width: 1; shape-rendering: crispEdges; }}",
907
+ f".axis {{ stroke: {INK}; stroke-width: 1; shape-rendering: crispEdges; }}",
908
+ "</style>",
909
+ f'<rect width="{width}" height="{height}" fill="#FFFFFF" />',
910
+ f'<text class="title" x="32" y="32">{html.escape(title)}</text>',
911
+ f'<text class="subtitle" x="32" y="54">{html.escape(subtitle)}</text>',
912
+ ]
913
+
914
+
915
+ def _find_table(tables: dict[str, list[list[str]]], heading_prefix: str) -> list[list[str]]:
916
+ for heading, rows in tables.items():
917
+ if heading.startswith(heading_prefix):
918
+ return rows
919
+ return []
920
+
921
+
922
+ def _find_table_with_columns(
923
+ tables: dict[str, list[list[str]]],
924
+ heading_prefix: str,
925
+ columns: tuple[str, ...],
926
+ ) -> list[list[str]]:
927
+ for heading, rows in tables.items():
928
+ if not heading.startswith(heading_prefix) or not rows:
929
+ continue
930
+ header = rows[0]
931
+ if all(column in header for column in columns):
932
+ return rows
933
+ return []
934
+
935
+
936
+ def _plain_text(value: str) -> str:
937
+ return re.sub(r"[*`_]", "", html.unescape(value)).strip()
938
+
939
+
940
+ def _number(value: str) -> float | None:
941
+ match = re.search(r"-?\d+(?:,\d{3})*(?:\.\d+)?|-?\d+(?:\.\d+)?", _plain_text(value))
942
+ if not match:
943
+ return None
944
+ return float(match.group(0).replace(",", ""))
945
+
946
+
947
+ def _status_value(value: str) -> bool | None:
948
+ normalized = _plain_text(value).upper()
949
+ if normalized == "PASS":
950
+ return True
951
+ if normalized == "FAIL":
952
+ return False
953
+ return None
954
+
955
+
956
+ def _ticks(x_min: float, x_max: float) -> list[float]:
957
+ ticks = [-0.4, -0.2, 0.0, 0.2, 0.4, 0.6, 0.8]
958
+ return [tick for tick in ticks if x_min <= tick <= x_max] or [0.0]
959
+
960
+
961
+ def _linear_ticks(start: float, stop: float, count: int) -> list[float]:
962
+ if count <= 1:
963
+ return [start]
964
+ step = (stop - start) / (count - 1)
965
+ return [start + step * idx for idx in range(count)]
966
+
967
+
968
+ def _indent(text: str, spaces: int) -> str:
969
+ prefix = " " * spaces
970
+ return "\n".join(prefix + line for line in text.splitlines())
971
+
972
+
973
+ def _localize_eval_markdown(markdown: str) -> str:
974
+ """Translate the human-facing eval report shell for HTML display only."""
975
+ replacements = [
976
+ ("# Comet Aligned Experiment Comparison Report", "# Comet 对齐实验对比报告"),
977
+ ("- Candidate:", "- 候选模式:"),
978
+ ("- Baseline:", "- 基准模式:"),
979
+ ("- Requested k:", "- 请求的 k:"),
980
+ (
981
+ "## Alignment contract",
982
+ "> 数据清洗:超时、缺失完整 report 或无法组成同 repetition 严格配对的样本已剔除,不进入成功率和效率指标。已完成但验证失败的样本仍作为有效失败保留,避免人为抬高成功率。\n\n## 对齐规则",
983
+ ),
984
+ (
985
+ "- Runs pair only when `task` and repetition match. Two v2 records must also match the full execution-bound `case_hash`; when either side is historical v1, only the shared task-core hash can be checked and the limitation is disclosed below.",
986
+ "- 仅当 `task` 和 repetition 相同时才配对。两个 v2 记录还必须具有相同的完整执行级 `case_hash`;若任一侧为历史 v1,则只能校验共享的 task-core hash,限制会在下文说明。",
987
+ ),
988
+ (
989
+ "- Expected task/repetition coverage comes from each experiment's controller-written matrix when available, not from the reports that happened to survive.",
990
+ "- 预期的 task/repetition 覆盖以实验控制器写入的矩阵为准,不以偶然保留下来的 report 反推。",
991
+ ),
992
+ (
993
+ "- Metrics are computed per task and then macro-averaged; runs are never pooled across tasks.",
994
+ "- 指标先按 task 计算,再做宏平均;不会把不同 task 的运行混在一起。",
995
+ ),
996
+ (
997
+ "- A task with fewer than k aligned repetitions is excluded from that k's task coverage; k is never reduced.",
998
+ "- 某 task 的对齐 repetition 少于 k 时,该 task 不纳入该 k 的统计;k 不会被自动降低。",
999
+ ),
1000
+ (
1001
+ "- Duration is reparsed from raw stdout with the current additive result-event parser. Stored historical duration fields are not mixed into this metric.",
1002
+ "- 耗时使用当前累加式 result-event 解析器从 raw stdout 重算,不混用历史存储的 duration 字段。",
1003
+ ),
1004
+ ("## Alignment summary", "## 对齐摘要"),
1005
+ (
1006
+ "| Candidate runs | Baseline runs | Expected task/rep keys | Strictly matched pairs | Tasks | Issues |",
1007
+ "| 发现的候选 report 数 | 发现的基准 report 数 | 预期 task/rep 键 | 有效严格配对数 | Task 数 | 剔除数 |",
1008
+ ),
1009
+ ("## Expected case matrix audit", "## 预期用例矩阵审计"),
1010
+ (
1011
+ "| Experiment | Source | Matrix hash | Target cases |",
1012
+ "| 实验 | 来源 | 矩阵 hash | 目标用例数 |",
1013
+ ),
1014
+ (
1015
+ "## pass@k / pass^k — task macro average",
1016
+ "## pass@k / pass^k — Task 宏平均",
1017
+ ),
1018
+ (
1019
+ "Each value is the mean of the per-task estimator. Coverage is shown as eligible tasks / all aligned task names.",
1020
+ "每个值都是先按 task 计算后的平均值。覆盖率表示为可统计 task 数 / 全部对齐 task 数。",
1021
+ ),
1022
+ (
1023
+ "`pass@k` uses the HumanEval at-least-one-success estimator. `pass^k` keeps Comet's observed consistency lower bound: a task contributes 1 only when all of its aligned repetitions pass.",
1024
+ "`pass@k` 使用 HumanEval 的至少一次成功估计。`pass^k` 表示 Comet 的一致性下限:只有当某 task 的所有对齐 repetition 都通过时才记为 1。",
1025
+ ),
1026
+ (
1027
+ "| Treatment | Metric |",
1028
+ "| Treatment | 指标 |",
1029
+ ),
1030
+ ("| Matched pass/fail |", "| 对齐通过/失败 |"),
1031
+ ("## Duration from raw stdout", "## 基于 raw stdout 的耗时"),
1032
+ (
1033
+ "Missing raw duration is reported as missing coverage and is not replaced by, or averaged with, the stored report duration.",
1034
+ "缺失的 raw duration 只记为覆盖缺口,不使用 report 中存储的 duration 替代或混合平均。",
1035
+ ),
1036
+ (
1037
+ "| Treatment | Matched runs | Duration coverage | Total | Average / covered run | Source |",
1038
+ "| Treatment | 对齐运行数 | 耗时覆盖 | 总计 | 平均每次有效运行 | 来源 |",
1039
+ ),
1040
+ (
1041
+ "Result telemetry is additive across the initial model start, deterministic user-answer resumes, and cold resumes. Token totals include cache-read tokens. Context input deduplicates streamed assistant events by message id.",
1042
+ "Result 遥测会累加首次模型启动、用户答案恢复和冷恢复。Token 总量包含缓存读取;上下文输入会按 message id 去重流式 assistant 事件。",
1043
+ ),
1044
+ (
1045
+ "This is the primary completed-task efficiency view: both candidate and baseline passed the same task repetition.",
1046
+ "这是已完成 task 的主要效率视图:候选模式与基准模式在同一 task repetition 上都必须通过。",
1047
+ ),
1048
+ (
1049
+ "> Context rows require per-assistant-message usage from both sides. Low pair coverage means the historical CLI did not preserve enough context telemetry; those rows must not be promoted as a workflow comparison.",
1050
+ "> 上下文指标要求两侧都保留每条 assistant message 的 usage。配对覆盖率较低时,这些指标不能上升为 workflow 对比结论。",
1051
+ ),
1052
+ ("## Case manifest audit", "## 用例 Manifest 审计"),
1053
+ (
1054
+ "Hash cells show the first 12 hexadecimal characters. Full hashes remain in the source report when report-bound; fallback hashes are reproducible from the task tree.",
1055
+ "Hash 单元格只显示前 12 位十六进制字符。report-bound 记录的完整 hash 保留在源 report 中;fallback hash 可由 task tree 重现。",
1056
+ ),
1057
+ (
1058
+ "| Task | Candidate case | Baseline case | Source | Instruction | Validator | Environment | Prompt | Runner | Controller | Execution |",
1059
+ "| Task | 候选用例 | 基准用例 | 来源 | 任务说明 | Validator | 环境 | Prompt | Runner | Controller | 执行身份 |",
1060
+ ),
1061
+ (
1062
+ "## Task outcomes on strictly matched repetitions",
1063
+ "## 严格配对 repetition 的 Task 结果",
1064
+ ),
1065
+ (
1066
+ "| Task | Repetitions | Candidate | Baseline |",
1067
+ "| Task | Repetition | 候选模式 | 基准模式 |",
1068
+ ),
1069
+ ("## Alignment issues", "## 已剔除的数据"),
1070
+ ("Issue counts:", "剔除数量:"),
1071
+ (
1072
+ "| Task | Rep | Reason | Detail |",
1073
+ "| Task | Rep | 原因 | 详情 |",
1074
+ ),
1075
+ ("missing-repetition", "缺失 repetition"),
1076
+ ("missing baseline run", "缺失基准模式运行"),
1077
+ ("missing candidate run", "缺失候选模式运行"),
1078
+ ("_None._", "_无。_"),
1079
+ ("Candidate average", "候选模式平均值"),
1080
+ ("Baseline average", "基准模式平均值"),
1081
+ ("Candidate delta", "候选模式差异"),
1082
+ ("Complete pairs", "完整配对"),
1083
+ (" paired runs)", " 个配对运行)"),
1084
+ ("% less", "% 更少"),
1085
+ ("% more", "% 更多"),
1086
+ ("` from `", "`,来源:`"),
1087
+ ("| Candidate |", "| 候选模式 |"),
1088
+ ("| Baseline |", "| 基准模式 |"),
1089
+ ("| Treatment |", "| 模式 |"),
1090
+ ("| Metric |", "| 指标 |"),
1091
+ (" tasks)", " 个 task)"),
1092
+ ("# Comet Baseline Comparison Report", "# Comet 基线对比报告"),
1093
+ ("- Experiment:", "- 实验:"),
1094
+ ("- Treatments with data:", "- 有数据的 Treatment:"),
1095
+ ("No report data found. Run the eval suite first.", "未找到报告数据。请先运行 eval 套件。"),
1096
+ ("## Metric guide", "## 指标说明"),
1097
+ ("| Metric | Meaning | Source | Report section |", "| 指标 | 含义 | 来源 | 报告位置 |"),
1098
+ ("|--------|---------|--------|----------------|", "|------|------|------|----------|"),
1099
+ (
1100
+ "| `raw runs` | All discovered report JSON files before quality filtering. | report files | Data quality summary |",
1101
+ "| `raw runs` | 质量过滤前发现的全部 report JSON 文件。 | report files | 数据质量摘要 |",
1102
+ ),
1103
+ (
1104
+ "| `analysis set` | Runs included in comparison metrics after excluding hard infrastructure noise. | sample_quality.include_in_analysis | Data quality summary / Run counts |",
1105
+ "| `analysis set` | 排除硬基础设施噪音后纳入对比指标的运行集合。 | sample_quality.include_in_analysis | 数据质量摘要 / 运行次数 |",
1106
+ ),
1107
+ (
1108
+ "| `flagged` | Completed runs kept in analysis but marked as suspicious, usually harness/task/observability risk. | sample_quality.status | Data quality summary / Flagged runs |",
1109
+ "| `flagged` | 已完成且仍纳入分析,但带有 harness、task 或观测风险标记的运行。 | sample_quality.status | 数据质量摘要 / 已标记运行 |",
1110
+ ),
1111
+ (
1112
+ "| `excluded` | Runs removed from headline metrics, typically API, quota, auth, network, container, or runner failures before a complete result. | sample_quality.status | Data quality summary / Excluded runs |",
1113
+ "| `excluded` | 从核心指标中移除的运行,通常是完整结果前发生 API、额度、鉴权、网络、容器或 runner 故障。 | sample_quality.status | 数据质量摘要 / 已排除运行 |",
1114
+ ),
1115
+ (
1116
+ "| `pass@k` | Probability that at least one of k attempts succeeds; capability ceiling. | pass/fail booleans | pass@k / pass^k |",
1117
+ "| `pass@k` | k 次尝试中至少一次成功的概率,表示能力上限。 | pass/fail booleans | pass@k / pass^k |",
1118
+ ),
1119
+ (
1120
+ "| `pass^k` | Probability that all k attempts succeed; reliability floor. | pass/fail booleans | pass@k / pass^k |",
1121
+ "| `pass^k` | k 次尝试全部成功的概率,表示可靠性下限。 | pass/fail booleans | pass@k / pass^k |",
1122
+ ),
1123
+ (
1124
+ "| `overall` | Run passes when task-level `checks_failed == []`. | checks_failed | pass@k / Task outcomes |",
1125
+ "| `overall` | task 级 `checks_failed == []` 时视为运行通过。 | checks_failed | pass@k / 任务结果 |",
1126
+ ),
1127
+ (
1128
+ "| `business_completion` | Business validator pass rate; CONTROL is evaluated on this without requiring Comet workflow artifacts. | `[RUBRIC] business_completion` | Rubric dimensions / pass@k |",
1129
+ "| `business_completion` | 业务 validator 通过率;CONTROL 只按它评估,不要求 Comet workflow 产物。 | `[RUBRIC] business_completion` | Rubric 维度 / pass@k |",
1130
+ ),
1131
+ (
1132
+ "| `workflow_completion` | Comet workflow validator pass rate; `/` means not applicable for CONTROL. | `[RUBRIC] workflow_completion` | Rubric dimensions / pass@k |",
1133
+ "| `workflow_completion` | Comet workflow validator 通过率;`/` 表示 CONTROL 不适用。 | `[RUBRIC] workflow_completion` | Rubric 维度 / pass@k |",
1134
+ ),
1135
+ (
1136
+ "| `weighted_score` | Weighted average across applicable rubric dimensions; N/A dimensions are skipped. | `[RUBRIC] weighted_score` | Rubric dimensions / Overall |",
1137
+ "| `weighted_score` | 适用 Rubric 维度的加权平均;N/A 维度不参与计算。 | `[RUBRIC] weighted_score` | Rubric 维度 / Overall |",
1138
+ ),
1139
+ (
1140
+ "| `tokens` / `cost` | Total model token and USD cost telemetry for included runs. | events_summary | Spend summary |",
1141
+ "| `tokens` / `cost` | 纳入分析运行的模型 token 与美元成本遥测。 | events_summary | 成本摘要 |",
1142
+ ),
1143
+ (
1144
+ "| `turns` / `duration` / `tool calls` | Runtime effort telemetry for included runs; also feeds the `efficiency` rubric. | events_summary | Runtime summary / Rubric dimensions |",
1145
+ "| `turns` / `duration` / `tool calls` | 纳入分析运行的运行时开销遥测,也用于 `efficiency` Rubric。 | events_summary | 运行摘要 / Rubric 维度 |",
1146
+ ),
1147
+ (
1148
+ "| `run-level failed checks` | Buckets sample-level `checks_failed` entries into harness, business, workflow, task, or uncategorized causes; this is not the same as the task outcome matrix. | checks_failed / events_summary.failure_attribution | Run-level failed checks |",
1149
+ "| `run-level failed checks` | 将样本级 `checks_failed` 条目归入 harness、business、workflow、task 或 uncategorized;它不等同于任务结果矩阵。 | checks_failed / events_summary.failure_attribution | 样本级失败检查 |",
1150
+ ),
1151
+ (
1152
+ "| `source evidence` | Run id, quality status, profile, Skill source hashes, eval manifest, and raw report reference. | events_summary / sample_quality | Source evidence |",
1153
+ "| `source evidence` | run id、质量状态、profile、Skill source hash、eval manifest 和原始 report 引用。 | events_summary / sample_quality | 来源证据 |",
1154
+ ),
1155
+ ("## Data quality summary", "## 数据质量摘要"),
1156
+ ("## Run counts", "## 运行次数"),
1157
+ (
1158
+ "_Analysis set only; excluded hard-noise runs are omitted._",
1159
+ "_仅统计分析集;已排除的硬噪声运行不会进入统计。_",
1160
+ ),
1161
+ (
1162
+ "## pass@k / pass^k — capability vs reliability",
1163
+ "## pass@k / pass^k — 能力上限 vs 可靠性下限",
1164
+ ),
1165
+ (
1166
+ "- **pass@k**: probability ≥1 of k attempts succeeds (capability ceiling)",
1167
+ "- **pass@k**:k 次尝试中至少 1 次成功的概率(能力上限)",
1168
+ ),
1169
+ (
1170
+ "- **pass^k**: probability all k attempts succeed (reliability floor)",
1171
+ "- **pass^k**:k 次尝试全部成功的概率(可靠性下限)",
1172
+ ),
1173
+ (
1174
+ "- **overall**: run passes when `checks_failed == []`.",
1175
+ "- **overall**:当 `checks_failed == []` 时视为运行通过。",
1176
+ ),
1177
+ (
1178
+ "- **business**: run passes when `business_completion == 1.00`.",
1179
+ "- **business**:当 `business_completion == 1.00` 时视为业务完成。",
1180
+ ),
1181
+ (
1182
+ "- **workflow**: run passes when `workflow_completion == 1.00`; `/` means not applicable.",
1183
+ "- **workflow**:当 `workflow_completion == 1.00` 时视为 workflow 完成;`/` 表示不适用。",
1184
+ ),
1185
+ (
1186
+ "- The gap (pass@k − pass^k) measures instability: high ceiling, low floor = unreliable.",
1187
+ "- pass@k 与 pass^k 的差值衡量不稳定性:上限高但下限低,说明可靠性不足。",
1188
+ ),
1189
+ ("## Task outcomes", "## 任务结果"),
1190
+ ("## Spend summary", "## 成本摘要"),
1191
+ ("## Runtime summary", "## 运行摘要"),
1192
+ ("## Paired task efficiency from raw stdout", "## 基于原始 stdout 的配对任务效率"),
1193
+ ("### Strict-success intersection", "### 双方严格通过交集"),
1194
+ ("### All aligned runs", "### 全部对齐运行"),
1195
+ (
1196
+ "| Metric | Complete pairs | Candidate average | Baseline average | Candidate delta |",
1197
+ "| 指标 | 完整配对 | Candidate 平均值 | Baseline 平均值 | Candidate 差异 |",
1198
+ ),
1199
+ ("| Model starts/resumes |", "| 模型启动/恢复次数 |"),
1200
+ ("| Agent turns |", "| Agent 轮次 |"),
1201
+ ("| Tool calls |", "| 工具调用 |"),
1202
+ ("| Wall duration |", "| 累计模型耗时 |"),
1203
+ ("| Non-cache input tokens |", "| 非缓存输入 Token |"),
1204
+ ("| Output tokens |", "| 输出 Token |"),
1205
+ ("| Cache-read input tokens |", "| 缓存读取 Token |"),
1206
+ ("| Total tokens incl. cache |", "| 总 Token(包含缓存读取) |"),
1207
+ ("| Model cost |", "| 模型成本 |"),
1208
+ ("| Peak context input |", "| 峰值上下文输入 |"),
1209
+ ("| P95 context input |", "| P95 上下文输入 |"),
1210
+ ("| Peak context occupancy |", "| 峰值上下文占用 |"),
1211
+ ("## Source evidence", "## 来源证据"),
1212
+ (
1213
+ "Use this section to trace each aggregate metric back to the raw run artifacts.",
1214
+ "使用本节可以把每个聚合指标追溯到原始运行产物。",
1215
+ ),
1216
+ (
1217
+ "- `Run` is the run id or fallback report id.",
1218
+ "- `Run` 是 run id,缺失时使用 report id。",
1219
+ ),
1220
+ (
1221
+ "- `Quality` is the sample-quality status used by the analysis-set filter.",
1222
+ "- `Quality` 是分析集过滤使用的样本质量状态。",
1223
+ ),
1224
+ (
1225
+ "- `Reason` explains why the run is included, flagged, or excluded.",
1226
+ "- `Reason` 解释该运行为什么被纳入、标记或排除。",
1227
+ ),
1228
+ (
1229
+ "- `Profile` is the eval rubric/profile that scored the run.",
1230
+ "- `Profile` 是对该运行评分的 eval rubric/profile。",
1231
+ ),
1232
+ (
1233
+ "- `Skill sources` records installed Skill identity or hash evidence when the run provides it.",
1234
+ "- `Skill sources` 记录运行提供的已安装 Skill 身份或 hash 证据。",
1235
+ ),
1236
+ (
1237
+ "- `Eval manifest` is the task manifest that defined the evaluated scenario.",
1238
+ "- `Eval manifest` 是定义被评估场景的任务 manifest。",
1239
+ ),
1240
+ (
1241
+ "- `Report` points to the raw per-run report JSON for deeper inspection.",
1242
+ "- `Report` 指向可深入检查的原始单次运行 report JSON。",
1243
+ ),
1244
+ ("## Rubric dimensions", "## Rubric 维度"),
1245
+ (
1246
+ "_Scores are binary pass-rates (0.0-1.0). Overall uses the validator-emitted weighted_score when available (see weights below)._",
1247
+ "_分数是二值通过率(0.0-1.0)。Overall 优先使用 validator 输出的 weighted_score(权重见下方)。_",
1248
+ ),
1249
+ ("### Dimension guide", "### 维度说明"),
1250
+ ("| Dimension | Meaning |", "| 维度 | 含义 |"),
1251
+ (
1252
+ "| main_flow | Completion of the expected Comet workflow phases. |",
1253
+ "| main_flow | 是否完成预期的 Comet workflow 阶段。 |",
1254
+ ),
1255
+ (
1256
+ "| gate_guard | Use of required guard, state transition, and apply checkpoints. |",
1257
+ "| gate_guard | 是否使用必需的 guard、状态推进和 apply 检查点。 |",
1258
+ ),
1259
+ (
1260
+ "| skill_invocation | Invocation of Comet, OpenSpec, and Superpowers dependency Skills. |",
1261
+ "| skill_invocation | 是否调用 Comet、OpenSpec 和 Superpowers 依赖 Skill。 |",
1262
+ ),
1263
+ (
1264
+ "| spec_drift | Whether build-time spec changes were reconciled before archive. |",
1265
+ "| spec_drift | 构建期间产生的 spec 变更是否在归档前完成同步。 |",
1266
+ ),
1267
+ (
1268
+ "| business_completion | Business validator pass rate for the requested task behavior. |",
1269
+ "| business_completion | 业务 validator 对用户请求行为的通过率。 |",
1270
+ ),
1271
+ (
1272
+ "| workflow_completion | Workflow validator pass rate for Comet workflow artifacts. |",
1273
+ "| workflow_completion | Workflow validator 对 Comet workflow 产物的通过率。 |",
1274
+ ),
1275
+ (
1276
+ "| efficiency | Runtime effort score from turns, tool calls, and duration. |",
1277
+ "| efficiency | 基于轮次、工具调用和耗时计算的运行开销得分。 |",
1278
+ ),
1279
+ (
1280
+ "| decision_point_compliance | Whether blocking decision points were surfaced instead of auto-decided. |",
1281
+ "| decision_point_compliance | 是否把阻塞性决策点交给用户,而不是自动决定。 |",
1282
+ ),
1283
+ (
1284
+ "| artifact_quality | Whether generated proposal, design, task, and test artifacts are substantive. |",
1285
+ "| artifact_quality | 生成的 proposal、design、task 和 test 产物是否有实质内容。 |",
1286
+ ),
1287
+ (
1288
+ "| recovery_resilience | Whether workflow state was preserved and recovered across interruptions. |",
1289
+ "| recovery_resilience | 中断前后 workflow 状态是否被保存并可恢复。 |",
1290
+ ),
1291
+ ("### Dimension weights", "### 维度权重"),
1292
+ ("## Excluded runs", "## 已排除运行"),
1293
+ ("## Flagged runs", "## 已标记运行"),
1294
+ ("## Raw vs analysis sensitivity", "## Raw 与分析集敏感性"),
1295
+ ("## Run-level failed checks", "## 样本级失败检查"),
1296
+ (
1297
+ "These are sample-level `checks_failed` entries. They can coexist with `workflow_completion == 1.00`, `pass@k == 1.00`, or a passing task outcome because they describe stricter run-contract failures rather than the workflow artifact completion score or the task outcome matrix.",
1298
+ "这些是样本级 `checks_failed` 条目。它们可以与 `workflow_completion == 1.00`、`pass@k == 1.00` 或通过的任务结果同时存在,因为它们描述的是更严格的运行契约失败,而不是 workflow 产物完成分数或任务结果矩阵。",
1299
+ ),
1300
+ (
1301
+ "Each failed baseline check is bucketed as **harness** (runner/trigger issue), **business** (requested behavior issue), **workflow** (skill guidance or workflow artifact issue), **task** (task/validator issue), or **uncategorized** (valid completed failure that needs inspection).",
1302
+ "每个失败的基线检查都会归因到 **harness**(运行器/触发问题)、**business**(业务实现问题)、**workflow**(Skill 指引或 workflow 产物问题)、**task**(任务/validator 问题)或 **uncategorized**(需要继续检查的有效失败)。",
1303
+ ),
1304
+ ("_No baseline check failures across treatments._", "_所有 Treatment 均无基线检查失败。_"),
1305
+ ("## Verdict", "## 结论"),
1306
+ (
1307
+ "⚠️ **Insufficient clean data**: analysis set has no included runs for",
1308
+ "⚠️ **干净数据不足**:分析集没有可纳入的运行:",
1309
+ ),
1310
+ (
1311
+ ". Rerun the affected task/treatment pairs or inspect the excluded runs above.",
1312
+ "。请重新运行受影响的 task/treatment 组合,或检查上方已排除运行。",
1313
+ ),
1314
+ (
1315
+ "⚠️ **Inconclusive due to data quality**: more than half of the raw runs were excluded for",
1316
+ "⚠️ **因数据质量无法下结论**:超过一半原始运行被排除:",
1317
+ ),
1318
+ (
1319
+ ". The analysis metrics are shown, but the A/B verdict should not be treated as final.",
1320
+ "。报告仍展示分析指标,但 A/B 结论不应视为最终结论。",
1321
+ ),
1322
+ ("Insufficient data: need both", "数据不足:需要同时具备"),
1323
+ (
1324
+ "❌ **Workflow regresses on",
1325
+ "❌ **Workflow 相比 0.3.9 基线发生回退,共",
1326
+ ),
1327
+ (
1328
+ "See the run-level failed checks section above and the events/raw logs for root-cause analysis.",
1329
+ "请结合上方样本级失败检查以及 events/raw logs 做根因分析。",
1330
+ ),
1331
+ ("✅ **Workflow is stable**", "✅ **Workflow 稳定**"),
1332
+ ("⚠️ **Workflow overall lower**", "⚠️ **Workflow overall 较低**"),
1333
+ ("_Verdict uses analysis set:", "_结论使用分析集:"),
1334
+ (
1335
+ "_Distribution stats computed from ≥2 runs per treatment._",
1336
+ "_分布统计基于每个 Treatment 至少 2 次运行计算。_",
1337
+ ),
1338
+ ("## LLM-judge overlay (rule vs judge)", "## LLM-judge 覆盖层(规则 vs Judge)"),
1339
+ (
1340
+ "Independent LLM re-scored the three qualitative dimensions by reading the actual artifacts. Large rule-vs-judge gaps flag heuristic weaknesses.",
1341
+ "独立 LLM 读取实际产物后重新评分三个定性维度。规则分与 Judge 分差距较大时,说明启发式指标可能偏弱。",
1342
+ ),
1343
+ ]
1344
+ localized = markdown
1345
+ for source, target in replacements:
1346
+ localized = localized.replace(source, target)
1347
+ localized = _localize_failure_attribution(localized)
1348
+ return localized
1349
+
1350
+
1351
+ def localize_eval_markdown(markdown: str) -> str:
1352
+ """Return the Chinese localization used by the HTML report's default view."""
1353
+ return _localize_eval_markdown(markdown)
1354
+
1355
+
1356
+ def _localize_failure_attribution(markdown: str) -> str:
1357
+ localized = markdown
1358
+ localized = re.sub(
1359
+ r"^### (.+?) \((\d+) failure\(s\)\)$",
1360
+ r"### \1(\2 个失败)",
1361
+ localized,
1362
+ flags=re.MULTILINE,
1363
+ )
1364
+ localized = re.sub(
1365
+ r"^- \*\*(harness|business|workflow|task|uncategorized)\*\* \((\d+)\):$",
1366
+ r"- **\1**(\2):",
1367
+ localized,
1368
+ flags=re.MULTILINE,
1369
+ )
1370
+ replacements = [
1371
+ ("**harness**(", "**harness/运行器**("),
1372
+ ("**business**(", "**business/业务**("),
1373
+ ("**workflow**(", "**workflow/流程**("),
1374
+ ("**task**(", "**task/任务**("),
1375
+ ("**uncategorized**(", "**uncategorized/未分类**("),
1376
+ ("[harness]", "[运行器]"),
1377
+ ("[business]", "[业务]"),
1378
+ ("[workflow]", "[流程]"),
1379
+ ("[task]", "[任务]"),
1380
+ ("[uncategorized]", "[未分类]"),
1381
+ ("business validator failed", "业务验证失败"),
1382
+ ("workflow validator failed", "Workflow 验证失败"),
1383
+ ("validator failed", "验证失败"),
1384
+ ("Required skill not invoked", "必需 Skill 未调用"),
1385
+ ("target Skill was never invoked", "目标 Skill 未被调用"),
1386
+ (
1387
+ "business implementation did not pass validation",
1388
+ "业务实现未通过",
1389
+ ),
1390
+ (
1391
+ "workflow validation did not pass",
1392
+ "Workflow 验证未通过",
1393
+ ),
1394
+ (
1395
+ "uncategorized valid failure",
1396
+ "未分类有效失败",
1397
+ ),
1398
+ (
1399
+ "skill was not invoked — workflow guidance failed to trigger the skill",
1400
+ "Skill 未调用,workflow 指引未触发 Skill",
1401
+ ),
1402
+ (
1403
+ "guard/state machinery not exercised — workflow did not drive phase transitions",
1404
+ "guard/state 机制未执行,workflow 没有推进阶段转换",
1405
+ ),
1406
+ (
1407
+ "feature implementation incomplete",
1408
+ "功能实现不完整",
1409
+ ),
1410
+ (
1411
+ "artifact path/layout mismatch — likely task/validator path assumption",
1412
+ "产物路径或布局不匹配,可能是任务或 validator 的路径假设问题",
1413
+ ),
1414
+ (
1415
+ "comet state file missing — workflow did not initialise state machine",
1416
+ "comet 状态文件缺失,workflow 没有初始化状态机",
1417
+ ),
1418
+ (
1419
+ "expected tests were not written",
1420
+ "预期测试未写入",
1421
+ ),
1422
+ ]
1423
+ for source, target in replacements:
1424
+ localized = localized.replace(source, target)
1425
+ return localized
1426
+
1427
+
1428
+ def _read_config_file(path: Path) -> dict[str, Any]:
1429
+ if not path.exists():
1430
+ raise FileNotFoundError(f"report config not found: {path}")
1431
+ text = path.read_text(encoding="utf-8")
1432
+ if path.suffix.lower() in {".yaml", ".yml"}:
1433
+ import yaml
1434
+
1435
+ data = yaml.safe_load(text) or {}
1436
+ else:
1437
+ data = json.loads(text or "{}")
1438
+ if not isinstance(data, dict):
1439
+ raise ValueError("report config must be an object")
1440
+ return data
1441
+
1442
+
1443
+ def _read_bool(data: dict[str, Any], key: str, *, default: bool) -> bool:
1444
+ value = data.get(key, default)
1445
+ if isinstance(value, bool):
1446
+ return value
1447
+ raise ValueError(f"report_outputs.{key} must be true or false")
1448
+
1449
+
1450
+ def _render_markdown_body(markdown: str, *, after_first_heading_html: str = "") -> str:
1451
+ lines = markdown.splitlines()
1452
+ rendered: list[str] = []
1453
+ in_list = False
1454
+ inserted_after_title = False
1455
+ i = 0
1456
+
1457
+ def close_list() -> None:
1458
+ nonlocal in_list
1459
+ if in_list:
1460
+ rendered.append("</ul>")
1461
+ in_list = False
1462
+
1463
+ while i < len(lines):
1464
+ line = lines[i]
1465
+ stripped = line.strip()
1466
+
1467
+ if not stripped:
1468
+ close_list()
1469
+ i += 1
1470
+ continue
1471
+
1472
+ if stripped.startswith("|") and stripped.endswith("|"):
1473
+ close_list()
1474
+ table_lines: list[str] = []
1475
+ while i < len(lines) and lines[i].strip().startswith("|"):
1476
+ table_lines.append(lines[i].strip())
1477
+ i += 1
1478
+ rendered.extend(_render_table(table_lines))
1479
+ continue
1480
+
1481
+ heading = re.match(r"^(#{1,6})\s+(.+)$", stripped)
1482
+ if heading:
1483
+ close_list()
1484
+ level = len(heading.group(1))
1485
+ rendered.append(f"<h{level}>{_inline_markdown(heading.group(2))}</h{level}>")
1486
+ if level == 1 and after_first_heading_html and not inserted_after_title:
1487
+ rendered.extend(after_first_heading_html.rstrip("\n").splitlines())
1488
+ inserted_after_title = True
1489
+ i += 1
1490
+ continue
1491
+
1492
+ bullet = re.match(r"^-\s+(.+)$", stripped)
1493
+ if bullet:
1494
+ if not in_list:
1495
+ rendered.append("<ul>")
1496
+ in_list = True
1497
+ rendered.append(f" <li>{_inline_markdown(bullet.group(1))}</li>")
1498
+ i += 1
1499
+ continue
1500
+
1501
+ close_list()
1502
+ rendered.append(f"<p>{_inline_markdown(stripped)}</p>")
1503
+ i += 1
1504
+
1505
+ close_list()
1506
+ return "\n".join(f" {line}" for line in rendered)
1507
+
1508
+
1509
+ def _render_table(lines: list[str]) -> list[str]:
1510
+ rows = [_table_cells(line) for line in lines if not _is_table_separator(line)]
1511
+ if not rows:
1512
+ return []
1513
+
1514
+ headers = rows[0]
1515
+ column_classes = [_column_class(header) for header in headers]
1516
+ wide_table = any(
1517
+ column in {"col-evidence", "col-report", "col-run"} for column in column_classes
1518
+ )
1519
+ table_class = "data-table data-table--wide" if wide_table else "data-table"
1520
+ rendered = [
1521
+ '<div class="table-scroll">',
1522
+ f'<table class="{table_class}">',
1523
+ " <thead>",
1524
+ " <tr>",
1525
+ ]
1526
+ for cell, column_class in zip(headers, column_classes):
1527
+ rendered.append(f" <th{_class_attr(column_class)}>{_inline_markdown(cell)}</th>")
1528
+ rendered.extend([" </tr>", " </thead>"])
1529
+ if len(rows) > 1:
1530
+ rendered.append(" <tbody>")
1531
+ for row in rows[1:]:
1532
+ rendered.append(" <tr>")
1533
+ for index, cell in enumerate(row):
1534
+ column_class = column_classes[index] if index < len(column_classes) else ""
1535
+ rendered.append(
1536
+ f" <td{_class_attr(column_class)}>{_inline_markdown(cell)}</td>"
1537
+ )
1538
+ rendered.append(" </tr>")
1539
+ rendered.append(" </tbody>")
1540
+ rendered.append("</table>")
1541
+ rendered.append("</div>")
1542
+ return rendered
1543
+
1544
+
1545
+ def _class_attr(class_name: str) -> str:
1546
+ return f' class="{class_name}"' if class_name else ""
1547
+
1548
+
1549
+ def _column_class(header: str) -> str:
1550
+ slug = re.sub(r"[^a-z0-9]+", "-", header.strip().lower()).strip("-")
1551
+ return f"col-{slug}" if slug else ""
1552
+
1553
+
1554
+ def _table_cells(line: str) -> list[str]:
1555
+ return [cell.strip() for cell in line.strip().strip("|").split("|")]
1556
+
1557
+
1558
+ def _is_table_separator(line: str) -> bool:
1559
+ cells = _table_cells(line)
1560
+ return bool(cells) and all(re.fullmatch(r":?-{3,}:?", cell.strip()) for cell in cells)
1561
+
1562
+
1563
+ def _inline_markdown(text: str) -> str:
1564
+ escaped = html.escape(text)
1565
+ full_emphasis = escaped.startswith("_") and escaped.endswith("_") and len(escaped) > 2
1566
+ if full_emphasis:
1567
+ escaped = escaped[1:-1]
1568
+ escaped = re.sub(r"`([^`]+)`", r"<code>\1</code>", escaped)
1569
+ escaped = re.sub(r"\*\*([^*]+)\*\*", r"<strong>\1</strong>", escaped)
1570
+ escaped = re.sub(r"(?<!\w)_([^_]+)_(?!\w)", r"<em>\1</em>", escaped)
1571
+ if full_emphasis:
1572
+ escaped = f"<em>{escaped}</em>"
1573
+ return escaped