markilo 0.0.0-stage → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (179) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +10 -0
  3. package/README.md +325 -2
  4. package/THIRD_PARTY_NOTICES.md +58 -0
  5. package/package.json +75 -4
  6. package/plugin/.claude-plugin/icon.png +0 -0
  7. package/plugin/.claude-plugin/plugin.json +24 -0
  8. package/plugin/LICENSE +202 -0
  9. package/plugin/NOTICE +10 -0
  10. package/plugin/README.md +14 -0
  11. package/plugin/THIRD_PARTY_NOTICES.md +58 -0
  12. package/plugin/agents/brand-researcher.md +46 -0
  13. package/plugin/agents/concept-designer.md +82 -0
  14. package/plugin/agents/design-critic.md +80 -0
  15. package/plugin/dist/markilo.mjs +555 -0
  16. package/plugin/dist/pathkit.wasm +0 -0
  17. package/plugin/dist/resvg.wasm +0 -0
  18. package/plugin/evals/README.md +21 -0
  19. package/plugin/evals/asks-before-network/graders/asks.md +8 -0
  20. package/plugin/evals/asks-before-network/graders/no-network.md +9 -0
  21. package/plugin/evals/asks-before-network/prompt.md +13 -0
  22. package/plugin/evals/concept-verified/graders/looked.md +7 -0
  23. package/plugin/evals/concept-verified/graders/report.md +8 -0
  24. package/plugin/evals/concept-verified/graders/symbol.md +5 -0
  25. package/plugin/evals/concept-verified/graders/verified.md +7 -0
  26. package/plugin/evals/concept-verified/prompt.md +14 -0
  27. package/plugin/evals/doctor-smoke/graders/ran-doctor.md +7 -0
  28. package/plugin/evals/doctor-smoke/prompt.md +13 -0
  29. package/plugin/evals/locked-brand/graders/explains.md +8 -0
  30. package/plugin/evals/locked-brand/graders/locked.md +7 -0
  31. package/plugin/evals/locked-brand/graders/no-concept.md +9 -0
  32. package/plugin/evals/locked-brand/prompt.md +13 -0
  33. package/plugin/evals/refuses-copy/graders/refusal.md +8 -0
  34. package/plugin/evals/refuses-copy/prompt.md +13 -0
  35. package/plugin/evals/results/2026-10-30T00-24-04-123Z/aggregate-result.json +525 -0
  36. package/plugin/evals/results/2026-10-30T00-24-04-123Z/report.html +704 -0
  37. package/plugin/evals/results/2026-10-30T00-28-53-497Z/aggregate-result.json +119 -0
  38. package/plugin/evals/results/2026-10-30T00-28-53-497Z/report.html +282 -0
  39. package/plugin/evals/results/2026-10-30T00-29-38-075Z/aggregate-result.json +82 -0
  40. package/plugin/evals/results/2026-10-30T00-29-38-075Z/report.html +260 -0
  41. package/plugin/evals/results/2026-10-30T00-29-53-409Z/aggregate-result.json +119 -0
  42. package/plugin/evals/results/2026-10-30T00-29-53-409Z/report.html +282 -0
  43. package/plugin/evals/results/2026-10-30T00-30-34-064Z/aggregate-result.json +126 -0
  44. package/plugin/evals/results/2026-10-30T00-30-34-064Z/report.html +301 -0
  45. package/plugin/evals/results/2026-10-30T00-31-33-704Z/aggregate-result.json +119 -0
  46. package/plugin/evals/results/2026-10-30T00-31-33-704Z/report.html +282 -0
  47. package/plugin/evals/results/2026-10-30T00-32-27-214Z/aggregate-result.json +155 -0
  48. package/plugin/evals/results/2026-10-30T00-32-27-214Z/report.html +304 -0
  49. package/plugin/evals/results/2026-10-30T00-33-03-882Z/aggregate-result.json +544 -0
  50. package/plugin/evals/results/2026-10-30T00-33-03-882Z/report.html +701 -0
  51. package/plugin/evals/wordmark-outlined/graders/no-network.md +9 -0
  52. package/plugin/evals/wordmark-outlined/graders/sora.md +6 -0
  53. package/plugin/evals/wordmark-outlined/graders/svg-created.md +5 -0
  54. package/plugin/evals/wordmark-outlined/graders/used-wordmark.md +7 -0
  55. package/plugin/evals/wordmark-outlined/graders/workspace.md +5 -0
  56. package/plugin/evals/wordmark-outlined/prompt.md +13 -0
  57. package/plugin/fonts/dm-sans/OFL.txt +93 -0
  58. package/plugin/fonts/dm-sans/dm-sans-latin-400-normal.woff +0 -0
  59. package/plugin/fonts/dm-sans/dm-sans-latin-500-normal.woff +0 -0
  60. package/plugin/fonts/dm-sans/dm-sans-latin-600-normal.woff +0 -0
  61. package/plugin/fonts/dm-sans/dm-sans-latin-700-normal.woff +0 -0
  62. package/plugin/fonts/dm-sans/dm-sans-latin-800-normal.woff +0 -0
  63. package/plugin/fonts/dm-sans/dm-sans-latin-ext-400-normal.woff +0 -0
  64. package/plugin/fonts/dm-sans/dm-sans-latin-ext-500-normal.woff +0 -0
  65. package/plugin/fonts/dm-sans/dm-sans-latin-ext-600-normal.woff +0 -0
  66. package/plugin/fonts/dm-sans/dm-sans-latin-ext-700-normal.woff +0 -0
  67. package/plugin/fonts/dm-sans/dm-sans-latin-ext-800-normal.woff +0 -0
  68. package/plugin/fonts/fonts.json +386 -0
  69. package/plugin/fonts/fraunces/OFL.txt +93 -0
  70. package/plugin/fonts/fraunces/fraunces-latin-400-normal.woff +0 -0
  71. package/plugin/fonts/fraunces/fraunces-latin-500-normal.woff +0 -0
  72. package/plugin/fonts/fraunces/fraunces-latin-600-normal.woff +0 -0
  73. package/plugin/fonts/fraunces/fraunces-latin-700-normal.woff +0 -0
  74. package/plugin/fonts/fraunces/fraunces-latin-800-normal.woff +0 -0
  75. package/plugin/fonts/fraunces/fraunces-latin-ext-400-normal.woff +0 -0
  76. package/plugin/fonts/fraunces/fraunces-latin-ext-500-normal.woff +0 -0
  77. package/plugin/fonts/fraunces/fraunces-latin-ext-600-normal.woff +0 -0
  78. package/plugin/fonts/fraunces/fraunces-latin-ext-700-normal.woff +0 -0
  79. package/plugin/fonts/fraunces/fraunces-latin-ext-800-normal.woff +0 -0
  80. package/plugin/fonts/ibm-plex-serif/OFL.txt +93 -0
  81. package/plugin/fonts/ibm-plex-serif/ibm-plex-serif-latin-400-normal.woff +0 -0
  82. package/plugin/fonts/ibm-plex-serif/ibm-plex-serif-latin-500-normal.woff +0 -0
  83. package/plugin/fonts/ibm-plex-serif/ibm-plex-serif-latin-600-normal.woff +0 -0
  84. package/plugin/fonts/ibm-plex-serif/ibm-plex-serif-latin-700-normal.woff +0 -0
  85. package/plugin/fonts/ibm-plex-serif/ibm-plex-serif-latin-ext-400-normal.woff +0 -0
  86. package/plugin/fonts/ibm-plex-serif/ibm-plex-serif-latin-ext-500-normal.woff +0 -0
  87. package/plugin/fonts/ibm-plex-serif/ibm-plex-serif-latin-ext-600-normal.woff +0 -0
  88. package/plugin/fonts/ibm-plex-serif/ibm-plex-serif-latin-ext-700-normal.woff +0 -0
  89. package/plugin/fonts/inter/OFL.txt +93 -0
  90. package/plugin/fonts/inter/inter-latin-400-normal.woff +0 -0
  91. package/plugin/fonts/inter/inter-latin-500-normal.woff +0 -0
  92. package/plugin/fonts/inter/inter-latin-600-normal.woff +0 -0
  93. package/plugin/fonts/inter/inter-latin-700-normal.woff +0 -0
  94. package/plugin/fonts/inter/inter-latin-800-normal.woff +0 -0
  95. package/plugin/fonts/inter/inter-latin-ext-400-normal.woff +0 -0
  96. package/plugin/fonts/inter/inter-latin-ext-500-normal.woff +0 -0
  97. package/plugin/fonts/inter/inter-latin-ext-600-normal.woff +0 -0
  98. package/plugin/fonts/inter/inter-latin-ext-700-normal.woff +0 -0
  99. package/plugin/fonts/inter/inter-latin-ext-800-normal.woff +0 -0
  100. package/plugin/fonts/jetbrains-mono/OFL.txt +93 -0
  101. package/plugin/fonts/jetbrains-mono/jetbrains-mono-latin-400-normal.woff +0 -0
  102. package/plugin/fonts/jetbrains-mono/jetbrains-mono-latin-500-normal.woff +0 -0
  103. package/plugin/fonts/jetbrains-mono/jetbrains-mono-latin-600-normal.woff +0 -0
  104. package/plugin/fonts/jetbrains-mono/jetbrains-mono-latin-700-normal.woff +0 -0
  105. package/plugin/fonts/jetbrains-mono/jetbrains-mono-latin-800-normal.woff +0 -0
  106. package/plugin/fonts/jetbrains-mono/jetbrains-mono-latin-ext-400-normal.woff +0 -0
  107. package/plugin/fonts/jetbrains-mono/jetbrains-mono-latin-ext-500-normal.woff +0 -0
  108. package/plugin/fonts/jetbrains-mono/jetbrains-mono-latin-ext-600-normal.woff +0 -0
  109. package/plugin/fonts/jetbrains-mono/jetbrains-mono-latin-ext-700-normal.woff +0 -0
  110. package/plugin/fonts/jetbrains-mono/jetbrains-mono-latin-ext-800-normal.woff +0 -0
  111. package/plugin/fonts/manrope/OFL.txt +93 -0
  112. package/plugin/fonts/manrope/manrope-latin-400-normal.woff +0 -0
  113. package/plugin/fonts/manrope/manrope-latin-500-normal.woff +0 -0
  114. package/plugin/fonts/manrope/manrope-latin-600-normal.woff +0 -0
  115. package/plugin/fonts/manrope/manrope-latin-700-normal.woff +0 -0
  116. package/plugin/fonts/manrope/manrope-latin-800-normal.woff +0 -0
  117. package/plugin/fonts/manrope/manrope-latin-ext-400-normal.woff +0 -0
  118. package/plugin/fonts/manrope/manrope-latin-ext-500-normal.woff +0 -0
  119. package/plugin/fonts/manrope/manrope-latin-ext-600-normal.woff +0 -0
  120. package/plugin/fonts/manrope/manrope-latin-ext-700-normal.woff +0 -0
  121. package/plugin/fonts/manrope/manrope-latin-ext-800-normal.woff +0 -0
  122. package/plugin/fonts/outfit/OFL.txt +93 -0
  123. package/plugin/fonts/outfit/outfit-latin-400-normal.woff +0 -0
  124. package/plugin/fonts/outfit/outfit-latin-500-normal.woff +0 -0
  125. package/plugin/fonts/outfit/outfit-latin-600-normal.woff +0 -0
  126. package/plugin/fonts/outfit/outfit-latin-700-normal.woff +0 -0
  127. package/plugin/fonts/outfit/outfit-latin-800-normal.woff +0 -0
  128. package/plugin/fonts/outfit/outfit-latin-ext-400-normal.woff +0 -0
  129. package/plugin/fonts/outfit/outfit-latin-ext-500-normal.woff +0 -0
  130. package/plugin/fonts/outfit/outfit-latin-ext-600-normal.woff +0 -0
  131. package/plugin/fonts/outfit/outfit-latin-ext-700-normal.woff +0 -0
  132. package/plugin/fonts/outfit/outfit-latin-ext-800-normal.woff +0 -0
  133. package/plugin/fonts/plus-jakarta-sans/OFL.txt +93 -0
  134. package/plugin/fonts/plus-jakarta-sans/plus-jakarta-sans-latin-400-normal.woff +0 -0
  135. package/plugin/fonts/plus-jakarta-sans/plus-jakarta-sans-latin-500-normal.woff +0 -0
  136. package/plugin/fonts/plus-jakarta-sans/plus-jakarta-sans-latin-600-normal.woff +0 -0
  137. package/plugin/fonts/plus-jakarta-sans/plus-jakarta-sans-latin-700-normal.woff +0 -0
  138. package/plugin/fonts/plus-jakarta-sans/plus-jakarta-sans-latin-800-normal.woff +0 -0
  139. package/plugin/fonts/plus-jakarta-sans/plus-jakarta-sans-latin-ext-400-normal.woff +0 -0
  140. package/plugin/fonts/plus-jakarta-sans/plus-jakarta-sans-latin-ext-500-normal.woff +0 -0
  141. package/plugin/fonts/plus-jakarta-sans/plus-jakarta-sans-latin-ext-600-normal.woff +0 -0
  142. package/plugin/fonts/plus-jakarta-sans/plus-jakarta-sans-latin-ext-700-normal.woff +0 -0
  143. package/plugin/fonts/plus-jakarta-sans/plus-jakarta-sans-latin-ext-800-normal.woff +0 -0
  144. package/plugin/fonts/sora/OFL.txt +93 -0
  145. package/plugin/fonts/sora/sora-latin-400-normal.woff +0 -0
  146. package/plugin/fonts/sora/sora-latin-500-normal.woff +0 -0
  147. package/plugin/fonts/sora/sora-latin-600-normal.woff +0 -0
  148. package/plugin/fonts/sora/sora-latin-700-normal.woff +0 -0
  149. package/plugin/fonts/sora/sora-latin-800-normal.woff +0 -0
  150. package/plugin/fonts/sora/sora-latin-ext-400-normal.woff +0 -0
  151. package/plugin/fonts/sora/sora-latin-ext-500-normal.woff +0 -0
  152. package/plugin/fonts/sora/sora-latin-ext-600-normal.woff +0 -0
  153. package/plugin/fonts/sora/sora-latin-ext-700-normal.woff +0 -0
  154. package/plugin/fonts/sora/sora-latin-ext-800-normal.woff +0 -0
  155. package/plugin/fonts/space-grotesk/OFL.txt +93 -0
  156. package/plugin/fonts/space-grotesk/space-grotesk-latin-400-normal.woff +0 -0
  157. package/plugin/fonts/space-grotesk/space-grotesk-latin-500-normal.woff +0 -0
  158. package/plugin/fonts/space-grotesk/space-grotesk-latin-600-normal.woff +0 -0
  159. package/plugin/fonts/space-grotesk/space-grotesk-latin-700-normal.woff +0 -0
  160. package/plugin/fonts/space-grotesk/space-grotesk-latin-ext-400-normal.woff +0 -0
  161. package/plugin/fonts/space-grotesk/space-grotesk-latin-ext-500-normal.woff +0 -0
  162. package/plugin/fonts/space-grotesk/space-grotesk-latin-ext-600-normal.woff +0 -0
  163. package/plugin/fonts/space-grotesk/space-grotesk-latin-ext-700-normal.woff +0 -0
  164. package/plugin/skills/audit/SKILL.md +22 -0
  165. package/plugin/skills/concepts/SKILL.md +35 -0
  166. package/plugin/skills/design/SKILL.md +126 -0
  167. package/plugin/skills/design/references/cli.md +95 -0
  168. package/plugin/skills/design/references/construction.md +221 -0
  169. package/plugin/skills/design/references/design-principles.md +133 -0
  170. package/plugin/skills/design/references/originality.md +44 -0
  171. package/plugin/skills/design/references/research-playbook.md +95 -0
  172. package/plugin/skills/design/references/svg-authoring.md +50 -0
  173. package/plugin/skills/design/references/workflow.md +79 -0
  174. package/plugin/skills/export/SKILL.md +36 -0
  175. package/plugin/skills/gallery/SKILL.md +29 -0
  176. package/plugin/skills/markilo/SKILL.md +12 -0
  177. package/plugin/skills/originality/SKILL.md +25 -0
  178. package/plugin/skills/refine/SKILL.md +25 -0
  179. package/plugin/skills/research/SKILL.md +28 -0
@@ -0,0 +1,282 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <title>Eval report — markilo v0.1.0</title>
7
+ </head>
8
+ <body>
9
+ <style>
10
+ :root{--plane:#f9f9f7;--surface:#fcfcfb;--ink:#0b0b0b;--ink-2:#52514e;--ink-3:#6b6a64;--hairline:rgba(11,11,11,.10);--grid:#e1e0d9;--inset:rgba(11,11,11,.04);--accent:#2a78d6;--base-fill:#6b6a64;--delta-good:#006300;--good:#067d06;--warning:#8a6100;--critical:#d03b3b;
11
+ color-scheme:light dark;
12
+ }
13
+ @media (prefers-color-scheme:dark){:root{--plane:#0d0d0d;--surface:#1a1a19;--ink:#ffffff;--ink-2:#c3c2b7;--ink-3:#898781;--hairline:rgba(255,255,255,.10);--grid:#2c2c2a;--inset:rgba(255,255,255,.05);--accent:#3987e5;--base-fill:#898781;--delta-good:#0ca30c;--good:#0ca30c;--warning:#fab219;--critical:#e06c6c;color-scheme:dark}}
14
+ :root[data-theme="dark"]{--plane:#0d0d0d;--surface:#1a1a19;--ink:#ffffff;--ink-2:#c3c2b7;--ink-3:#898781;--hairline:rgba(255,255,255,.10);--grid:#2c2c2a;--inset:rgba(255,255,255,.05);--accent:#3987e5;--base-fill:#898781;--delta-good:#0ca30c;--good:#0ca30c;--warning:#fab219;--critical:#e06c6c;color-scheme:dark}
15
+ :root[data-theme="light"]{--plane:#f9f9f7;--surface:#fcfcfb;--ink:#0b0b0b;--ink-2:#52514e;--ink-3:#6b6a64;--hairline:rgba(11,11,11,.10);--grid:#e1e0d9;--inset:rgba(11,11,11,.04);--accent:#2a78d6;--base-fill:#6b6a64;--delta-good:#006300;--good:#067d06;--warning:#8a6100;--critical:#d03b3b;color-scheme:light}
16
+ *{box-sizing:border-box}
17
+ body{margin:0;background:var(--plane);color:var(--ink);
18
+ font:14px/1.55 system-ui,-apple-system,"Segoe UI",sans-serif;
19
+ -webkit-text-size-adjust:100%}
20
+ .wrap{max-width:880px;margin:0 auto;padding:40px 24px 64px;display:flex;flex-direction:column;gap:20px}
21
+ .eyebrow{font-size:11px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-3)}
22
+ header h1{margin:2px 0 0;font-size:24px;font-weight:600;line-height:1.25;text-wrap:balance}
23
+ .meta{display:flex;flex-wrap:wrap;gap:6px 14px;margin-top:8px;color:var(--ink-2);font-size:13px}
24
+ .meta .num{font-variant-numeric:tabular-nums lining-nums}
25
+ .banner{display:flex;align-items:center;gap:8px;padding:10px 14px;border-radius:8px;
26
+ border:1px solid var(--hairline);background:var(--surface);font-size:13px}
27
+ .banner .chip-warn{color:var(--warning);font-weight:600}
28
+ .tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px}
29
+ .tile{background:var(--surface);border:1px solid var(--hairline);border-radius:10px;padding:14px 16px;
30
+ display:flex;flex-direction:column;gap:4px}
31
+ .tile .label{font-size:11px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3)}
32
+ .tile .value{font-size:26px;font-weight:600;font-variant-numeric:tabular-nums lining-nums;line-height:1.1}
33
+ .tile.hero .value{font-family:Georgia,"Times New Roman",serif;font-weight:400;font-size:48px}
34
+ .tile .sub{font-size:12px;color:var(--ink-2);font-variant-numeric:tabular-nums}
35
+ .tile .value.delta-pos{color:var(--delta-good)}
36
+ .tile .value.delta-neg{color:var(--critical)}
37
+ .toolbar{display:flex;gap:8px;justify-content:flex-end}
38
+ .toolbar button{font:12px system-ui,-apple-system,"Segoe UI",sans-serif;color:var(--ink-2);
39
+ background:var(--surface);border:1px solid var(--hairline);border-radius:6px;padding:4px 10px;cursor:pointer}
40
+ .toolbar button:hover{color:var(--ink)}
41
+ .toolbar button:focus-visible{outline:2px solid var(--accent);outline-offset:1px}
42
+ .case{background:var(--surface);border:1px solid var(--hairline);border-radius:10px;padding:18px 20px;
43
+ display:flex;flex-direction:column;gap:10px}
44
+ .case-regressed{border-left:3px solid var(--critical)}
45
+ .verdict{margin:6px 0 0;font-size:15px}
46
+ .verdict .delta{font-size:15px}
47
+ .flag{font-size:11px;font-weight:600;color:var(--warning);white-space:nowrap}
48
+ .star{color:var(--warning);font-size:.45em;vertical-align:super;line-height:0;cursor:help}
49
+ .legend summary{cursor:pointer;font-size:12px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--ink-2)}
50
+ .legend-list{margin:8px 0 0;padding-left:20px;display:flex;flex-direction:column;gap:5px;font-size:13px;color:var(--ink-2)}
51
+ .case-head{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}
52
+ .case-head h2{margin:0;font-size:16px;font-weight:600}
53
+ .case-head .spacer{flex:1}
54
+ .case-score{font-size:15px;font-weight:600}
55
+ .mono{font:12px "SF Mono",ui-monospace,Menlo,Consolas,monospace}
56
+ .num{font-variant-numeric:tabular-nums lining-nums}
57
+ .muted{color:var(--ink-3);font-size:12px}
58
+ .meter{display:inline-block;position:relative;width:120px;height:6px;border-radius:4px;background:var(--grid);
59
+ vertical-align:middle}
60
+ .meter>span{display:block;height:100%;border-radius:4px;max-width:100%}
61
+ .meter .tick{position:absolute;top:-2px;bottom:-2px;width:2px;background:var(--ink-3);border-radius:1px}
62
+ .m-accent>span{background:var(--accent)}
63
+ .m-base>span{background:var(--base-fill)}
64
+ .delta{font-size:12px;font-weight:600;font-variant-numeric:tabular-nums}
65
+ .delta-pos{color:var(--delta-good)}
66
+ .delta-neg{color:var(--critical)}
67
+ .delta-zero{color:var(--ink-3)}
68
+ details.section{border-top:1px solid var(--grid);padding-top:10px}
69
+ details.section>summary{cursor:pointer;font-size:12px;font-weight:600;letter-spacing:.04em;
70
+ text-transform:uppercase;color:var(--ink-2);list-style-position:outside;margin-left:2px}
71
+ details.section>summary:hover{color:var(--ink)}
72
+ details.section[open]>summary{margin-bottom:8px}
73
+ .md{display:flex;flex-direction:column;gap:8px;background:var(--inset);border-radius:8px;
74
+ padding:12px 14px;overflow-wrap:break-word}
75
+ .md>:first-child{margin-top:0}
76
+ .md h1,.md h2,.md h3,.md h4,.md h5,.md h6{margin:4px 0 0;font-size:1em;font-weight:600;line-height:1.3}
77
+ .md p,.md ul,.md ol,.md blockquote,.md table,.md pre,.md hr{margin:0}
78
+ .md ul,.md ol{display:flex;flex-direction:column;gap:4px;padding-left:20px}
79
+ .md blockquote{border-left:2px solid var(--hairline);padding-left:10px;color:var(--ink-2)}
80
+ .md :not(pre)>code{background:var(--inset);padding:1px 4px;border-radius:4px;
81
+ font:.92em "SF Mono",ui-monospace,Menlo,Consolas,monospace}
82
+ .md pre{background:var(--inset);border:1px solid var(--hairline);padding:10px 12px;border-radius:6px;
83
+ overflow-x:auto;font:12px/1.5 "SF Mono",ui-monospace,Menlo,Consolas,monospace}
84
+ .md pre code{background:none;padding:0;font:inherit}
85
+ .md table{width:100%;border-collapse:collapse}
86
+ .md th,.md td{padding:5px 8px;text-align:left;vertical-align:top;border-bottom:1px solid var(--grid)}
87
+ .md th{font-weight:600;color:var(--ink-2)}
88
+ .md a{color:var(--accent);text-decoration:none}
89
+ .md a:hover{text-decoration:underline}
90
+ .grader-def{display:flex;flex-direction:column;gap:6px;padding:8px 0}
91
+ .grader-def+.grader-def{border-top:1px solid var(--grid)}
92
+ .grader-def-head{display:flex;align-items:baseline;gap:8px}
93
+ .grader-name{font:13px "SF Mono",ui-monospace,Menlo,Consolas,monospace;font-weight:600}
94
+ .badge{font-size:10px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--ink-2);
95
+ border:1px solid var(--hairline);border-radius:999px;padding:1px 8px}
96
+ .config{display:flex;flex-direction:column;gap:2px;background:var(--inset);border-radius:8px;padding:10px 14px}
97
+ .config code{font:12px "SF Mono",ui-monospace,Menlo,Consolas,monospace;overflow-wrap:anywhere}
98
+ .arm{display:flex;flex-direction:column;gap:8px;padding:6px 0}
99
+ .arm+.arm{border-top:1px dashed var(--grid);margin-top:4px;padding-top:12px}
100
+ .arm-head{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}
101
+ .arm-label{font-size:13px;font-weight:600}
102
+ .run{border:1px solid var(--grid);border-radius:8px;padding:10px 12px;display:flex;flex-direction:column;gap:8px}
103
+ .run-head{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}
104
+ .run-title{font-size:12px;font-weight:600;color:var(--ink-2)}
105
+ .run-error .explanation{color:var(--ink-2)}
106
+ .note{font-size:12px;color:var(--ink-2)}
107
+ .graders{display:flex;flex-direction:column;gap:4px}
108
+ details.grader{border-radius:6px}
109
+ details.grader>summary{cursor:pointer;display:flex;align-items:baseline;gap:8px;padding:3px 4px;
110
+ border-radius:6px;list-style:none}
111
+ details.grader>summary::-webkit-details-marker{display:none}
112
+ details.grader>summary::before{content:'▸';font-size:10px;color:var(--ink-3);flex:none;
113
+ transition:transform .12s ease}
114
+ details.grader[open]>summary::before{transform:rotate(90deg)}
115
+ details.grader>summary:hover{background:var(--inset)}
116
+ details.grader>summary:focus-visible{outline:2px solid var(--accent);outline-offset:1px}
117
+ .grader-body{padding:6px 8px 8px 24px;display:flex;flex-direction:column;gap:6px}
118
+ .chip{font-size:11px;font-weight:600;border-radius:999px;padding:1px 8px;white-space:nowrap}
119
+ .chip-pass{color:var(--good);border:1px solid currentColor}
120
+ .chip-fail{color:var(--critical);border:1px solid currentColor}
121
+ .chip.chip-warn{color:var(--warning);border:1px solid currentColor}
122
+ .explanation{margin:0;font-size:13px;color:var(--ink-2);white-space:pre-wrap;overflow-wrap:break-word}
123
+ .kv{display:flex;gap:8px;font-size:12px;color:var(--ink-3)}
124
+ .votes{font-variant-numeric:tabular-nums;letter-spacing:.1em}
125
+ pre.evidence{margin:0;background:var(--inset);border:1px solid var(--hairline);border-radius:6px;
126
+ padding:8px 10px;overflow-x:auto;max-height:320px;
127
+ font:12px/1.5 "SF Mono",ui-monospace,Menlo,Consolas,monospace;white-space:pre-wrap;overflow-wrap:break-word}
128
+ footer{color:var(--ink-3);font-size:12px;text-align:center;padding-top:8px}
129
+ @media (prefers-reduced-motion:no-preference){
130
+ details.grader>summary,.toolbar button{transition:background .12s ease,color .12s ease}
131
+ }
132
+ @media (prefers-reduced-motion:reduce){
133
+ details.grader>summary::before{transition:none}
134
+ }
135
+ @media print{
136
+ :root,:root[data-theme="dark"],:root[data-theme="light"]{--plane:#f9f9f7;--surface:#fcfcfb;--ink:#0b0b0b;--ink-2:#52514e;--ink-3:#6b6a64;--hairline:rgba(11,11,11,.10);--grid:#e1e0d9;--inset:rgba(11,11,11,.04);--accent:#2a78d6;--base-fill:#6b6a64;--delta-good:#006300;--good:#067d06;--warning:#8a6100;--critical:#d03b3b;color-scheme:light}
137
+ body{background:#fff}
138
+ .toolbar{display:none}
139
+ .case,.run,.grader-def{break-inside:avoid}
140
+ pre.evidence{max-height:none}
141
+ }
142
+ </style>
143
+ <div class="wrap">
144
+ <header>
145
+ <div class="eyebrow">Plugin eval report</div>
146
+ <h1>markilo v0.1.0</h1>
147
+
148
+ <div class="meta">
149
+ <span class="mono">.</span>
150
+ <span>Claude Code v2.1.308</span>
151
+ <span class="num">2026-10-30 00:31 UTC</span>
152
+ <span class="num">36s</span>
153
+ <span class="num">$0.10</span>
154
+ <span class="num">1 runs</span>
155
+
156
+
157
+ <span>model sonnet</span>
158
+ <span>judge default</span>
159
+ <span class="num">threshold 100%</span>
160
+ <span>filtered: --case wordmark-outlined</span>
161
+ </div>
162
+ </header>
163
+
164
+ <section class="tiles">
165
+ <div class="tile hero"><span class="label">Suite score</span><span class="value">66.7%</span><span class="sub">mean of per-case scores</span></div>
166
+
167
+ <div class="tile"><span class="label">Cases</span><span class="value num">1</span><span class="sub">0 of 1 ≥ 100% threshold</span></div>
168
+ <div class="tile"><span class="label">Perfect runs</span><span class="value num">0%</span><span class="sub">runs where every grader passed</span></div>
169
+ </section>
170
+ <details class="section legend">
171
+ <summary>How to read this report</summary>
172
+ <ul class="legend-list">
173
+ <li>A run's score is the weighted fraction of its graders that passed; a "perfect" run passed every grader.</li>
174
+ <li>A case's score is the mean of its runs; a case passes when its score is at or above the 100% threshold (the tick on each case bar).</li>
175
+ <li>The suite score is the mean of the per-case scores.</li>
176
+ <li>Judge votes are independent samples of the LLM judge; the majority decides pass or fail.</li>
177
+ <li><strong>No baseline arm was run</strong> (ablation off) — this report shows absolute scores only and cannot say whether the plugin caused them. Re-run with <code>--ablation with-without</code> to measure the plugin’s effect.</li>
178
+
179
+ </ul>
180
+ </details>
181
+ <div class="toolbar"><button type="button" data-act="expand">Expand all</button><button type="button" data-act="collapse">Collapse all</button></div>
182
+ <article class="case" id="case-1">
183
+ <div class="case-head">
184
+ <h2>wordmark-outlined</h2>
185
+ <span class="muted mono">evals/wordmark-outlined</span>
186
+ <span class="spacer"></span>
187
+
188
+
189
+
190
+ <span class="meter m-accent" aria-hidden="true"><span style="width:66.7%"></span><i class="tick" style="left:100.0%"></i></span>
191
+ <span class="num case-score">66.7%</span>
192
+ </div>
193
+
194
+ <details class="section" open>
195
+ <summary>Results</summary>
196
+ <section class="arm">
197
+ <div class="arm-head">
198
+ <span class="arm-label">Runs</span>
199
+ <span class="meter m-accent" aria-hidden="true"><span style="width:66.7%"></span></span>
200
+ <span class="num">66.7%</span>
201
+ <span class="muted num">0% of runs perfect</span>
202
+ </div>
203
+ <div class="run">
204
+ <div class="run-head">
205
+ <span class="run-title">Run 1</span>
206
+ <span class="meter m-accent" aria-hidden="true"><span style="width:66.7%"></span></span>
207
+ <span class="num">66.7%</span>
208
+ <span class="muted num">8 turns · $0.10 · 00:31:33 UTC</span>
209
+ </div>
210
+
211
+ <div class="graders"><details class="grader">
212
+ <summary><span class="chip chip-pass">✓ pass</span> <span class="grader-name">no-network</span> </summary>
213
+ <div class="grader-body">
214
+ <p class="explanation">Bash called 0x (expected 0..0)</p>
215
+
216
+ </div>
217
+ </details>
218
+ <details class="grader" open>
219
+ <summary><span class="chip chip-fail">✗ fail</span> <span class="grader-name">used-wordmark</span> </summary>
220
+ <div class="grader-body">
221
+ <p class="explanation">Bash called 0x (expected 1..∞)</p>
222
+
223
+ </div>
224
+ </details>
225
+ <details class="grader">
226
+ <summary><span class="chip chip-pass">✓ pass</span> <span class="grader-name">workspace</span> </summary>
227
+ <div class="grader-body">
228
+ <p class="explanation">**/markilo.json exists as expected</p>
229
+
230
+ </div>
231
+ </details></div>
232
+ </div>
233
+ </section>
234
+ </details>
235
+ <details class="section" open>
236
+ <summary>Prompt</summary>
237
+ <div class="md"><p>/markilo:design Set up a Markilo workspace here for a fictional brand called "Velora" (a travel journal app). For now I only need a wordmark: lowercase, Sora 600, slightly tight tracking, ink color #1b1f2a. Save it in the workspace and tell me where it is. Do not design a symbol yet and do not research anything online.</p>
238
+ </div>
239
+ </details>
240
+ <details class="section" open>
241
+ <summary>Graders — what "good" means for this case</summary>
242
+ <div class="grader-def">
243
+ <div class="grader-def-head"><span class="grader-name">no-network</span><span class="badge">tool_used</span></div>
244
+ <div class="config"><div class="kv"><span>tool</span><code>&quot;Bash&quot;</code></div><div class="kv"><span>input_match</span><code>&quot;allow-network&quot;</code></div><div class="kv"><span>min</span><code>0</code></div><div class="kv"><span>max</span><code>0</code></div><div class="kv"><span>arm</span><code>&quot;both&quot;</code></div></div>
245
+ </div>
246
+ <div class="grader-def">
247
+ <div class="grader-def-head"><span class="grader-name">used-wordmark</span><span class="badge">tool_used</span></div>
248
+ <div class="config"><div class="kv"><span>tool</span><code>&quot;Bash&quot;</code></div><div class="kv"><span>input_match</span><code>&quot;markilo\\.mjs._wordmark._--font\\s+sora&quot;</code></div><div class="kv"><span>arm</span><code>&quot;both&quot;</code></div></div>
249
+ </div>
250
+ <div class="grader-def">
251
+ <div class="grader-def-head"><span class="grader-name">workspace</span><span class="badge">file_exists</span></div>
252
+ <div class="config"><div class="kv"><span>path</span><code>&quot;**/markilo.json&quot;</code></div><div class="kv"><span>exists</span><code>true</code></div></div>
253
+ </div>
254
+ </details>
255
+ </article>
256
+ <footer>Generated by <code>claude plugin eval</code> · schema v1 · scores are not comparable across different suites</footer>
257
+ </div>
258
+ <script>
259
+ document.addEventListener('DOMContentLoaded',function(){
260
+ var bar=document.querySelector('.toolbar');
261
+ if(!bar)return;
262
+ bar.addEventListener('click',function(e){
263
+ var b=e.target&&e.target.closest('button');
264
+ if(!b)return;
265
+ var open=b.dataset.act==='expand';
266
+ document.querySelectorAll('details.section, details.grader').forEach(function(d){d.open=open});
267
+ });
268
+ });
269
+ // Collapsed details vanish from print/PDF; these pages are share artifacts.
270
+ window.addEventListener('beforeprint',function(){
271
+ document.querySelectorAll('details').forEach(function(d){
272
+ if(!d.open){d.dataset.printOpened='1';d.open=true}
273
+ });
274
+ });
275
+ window.addEventListener('afterprint',function(){
276
+ document.querySelectorAll('details[data-print-opened]').forEach(function(d){
277
+ d.open=false;delete d.dataset.printOpened;
278
+ });
279
+ });
280
+ </script>
281
+ </body>
282
+ </html>
@@ -0,0 +1,155 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "claudeVersion": "2.1.308",
4
+ "startedAt": "2026-10-30T00:32:27.214Z",
5
+ "durationSeconds": 22,
6
+ "costUsd": 0.1029481,
7
+ "partial": false,
8
+ "suite": {
9
+ "root": "/Users/cihan/Developer/markilo/plugin",
10
+ "ablation": "none",
11
+ "modelOverride": "sonnet",
12
+ "caseFilter": "wordmark-outlined",
13
+ "threshold": 1,
14
+ "concurrency": 1,
15
+ "plugins": [
16
+ {
17
+ "name": "markilo",
18
+ "version": "0.1.0",
19
+ "path": "/Users/cihan/Developer/markilo/plugin"
20
+ }
21
+ ]
22
+ },
23
+ "cases": [
24
+ {
25
+ "name": "wordmark-outlined",
26
+ "dir": "evals/wordmark-outlined",
27
+ "source": "prose",
28
+ "promptMarkdown": "/markilo:design Set up a Markilo workspace here for a fictional brand called \"Velora\" (a travel journal app). For now I only need a wordmark: lowercase, Sora 600, slightly tight tracking, ink color #1b1f2a. Save it in the workspace and tell me where it is. Do not design a symbol yet and do not research anything online.",
29
+ "runsPerCase": 1,
30
+ "timeoutSeconds": 300,
31
+ "maxTurns": 14,
32
+ "graders": [
33
+ {
34
+ "name": "no-network",
35
+ "type": "tool_used",
36
+ "weight": 1,
37
+ "config": {
38
+ "tool": "Bash",
39
+ "input_match": "allow-network",
40
+ "min": 0,
41
+ "max": 0,
42
+ "arm": "both"
43
+ }
44
+ },
45
+ {
46
+ "name": "sora",
47
+ "type": "regex",
48
+ "weight": 1,
49
+ "config": {
50
+ "target": "trace",
51
+ "pattern": "Sora 600",
52
+ "flags": "",
53
+ "match": "contains"
54
+ }
55
+ },
56
+ {
57
+ "name": "svg-created",
58
+ "type": "file_exists",
59
+ "weight": 1,
60
+ "config": {
61
+ "path": "**/*.svg",
62
+ "exists": true
63
+ }
64
+ },
65
+ {
66
+ "name": "used-wordmark",
67
+ "type": "tool_used",
68
+ "weight": 1,
69
+ "config": {
70
+ "tool": "Bash",
71
+ "input_match": "markilo\\.mjs\\S*\\s+wordmark",
72
+ "arm": "both"
73
+ }
74
+ },
75
+ {
76
+ "name": "workspace",
77
+ "type": "file_exists",
78
+ "weight": 1,
79
+ "config": {
80
+ "path": "**/markilo.json",
81
+ "exists": true
82
+ }
83
+ }
84
+ ],
85
+ "arms": {
86
+ "with": [
87
+ {
88
+ "score": 1,
89
+ "passed": true,
90
+ "turns": 8,
91
+ "costUsd": 0.1029481,
92
+ "judgeCostUsd": 0,
93
+ "durationSeconds": 22,
94
+ "startedAt": "2026-10-30T00:32:27.287Z",
95
+ "error": null,
96
+ "tracePath": "/private/tmp/e-dcTHpe/out/trace.jsonl",
97
+ "skippedPaidGraders": false,
98
+ "graders": [
99
+ {
100
+ "name": "no-network",
101
+ "passed": true,
102
+ "weight": 1,
103
+ "explanation": "Bash called 0x (expected 0..0)",
104
+ "withOnly": false,
105
+ "scored": true
106
+ },
107
+ {
108
+ "name": "sora",
109
+ "passed": true,
110
+ "weight": 1,
111
+ "explanation": "matched Sora 600",
112
+ "withOnly": false,
113
+ "scored": true
114
+ },
115
+ {
116
+ "name": "svg-created",
117
+ "passed": true,
118
+ "weight": 1,
119
+ "explanation": "**/*.svg exists as expected",
120
+ "withOnly": false,
121
+ "scored": true
122
+ },
123
+ {
124
+ "name": "used-wordmark",
125
+ "passed": true,
126
+ "weight": 1,
127
+ "explanation": "Bash called 2x (expected 1..∞)",
128
+ "withOnly": false,
129
+ "scored": true
130
+ },
131
+ {
132
+ "name": "workspace",
133
+ "passed": true,
134
+ "weight": 1,
135
+ "explanation": "**/markilo.json exists as expected",
136
+ "withOnly": false,
137
+ "scored": true
138
+ }
139
+ ]
140
+ }
141
+ ]
142
+ },
143
+ "aggregates": {
144
+ "score": 1,
145
+ "passRate": 1
146
+ }
147
+ }
148
+ ],
149
+ "aggregates": {
150
+ "casesTotal": 1,
151
+ "casesPassed": 1,
152
+ "overallScore": 1,
153
+ "overallPassRate": 1
154
+ }
155
+ }