@r1z4x/tezgah 1.9.0 → 1.11.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 (429) hide show
  1. package/CHANGELOG.md +98 -1
  2. package/MANIFEST +382 -144
  3. package/README.de.md +1 -1
  4. package/README.es.md +1 -1
  5. package/README.fr.md +1 -1
  6. package/README.md +1 -1
  7. package/README.tr.md +1 -1
  8. package/bin/codegen +5 -2
  9. package/bin/tezgah-design +288 -1
  10. package/bin/tezgah-docs +1 -1
  11. package/bin/tezgah-doctor +39 -2
  12. package/bin/tezgah-import-ai-research +26 -12
  13. package/bin/tezgah-ocr-review +296 -0
  14. package/bin/tezgah-research +216 -40
  15. package/bin/tezgah-review-quote +185 -0
  16. package/bin/tezgah-setup +136 -33
  17. package/bin/tezgah-skill +1 -1
  18. package/bin/tezgah-status +201 -3
  19. package/bin/tezgah-task +203 -3
  20. package/commands/adhd.md +2 -2
  21. package/commands/ponytail.md +4 -4
  22. package/docs/architecture.md +2 -2
  23. package/docs/citations-baseline.json +2 -2
  24. package/docs/clarity-baseline.json +2 -2
  25. package/docs/contract.md +87 -42
  26. package/docs/environment.md +5 -3
  27. package/docs/evidence.md +28 -9
  28. package/docs/feature-audit.md +2 -2
  29. package/docs/gate.md +54 -31
  30. package/docs/glossary.md +5 -2
  31. package/docs/hosts.md +17 -3
  32. package/docs/index.json +34 -8
  33. package/docs/judge.md +4 -2
  34. package/docs/layers.md +3 -3
  35. package/docs/models.md +31 -9
  36. package/docs/operations.md +148 -8
  37. package/docs/research.md +786 -5
  38. package/docs/skills.md +137 -13
  39. package/docs/status-line.md +115 -1
  40. package/hooks/hooks.json +1 -1
  41. package/hooks/lang/en.json +10 -0
  42. package/hooks/lang/tr.json +11 -1
  43. package/hooks/tezgah_agents.py +38 -22
  44. package/hooks/tezgah_apps.py +18 -0
  45. package/hooks/tezgah_components.py +4 -0
  46. package/hooks/tezgah_context.py +189 -50
  47. package/hooks/tezgah_extension.py +337 -0
  48. package/hooks/tezgah_gate.py +188 -56
  49. package/hooks/tezgah_integrity.py +652 -105
  50. package/hooks/tezgah_judge.py +6 -4
  51. package/hooks/tezgah_models.py +59 -19
  52. package/hooks/tezgah_orca.py +1 -1
  53. package/hooks/tezgah_paths.py +102 -6
  54. package/hooks/tezgah_policy.py +94 -45
  55. package/hooks/tezgah_rank.py +9 -6
  56. package/hooks/tezgah_replay.py +4 -4
  57. package/hooks/tezgah_research.py +1260 -65
  58. package/hooks/tezgah_research_capture.py +1544 -0
  59. package/hooks/tezgah_research_evidence.py +842 -0
  60. package/hooks/tezgah_research_stats.py +258 -0
  61. package/hooks/tezgah_skill_pick.py +408 -106
  62. package/hooks/tezgah_stopspec.py +8 -1
  63. package/hooks/tezgah_task.py +12 -4
  64. package/hooks/tezgah_taste_ledger.py +1 -1
  65. package/hosts/cursor/hook.py +29 -2
  66. package/hosts/opencode/plugins/tezgah.js +307 -46
  67. package/hosts/opencode/tui/cli/tui.tsx +100 -0
  68. package/hosts/opencode/tui/tezgah-tui.tsx +2 -1
  69. package/output-styles/tezgah.md +10 -10
  70. package/package.json +1 -1
  71. package/packaging/install.ps1 +36 -3
  72. package/packaging/install.sh +13 -3
  73. package/packaging/upgrade.sh +61 -7
  74. package/skills/ai-research/SKILL.md +21 -14
  75. package/skills/ai-research/SOURCE +7 -5
  76. package/skills/ai-research/index/1-frame.md +6 -6
  77. package/skills/ai-research/index/2-data.md +9 -9
  78. package/skills/ai-research/index/3-train.md +36 -36
  79. package/skills/ai-research/index/4-measure.md +13 -13
  80. package/skills/ai-research/index/5-run.md +11 -11
  81. package/skills/ai-research/index/6-write.md +23 -23
  82. package/skills/ai-research/library.json +104 -104
  83. package/skills/analyze-app/SKILL.md +17 -12
  84. package/skills/design-contract/SKILL.md +42 -7
  85. package/skills/design-contract/data-views.md +2 -2
  86. package/skills/design-library/EVALS.md +1 -1
  87. package/skills/design-library/INDEX.md +39 -39
  88. package/skills/design-library/SKILL.md +19 -13
  89. package/skills/design-library/SOURCE +45 -43
  90. package/skills/feature-audit/SKILL.md +20 -14
  91. package/skills/hallmark/LICENSE +21 -0
  92. package/skills/hallmark/SKILL.md +154 -0
  93. package/skills/hallmark/SOURCE +207 -0
  94. package/skills/hallmark/agents/openai.yaml +13 -0
  95. package/skills/hallmark/references/anatomy.md +71 -0
  96. package/skills/hallmark/references/brand-truth.md +40 -0
  97. package/skills/hallmark/references/comp.md +104 -0
  98. package/skills/hallmark/references/craft.md +116 -0
  99. package/skills/hallmark/references/dark-mode.md +49 -0
  100. package/skills/hallmark/references/data-viz.md +48 -0
  101. package/skills/hallmark/references/design-md.md +53 -0
  102. package/skills/hallmark/references/direction.md +52 -0
  103. package/skills/hallmark/references/export-formats.md +80 -0
  104. package/skills/hallmark/references/flow.md +131 -0
  105. package/skills/hallmark/references/fonts.md +58 -0
  106. package/skills/hallmark/references/gates.md +243 -0
  107. package/skills/hallmark/references/genres/atmospheric.md +24 -0
  108. package/skills/hallmark/references/genres/editorial.md +24 -0
  109. package/skills/hallmark/references/genres/modern-minimal.md +24 -0
  110. package/skills/hallmark/references/genres/playful.md +24 -0
  111. package/skills/hallmark/references/imagery.md +99 -0
  112. package/skills/hallmark/references/interaction-and-states.md +89 -0
  113. package/skills/hallmark/references/layout.md +104 -0
  114. package/skills/hallmark/references/macrostructures/01-bento-grid.md +21 -0
  115. package/skills/hallmark/references/macrostructures/02-long-document.md +35 -0
  116. package/skills/hallmark/references/macrostructures/03-marquee-hero.md +21 -0
  117. package/skills/hallmark/references/macrostructures/04-stat-led.md +21 -0
  118. package/skills/hallmark/references/macrostructures/05-workbench.md +21 -0
  119. package/skills/hallmark/references/macrostructures/06-conversational-faq.md +28 -0
  120. package/skills/hallmark/references/macrostructures/07-manifesto.md +28 -0
  121. package/skills/hallmark/references/macrostructures/08-photographic.md +21 -0
  122. package/skills/hallmark/references/macrostructures/09-quote-led.md +21 -0
  123. package/skills/hallmark/references/macrostructures/10-specimen.md +21 -0
  124. package/skills/hallmark/references/macrostructures/11-catalogue.md +21 -0
  125. package/skills/hallmark/references/macrostructures/12-letter.md +21 -0
  126. package/skills/hallmark/references/macrostructures/13-index-first.md +21 -0
  127. package/skills/hallmark/references/macrostructures/14-narrative-workflow.md +21 -0
  128. package/skills/hallmark/references/macrostructures/15-split-studio.md +21 -0
  129. package/skills/hallmark/references/macrostructures/16-feature-stack.md +23 -0
  130. package/skills/hallmark/references/macrostructures/17-type-specimen.md +19 -0
  131. package/skills/hallmark/references/macrostructures/18-portfolio-grid.md +21 -0
  132. package/skills/hallmark/references/macrostructures/19-map-diagram.md +21 -0
  133. package/skills/hallmark/references/macrostructures/20-ecosystem-index.md +19 -0
  134. package/skills/hallmark/references/macrostructures/21-component-playground.md +21 -0
  135. package/skills/hallmark/references/macrostructures.md +119 -0
  136. package/skills/hallmark/references/microinteractions.md +80 -0
  137. package/skills/hallmark/references/patterns.md +202 -0
  138. package/skills/hallmark/references/redesign.md +88 -0
  139. package/skills/hallmark/references/responsive.md +46 -0
  140. package/skills/hallmark/references/review-finish.md +19 -0
  141. package/skills/hallmark/references/review-hero.md +20 -0
  142. package/skills/hallmark/references/scroll-choreography.md +110 -0
  143. package/skills/hallmark/references/texture.md +90 -0
  144. package/skills/hallmark/references/themes/README.md +58 -0
  145. package/skills/hallmark/references/themes/almanac.jpg +0 -0
  146. package/skills/hallmark/references/themes/almanac.md +103 -0
  147. package/skills/hallmark/references/themes/arcade.jpg +0 -0
  148. package/skills/hallmark/references/themes/arcade.md +102 -0
  149. package/skills/hallmark/references/themes/atelier.jpg +0 -0
  150. package/skills/hallmark/references/themes/atelier.md +98 -0
  151. package/skills/hallmark/references/themes/bloom.jpg +0 -0
  152. package/skills/hallmark/references/themes/bloom.md +102 -0
  153. package/skills/hallmark/references/themes/blueprint.jpg +0 -0
  154. package/skills/hallmark/references/themes/blueprint.md +103 -0
  155. package/skills/hallmark/references/themes/broadside.jpg +0 -0
  156. package/skills/hallmark/references/themes/broadside.md +108 -0
  157. package/skills/hallmark/references/themes/brutal.jpg +0 -0
  158. package/skills/hallmark/references/themes/brutal.md +95 -0
  159. package/skills/hallmark/references/themes/carnival.jpg +0 -0
  160. package/skills/hallmark/references/themes/carnival.md +104 -0
  161. package/skills/hallmark/references/themes/cobalt.jpg +0 -0
  162. package/skills/hallmark/references/themes/cobalt.md +101 -0
  163. package/skills/hallmark/references/themes/console.jpg +0 -0
  164. package/skills/hallmark/references/themes/console.md +99 -0
  165. package/skills/hallmark/references/themes/coral.jpg +0 -0
  166. package/skills/hallmark/references/themes/coral.md +102 -0
  167. package/skills/hallmark/references/themes/darkroom.jpg +0 -0
  168. package/skills/hallmark/references/themes/darkroom.md +99 -0
  169. package/skills/hallmark/references/themes/dose.jpg +0 -0
  170. package/skills/hallmark/references/themes/dose.md +98 -0
  171. package/skills/hallmark/references/themes/dusk.jpg +0 -0
  172. package/skills/hallmark/references/themes/dusk.md +105 -0
  173. package/skills/hallmark/references/themes/editorial.jpg +0 -0
  174. package/skills/hallmark/references/themes/editorial.md +97 -0
  175. package/skills/hallmark/references/themes/formwork.jpg +0 -0
  176. package/skills/hallmark/references/themes/formwork.md +107 -0
  177. package/skills/hallmark/references/themes/furrow.jpg +0 -0
  178. package/skills/hallmark/references/themes/furrow.md +98 -0
  179. package/skills/hallmark/references/themes/garden.jpg +0 -0
  180. package/skills/hallmark/references/themes/garden.md +97 -0
  181. package/skills/hallmark/references/themes/grid.jpg +0 -0
  182. package/skills/hallmark/references/themes/grid.md +101 -0
  183. package/skills/hallmark/references/themes/halftone.jpg +0 -0
  184. package/skills/hallmark/references/themes/halftone.md +106 -0
  185. package/skills/hallmark/references/themes/hedgerow.jpg +0 -0
  186. package/skills/hallmark/references/themes/hedgerow.md +104 -0
  187. package/skills/hallmark/references/themes/hum.jpg +0 -0
  188. package/skills/hallmark/references/themes/hum.md +99 -0
  189. package/skills/hallmark/references/themes/index.json +2191 -0
  190. package/skills/hallmark/references/themes/ink.jpg +0 -0
  191. package/skills/hallmark/references/themes/ink.md +106 -0
  192. package/skills/hallmark/references/themes/kiln.jpg +0 -0
  193. package/skills/hallmark/references/themes/kiln.md +108 -0
  194. package/skills/hallmark/references/themes/loom.jpg +0 -0
  195. package/skills/hallmark/references/themes/loom.md +106 -0
  196. package/skills/hallmark/references/themes/lumen.jpg +0 -0
  197. package/skills/hallmark/references/themes/lumen.md +103 -0
  198. package/skills/hallmark/references/themes/manifesto.jpg +0 -0
  199. package/skills/hallmark/references/themes/manifesto.md +101 -0
  200. package/skills/hallmark/references/themes/midnight.jpg +0 -0
  201. package/skills/hallmark/references/themes/midnight.md +97 -0
  202. package/skills/hallmark/references/themes/newsprint.jpg +0 -0
  203. package/skills/hallmark/references/themes/newsprint.md +102 -0
  204. package/skills/hallmark/references/themes/overprint.jpg +0 -0
  205. package/skills/hallmark/references/themes/overprint.md +101 -0
  206. package/skills/hallmark/references/themes/pasteup.jpg +0 -0
  207. package/skills/hallmark/references/themes/pasteup.md +100 -0
  208. package/skills/hallmark/references/themes/piste.jpg +0 -0
  209. package/skills/hallmark/references/themes/piste.md +99 -0
  210. package/skills/hallmark/references/themes/ribbon.jpg +0 -0
  211. package/skills/hallmark/references/themes/ribbon.md +106 -0
  212. package/skills/hallmark/references/themes/rim.jpg +0 -0
  213. package/skills/hallmark/references/themes/rim.md +96 -0
  214. package/skills/hallmark/references/themes/riso.jpg +0 -0
  215. package/skills/hallmark/references/themes/riso.md +98 -0
  216. package/skills/hallmark/references/themes/solstice.jpg +0 -0
  217. package/skills/hallmark/references/themes/solstice.md +104 -0
  218. package/skills/hallmark/references/themes/specimen.jpg +0 -0
  219. package/skills/hallmark/references/themes/specimen.md +100 -0
  220. package/skills/hallmark/references/themes/spore.jpg +0 -0
  221. package/skills/hallmark/references/themes/spore.md +104 -0
  222. package/skills/hallmark/references/themes/sport.jpg +0 -0
  223. package/skills/hallmark/references/themes/sport.md +101 -0
  224. package/skills/hallmark/references/themes/squeeze.jpg +0 -0
  225. package/skills/hallmark/references/themes/squeeze.md +99 -0
  226. package/skills/hallmark/references/themes/sticker.jpg +0 -0
  227. package/skills/hallmark/references/themes/sticker.md +106 -0
  228. package/skills/hallmark/references/themes/studio.jpg +0 -0
  229. package/skills/hallmark/references/themes/studio.md +99 -0
  230. package/skills/hallmark/references/themes/terminal.jpg +0 -0
  231. package/skills/hallmark/references/themes/terminal.md +96 -0
  232. package/skills/hallmark/references/themes/terrazzo.jpg +0 -0
  233. package/skills/hallmark/references/themes/terrazzo.md +106 -0
  234. package/skills/hallmark/references/themes/ultraviolet.jpg +0 -0
  235. package/skills/hallmark/references/themes/ultraviolet.md +106 -0
  236. package/skills/hallmark/references/themes/vellum.jpg +0 -0
  237. package/skills/hallmark/references/themes/vellum.md +105 -0
  238. package/skills/hallmark/references/themes/wayfind.jpg +0 -0
  239. package/skills/hallmark/references/themes/wayfind.md +105 -0
  240. package/skills/hallmark/references/themes/werkstatt.jpg +0 -0
  241. package/skills/hallmark/references/themes/werkstatt.md +105 -0
  242. package/skills/hallmark/scripts/capture.mjs +125 -0
  243. package/skills/hallmark/scripts/fixtures/exemplars/atmospheric.html +324 -0
  244. package/skills/hallmark/scripts/fixtures/exemplars/editorial.html +363 -0
  245. package/skills/hallmark/scripts/fixtures/exemplars/modern-minimal.html +527 -0
  246. package/skills/hallmark/scripts/fixtures/exemplars/playful.html +353 -0
  247. package/skills/hallmark/scripts/fixtures/eyebrow-fail/index.html +118 -0
  248. package/skills/hallmark/scripts/fixtures/eyebrow-pass/index.html +137 -0
  249. package/skills/hallmark/scripts/fixtures/kept/after.html +27 -0
  250. package/skills/hallmark/scripts/fixtures/kept/before.html +26 -0
  251. package/skills/hallmark/scripts/fixtures/slopped.html +145 -0
  252. package/skills/hallmark/scripts/fixtures/tailwind-fail/Feature.vue +14 -0
  253. package/skills/hallmark/scripts/fixtures/tailwind-fail/Hero.tsx +33 -0
  254. package/skills/hallmark/scripts/fixtures/tailwind-fail/index.html +74 -0
  255. package/skills/hallmark/scripts/fixtures/tailwind-fail/style.css +6 -0
  256. package/skills/hallmark/scripts/fixtures/tailwind-pass/Hero.tsx +33 -0
  257. package/skills/hallmark/scripts/fixtures/tailwind-pass/index.html +57 -0
  258. package/skills/hallmark/scripts/fixtures/tailwind-pass/style.css +15 -0
  259. package/skills/hallmark/scripts/fixtures/waiver/index.html +54 -0
  260. package/skills/hallmark/scripts/imagegen.mjs +85 -0
  261. package/skills/hallmark/scripts/install-hook.mjs +70 -0
  262. package/skills/hallmark/scripts/install.mjs +141 -0
  263. package/skills/hallmark/scripts/lint-hook.mjs +49 -0
  264. package/skills/hallmark/scripts/photos.json +1 -0
  265. package/skills/hallmark/scripts/picture.mjs +71 -0
  266. package/skills/hallmark/scripts/refcheck.mjs +352 -0
  267. package/skills/hallmark/scripts/sloplint-render.mjs +1252 -0
  268. package/skills/hallmark/scripts/sloplint.mjs +4422 -0
  269. package/skills/hallmark/scripts/theme.mjs +650 -0
  270. package/skills/harness/SKILL.md +15 -8
  271. package/skills/i-have-adhd/SKILL.md +22 -11
  272. package/skills/no-ai-slop/SKILL.md +15 -1
  273. package/skills/plan-add/SKILL.md +33 -26
  274. package/skills/plan-status/SKILL.md +13 -7
  275. package/skills/plan-sync/SKILL.md +18 -12
  276. package/skills/pm-frameworks/SKILL.md +19 -10
  277. package/skills/pm-frameworks/SOURCE +7 -5
  278. package/skills/ponytail/SKILL.md +19 -14
  279. package/skills/product-analysis/SKILL.md +22 -18
  280. package/skills/product-flow/SKILL.md +14 -9
  281. package/skills/research/SKILL.md +75 -39
  282. package/skills/rl-env/SKILL.md +25 -13
  283. package/skills/rl-env/SOURCE +8 -6
  284. package/skills/tezgah-contract/SKILL.md +47 -42
  285. package/bin/tezgah-skill.py +0 -59
  286. /package/skills/ai-research/0-autoresearch-skill/{SKILL.md → ENTRY.md} +0 -0
  287. /package/skills/ai-research/01-model-architecture/litgpt/{SKILL.md → ENTRY.md} +0 -0
  288. /package/skills/ai-research/01-model-architecture/mamba/{SKILL.md → ENTRY.md} +0 -0
  289. /package/skills/ai-research/01-model-architecture/nanogpt/{SKILL.md → ENTRY.md} +0 -0
  290. /package/skills/ai-research/01-model-architecture/rwkv/{SKILL.md → ENTRY.md} +0 -0
  291. /package/skills/ai-research/01-model-architecture/torchtitan/{SKILL.md → ENTRY.md} +0 -0
  292. /package/skills/ai-research/02-tokenization/huggingface-tokenizers/{SKILL.md → ENTRY.md} +0 -0
  293. /package/skills/ai-research/02-tokenization/sentencepiece/{SKILL.md → ENTRY.md} +0 -0
  294. /package/skills/ai-research/03-fine-tuning/axolotl/{SKILL.md → ENTRY.md} +0 -0
  295. /package/skills/ai-research/03-fine-tuning/llama-factory/{SKILL.md → ENTRY.md} +0 -0
  296. /package/skills/ai-research/03-fine-tuning/peft/{SKILL.md → ENTRY.md} +0 -0
  297. /package/skills/ai-research/03-fine-tuning/unsloth/{SKILL.md → ENTRY.md} +0 -0
  298. /package/skills/ai-research/04-mechanistic-interpretability/nnsight/{SKILL.md → ENTRY.md} +0 -0
  299. /package/skills/ai-research/04-mechanistic-interpretability/pyvene/{SKILL.md → ENTRY.md} +0 -0
  300. /package/skills/ai-research/04-mechanistic-interpretability/saelens/{SKILL.md → ENTRY.md} +0 -0
  301. /package/skills/ai-research/04-mechanistic-interpretability/transformer-lens/{SKILL.md → ENTRY.md} +0 -0
  302. /package/skills/ai-research/05-data-processing/nemo-curator/{SKILL.md → ENTRY.md} +0 -0
  303. /package/skills/ai-research/05-data-processing/ray-data/{SKILL.md → ENTRY.md} +0 -0
  304. /package/skills/ai-research/06-post-training/grpo-rl-training/{SKILL.md → ENTRY.md} +0 -0
  305. /package/skills/ai-research/06-post-training/miles/{SKILL.md → ENTRY.md} +0 -0
  306. /package/skills/ai-research/06-post-training/openrlhf/{SKILL.md → ENTRY.md} +0 -0
  307. /package/skills/ai-research/06-post-training/simpo/{SKILL.md → ENTRY.md} +0 -0
  308. /package/skills/ai-research/06-post-training/slime/{SKILL.md → ENTRY.md} +0 -0
  309. /package/skills/ai-research/06-post-training/torchforge/{SKILL.md → ENTRY.md} +0 -0
  310. /package/skills/ai-research/06-post-training/trl-fine-tuning/{SKILL.md → ENTRY.md} +0 -0
  311. /package/skills/ai-research/06-post-training/verl/{SKILL.md → ENTRY.md} +0 -0
  312. /package/skills/ai-research/07-safety-alignment/constitutional-ai/{SKILL.md → ENTRY.md} +0 -0
  313. /package/skills/ai-research/07-safety-alignment/llamaguard/{SKILL.md → ENTRY.md} +0 -0
  314. /package/skills/ai-research/07-safety-alignment/nemo-guardrails/{SKILL.md → ENTRY.md} +0 -0
  315. /package/skills/ai-research/07-safety-alignment/prompt-guard/{SKILL.md → ENTRY.md} +0 -0
  316. /package/skills/ai-research/08-distributed-training/accelerate/{SKILL.md → ENTRY.md} +0 -0
  317. /package/skills/ai-research/08-distributed-training/deepspeed/{SKILL.md → ENTRY.md} +0 -0
  318. /package/skills/ai-research/08-distributed-training/megatron-core/{SKILL.md → ENTRY.md} +0 -0
  319. /package/skills/ai-research/08-distributed-training/pytorch-fsdp2/{SKILL.md → ENTRY.md} +0 -0
  320. /package/skills/ai-research/08-distributed-training/pytorch-lightning/{SKILL.md → ENTRY.md} +0 -0
  321. /package/skills/ai-research/08-distributed-training/ray-train/{SKILL.md → ENTRY.md} +0 -0
  322. /package/skills/ai-research/09-infrastructure/lambda-labs/{SKILL.md → ENTRY.md} +0 -0
  323. /package/skills/ai-research/09-infrastructure/modal/{SKILL.md → ENTRY.md} +0 -0
  324. /package/skills/ai-research/09-infrastructure/skypilot/{SKILL.md → ENTRY.md} +0 -0
  325. /package/skills/ai-research/10-optimization/awq/{SKILL.md → ENTRY.md} +0 -0
  326. /package/skills/ai-research/10-optimization/bitsandbytes/{SKILL.md → ENTRY.md} +0 -0
  327. /package/skills/ai-research/10-optimization/flash-attention/{SKILL.md → ENTRY.md} +0 -0
  328. /package/skills/ai-research/10-optimization/gguf/{SKILL.md → ENTRY.md} +0 -0
  329. /package/skills/ai-research/10-optimization/gptq/{SKILL.md → ENTRY.md} +0 -0
  330. /package/skills/ai-research/10-optimization/hqq/{SKILL.md → ENTRY.md} +0 -0
  331. /package/skills/ai-research/10-optimization/ml-training-recipes/{SKILL.md → ENTRY.md} +0 -0
  332. /package/skills/ai-research/11-evaluation/bigcode-evaluation-harness/{SKILL.md → ENTRY.md} +0 -0
  333. /package/skills/ai-research/11-evaluation/lm-evaluation-harness/{SKILL.md → ENTRY.md} +0 -0
  334. /package/skills/ai-research/11-evaluation/nemo-evaluator/{SKILL.md → ENTRY.md} +0 -0
  335. /package/skills/ai-research/12-inference-serving/llama-cpp/{SKILL.md → ENTRY.md} +0 -0
  336. /package/skills/ai-research/12-inference-serving/sglang/{SKILL.md → ENTRY.md} +0 -0
  337. /package/skills/ai-research/12-inference-serving/tensorrt-llm/{SKILL.md → ENTRY.md} +0 -0
  338. /package/skills/ai-research/12-inference-serving/vllm/{SKILL.md → ENTRY.md} +0 -0
  339. /package/skills/ai-research/13-mlops/mlflow/{SKILL.md → ENTRY.md} +0 -0
  340. /package/skills/ai-research/13-mlops/swanlab/{SKILL.md → ENTRY.md} +0 -0
  341. /package/skills/ai-research/13-mlops/tensorboard/{SKILL.md → ENTRY.md} +0 -0
  342. /package/skills/ai-research/13-mlops/weights-and-biases/{SKILL.md → ENTRY.md} +0 -0
  343. /package/skills/ai-research/14-agents/a-evolve/{SKILL.md → ENTRY.md} +0 -0
  344. /package/skills/ai-research/14-agents/autogpt/{SKILL.md → ENTRY.md} +0 -0
  345. /package/skills/ai-research/14-agents/crewai/{SKILL.md → ENTRY.md} +0 -0
  346. /package/skills/ai-research/14-agents/langchain/{SKILL.md → ENTRY.md} +0 -0
  347. /package/skills/ai-research/14-agents/llamaindex/{SKILL.md → ENTRY.md} +0 -0
  348. /package/skills/ai-research/15-rag/chroma/{SKILL.md → ENTRY.md} +0 -0
  349. /package/skills/ai-research/15-rag/faiss/{SKILL.md → ENTRY.md} +0 -0
  350. /package/skills/ai-research/15-rag/pinecone/{SKILL.md → ENTRY.md} +0 -0
  351. /package/skills/ai-research/15-rag/qdrant/{SKILL.md → ENTRY.md} +0 -0
  352. /package/skills/ai-research/15-rag/sentence-transformers/{SKILL.md → ENTRY.md} +0 -0
  353. /package/skills/ai-research/16-prompt-engineering/dspy/{SKILL.md → ENTRY.md} +0 -0
  354. /package/skills/ai-research/16-prompt-engineering/guidance/{SKILL.md → ENTRY.md} +0 -0
  355. /package/skills/ai-research/16-prompt-engineering/instructor/{SKILL.md → ENTRY.md} +0 -0
  356. /package/skills/ai-research/16-prompt-engineering/outlines/{SKILL.md → ENTRY.md} +0 -0
  357. /package/skills/ai-research/17-observability/langsmith/{SKILL.md → ENTRY.md} +0 -0
  358. /package/skills/ai-research/17-observability/phoenix/{SKILL.md → ENTRY.md} +0 -0
  359. /package/skills/ai-research/18-multimodal/audiocraft/{SKILL.md → ENTRY.md} +0 -0
  360. /package/skills/ai-research/18-multimodal/blip-2/{SKILL.md → ENTRY.md} +0 -0
  361. /package/skills/ai-research/18-multimodal/clip/{SKILL.md → ENTRY.md} +0 -0
  362. /package/skills/ai-research/18-multimodal/cosmos-policy/{SKILL.md → ENTRY.md} +0 -0
  363. /package/skills/ai-research/18-multimodal/llava/{SKILL.md → ENTRY.md} +0 -0
  364. /package/skills/ai-research/18-multimodal/openpi/{SKILL.md → ENTRY.md} +0 -0
  365. /package/skills/ai-research/18-multimodal/openvla-oft/{SKILL.md → ENTRY.md} +0 -0
  366. /package/skills/ai-research/18-multimodal/segment-anything/{SKILL.md → ENTRY.md} +0 -0
  367. /package/skills/ai-research/18-multimodal/stable-diffusion/{SKILL.md → ENTRY.md} +0 -0
  368. /package/skills/ai-research/18-multimodal/whisper/{SKILL.md → ENTRY.md} +0 -0
  369. /package/skills/ai-research/19-emerging-techniques/knowledge-distillation/{SKILL.md → ENTRY.md} +0 -0
  370. /package/skills/ai-research/19-emerging-techniques/long-context/{SKILL.md → ENTRY.md} +0 -0
  371. /package/skills/ai-research/19-emerging-techniques/model-merging/{SKILL.md → ENTRY.md} +0 -0
  372. /package/skills/ai-research/19-emerging-techniques/model-pruning/{SKILL.md → ENTRY.md} +0 -0
  373. /package/skills/ai-research/19-emerging-techniques/moe-training/{SKILL.md → ENTRY.md} +0 -0
  374. /package/skills/ai-research/19-emerging-techniques/speculative-decoding/{SKILL.md → ENTRY.md} +0 -0
  375. /package/skills/ai-research/20-ml-paper-writing/academic-plotting/{SKILL.md → ENTRY.md} +0 -0
  376. /package/skills/ai-research/20-ml-paper-writing/ml-paper-writing/{SKILL.md → ENTRY.md} +0 -0
  377. /package/skills/ai-research/20-ml-paper-writing/presenting-conference-talks/{SKILL.md → ENTRY.md} +0 -0
  378. /package/skills/ai-research/20-ml-paper-writing/systems-paper-writing/{SKILL.md → ENTRY.md} +0 -0
  379. /package/skills/ai-research/21-research-ideation/brainstorming-research-ideas/{SKILL.md → ENTRY.md} +0 -0
  380. /package/skills/ai-research/21-research-ideation/creative-thinking-for-research/{SKILL.md → ENTRY.md} +0 -0
  381. /package/skills/ai-research/22-agent-native-research-artifact/compiler/{SKILL.md → ENTRY.md} +0 -0
  382. /package/skills/ai-research/22-agent-native-research-artifact/research-manager/{SKILL.md → ENTRY.md} +0 -0
  383. /package/skills/ai-research/22-agent-native-research-artifact/rigor-reviewer/{SKILL.md → ENTRY.md} +0 -0
  384. /package/skills/design-library/adaptive-interfaces/skills/colour-independence/{SKILL.md → ENTRY.md} +0 -0
  385. /package/skills/design-library/adaptive-interfaces/skills/flexible-typography/{SKILL.md → ENTRY.md} +0 -0
  386. /package/skills/design-library/adaptive-interfaces/skills/information-density/{SKILL.md → ENTRY.md} +0 -0
  387. /package/skills/design-library/adaptive-interfaces/skills/preference-audit/{SKILL.md → ENTRY.md} +0 -0
  388. /package/skills/design-library/adaptive-interfaces/skills/responsive-accessibility/{SKILL.md → ENTRY.md} +0 -0
  389. /package/skills/design-library/adaptive-interfaces/skills/responsive-review/{SKILL.md → ENTRY.md} +0 -0
  390. /package/skills/design-library/adaptive-interfaces/skills/simplified-views/{SKILL.md → ENTRY.md} +0 -0
  391. /package/skills/design-library/adaptive-interfaces/skills/specify/{SKILL.md → ENTRY.md} +0 -0
  392. /package/skills/design-library/adaptive-interfaces/skills/user-preference-respect/{SKILL.md → ENTRY.md} +0 -0
  393. /package/skills/design-library/cognitive-accessibility/skills/adaptive-personalisation/{SKILL.md → ENTRY.md} +0 -0
  394. /package/skills/design-library/cognitive-accessibility/skills/assess-load/{SKILL.md → ENTRY.md} +0 -0
  395. /package/skills/design-library/cognitive-accessibility/skills/cognitive-load-assessment/{SKILL.md → ENTRY.md} +0 -0
  396. /package/skills/design-library/cognitive-accessibility/skills/contextual-help-design/{SKILL.md → ENTRY.md} +0 -0
  397. /package/skills/design-library/cognitive-accessibility/skills/error-prevention-recovery/{SKILL.md → ENTRY.md} +0 -0
  398. /package/skills/design-library/cognitive-accessibility/skills/focus-attention-design/{SKILL.md → ENTRY.md} +0 -0
  399. /package/skills/design-library/cognitive-accessibility/skills/memory-load-reduction/{SKILL.md → ENTRY.md} +0 -0
  400. /package/skills/design-library/cognitive-accessibility/skills/plain-language-design/{SKILL.md → ENTRY.md} +0 -0
  401. /package/skills/design-library/cognitive-accessibility/skills/review/{SKILL.md → ENTRY.md} +0 -0
  402. /package/skills/design-library/cognitive-accessibility/skills/simplify/{SKILL.md → ENTRY.md} +0 -0
  403. /package/skills/design-library/cognitive-accessibility/skills/wayfinding-navigation/{SKILL.md → ENTRY.md} +0 -0
  404. /package/skills/design-library/design-research/skills/behavioural-analytics/{SKILL.md → ENTRY.md} +0 -0
  405. /package/skills/design-library/design-research/skills/qual-quant-triangulation/{SKILL.md → ENTRY.md} +0 -0
  406. /package/skills/design-library/inclusive-interaction/skills/audit/{SKILL.md → ENTRY.md} +0 -0
  407. /package/skills/design-library/inclusive-interaction/skills/design-flow/{SKILL.md → ENTRY.md} +0 -0
  408. /package/skills/design-library/inclusive-interaction/skills/feedback-and-status/{SKILL.md → ENTRY.md} +0 -0
  409. /package/skills/design-library/inclusive-interaction/skills/gesture-alternatives/{SKILL.md → ENTRY.md} +0 -0
  410. /package/skills/design-library/inclusive-interaction/skills/keyboard-navigation/{SKILL.md → ENTRY.md} +0 -0
  411. /package/skills/design-library/inclusive-interaction/skills/keyboard-review/{SKILL.md → ENTRY.md} +0 -0
  412. /package/skills/design-library/inclusive-interaction/skills/motion-sensitivity/{SKILL.md → ENTRY.md} +0 -0
  413. /package/skills/design-library/inclusive-interaction/skills/multi-modal-input/{SKILL.md → ENTRY.md} +0 -0
  414. /package/skills/design-library/inclusive-interaction/skills/touch-target-design/{SKILL.md → ENTRY.md} +0 -0
  415. /package/skills/design-library/inclusive-interaction/skills/voice-interaction/{SKILL.md → ENTRY.md} +0 -0
  416. /package/skills/design-library/visual-critique/skills/critique-affordance/{SKILL.md → ENTRY.md} +0 -0
  417. /package/skills/design-library/visual-critique/skills/critique-brand-consistency/{SKILL.md → ENTRY.md} +0 -0
  418. /package/skills/design-library/visual-critique/skills/critique-color/{SKILL.md → ENTRY.md} +0 -0
  419. /package/skills/design-library/visual-critique/skills/critique-composition/{SKILL.md → ENTRY.md} +0 -0
  420. /package/skills/design-library/visual-critique/skills/critique-information-density/{SKILL.md → ENTRY.md} +0 -0
  421. /package/skills/design-library/visual-critique/skills/critique-typography/{SKILL.md → ENTRY.md} +0 -0
  422. /package/skills/design-library/visual-critique/skills/critique-visual-hierarchy/{SKILL.md → ENTRY.md} +0 -0
  423. /package/skills/pm-frameworks/intended-vs-implemented/{SKILL.md → ENTRY.md} +0 -0
  424. /package/skills/pm-frameworks/opportunity-solution-tree/{SKILL.md → ENTRY.md} +0 -0
  425. /package/skills/rl-env/generate-nemo-gym-env/{SKILL.md → ENTRY.md} +0 -0
  426. /package/skills/rl-env/generate-openenv-env/{SKILL.md → ENTRY.md} +0 -0
  427. /package/skills/rl-env/generate-ors-env/{SKILL.md → ENTRY.md} +0 -0
  428. /package/skills/rl-env/generate-verifiers-env/{SKILL.md → ENTRY.md} +0 -0
  429. /package/skills/rl-env/rl-env-from-description/{SKILL.md → ENTRY.md} +0 -0
@@ -0,0 +1,26 @@
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>Kept fixture, the page before</title>
7
+ <meta name="description" content="The page a redesign starts from; after.html drops one of everything the record holds.">
8
+ <style>
9
+ body { font-family: sans-serif; }
10
+ </style>
11
+ </head>
12
+ <body>
13
+ <nav id="site-nav"><a href="#rates">Rates</a> <a href="rooms.html">Rooms</a> <a href="mailto:desk@example.com">Email the desk</a> <button id="nav-toggle" type="button">Menu</button></nav>
14
+ <h1>Rooms by the harbour</h1>
15
+ <h2 id="rates">Rates</h2>
16
+ <p>From $120 a night. Breakfast until 10:30.</p>
17
+ <form action="https://example.com/api/book" method="post">
18
+ <input name="email" type="email">
19
+ <input name="nights" type="number">
20
+ <button type="submit" onclick="track('book')" data-testid="book-button">Book</button>
21
+ </form>
22
+ <script>
23
+ document.getElementById('nav-toggle').addEventListener('click', function () { document.querySelector('#site-nav').classList.toggle('is-open'); });
24
+ </script>
25
+ </body>
26
+ </html>
@@ -0,0 +1,145 @@
1
+ <!doctype html>
2
+ <!--
3
+ slopped.html - deliberately bad fixture for sloplint self-test.
4
+ Intended trips:
5
+ 1 Poppins as display font
6
+ 2 gradient text headline (FAIL) + purple-to-blue gradient (WARN)
7
+ 4 card nested inside a card
8
+ 7 pure #ffffff paper and #000000 ink tokens
9
+ 10 transition: all
10
+ 14 keyframes animating width
11
+ 15 focus ring that transitions in
12
+ 19 "Jane Doe" placeholder testimonial
13
+ 20 no Hallmark stamp comment anywhere
14
+ 22 zero-chroma oklch neutral
15
+ 24 padding: 17px (off the 4px scale)
16
+ 26 no :active and no :disabled styling (WARNs; :focus-visible exists for 15)
17
+ 27 keyframes with no prefers-reduced-motion block
18
+ 30 emoji feature icon
19
+ 33 decorative svg without aria-hidden / aria-label
20
+ 34 overflow-x: hidden instead of clip (WARN)
21
+ 37 four font families (Poppins, Inter, JetBrains Mono, Playfair Display)
22
+ 38a italic h2
23
+ 46 "Trusted by 50,000+ teams" invented metric
24
+ 48 inline hex colour outside the token block
25
+ 50 bare 1fr grid track holding an img
26
+ 51 display header with a long unbroken word, no overflow-wrap
27
+ 54 an eyebrow before an h2 (the two-column head is incidental now)
28
+ 55 uppercase h2 at line-height 0.94
29
+ 56 two position:sticky top:0 elements
30
+ -->
31
+ <html lang="en">
32
+ <head>
33
+ <meta charset="utf-8">
34
+ <meta name="viewport" content="width=device-width, initial-scale=1">
35
+ <title>Nexus - Unleash Seamless Workflows</title>
36
+ <style>
37
+ :root {
38
+ --color-paper: #ffffff; /* gate 7: pure white base */
39
+ --color-ink: #000000; /* gate 7: pure black base */
40
+ --color-gray: oklch(55% 0 0); /* gate 22: zero chroma */
41
+ --font-display: 'Poppins', sans-serif; /* gate 1 */
42
+ --font-body: 'Inter', sans-serif;
43
+ --font-mono: 'JetBrains Mono', monospace;
44
+ --font-quote: 'Playfair Display', serif; /* gate 37: fourth family */
45
+ }
46
+ html { overflow-x: hidden; } /* gate 34: hidden, not clip */
47
+ body {
48
+ margin: 0;
49
+ background: var(--color-paper);
50
+ color: var(--color-ink);
51
+ font-family: var(--font-body);
52
+ }
53
+ .nav {
54
+ position: sticky; top: 0; /* gate 56: sticky #1 */
55
+ background: var(--color-paper);
56
+ padding: 17px; /* gate 24: off-scale */
57
+ }
58
+ .section-head {
59
+ position: sticky; top: 0; /* gate 56: sticky #2 */
60
+ background: var(--color-gray);
61
+ }
62
+ h1 {
63
+ font-family: var(--font-display);
64
+ background: linear-gradient(90deg, #8b5cf6, #3b82f6); /* gate 2 WARN + 48 */
65
+ -webkit-background-clip: text; /* gate 2 FAIL: gradient text */
66
+ background-clip: text;
67
+ color: transparent;
68
+ }
69
+ h2 {
70
+ font-family: var(--font-display);
71
+ font-style: italic; /* gate 38a */
72
+ text-transform: uppercase;
73
+ line-height: 0.94; /* gate 55 */
74
+ }
75
+ .quote { font-family: var(--font-quote); }
76
+ .mono-label { font-family: var(--font-mono); }
77
+ .card {
78
+ transition: all 0.3s ease; /* gate 10 */
79
+ border: 1px solid var(--color-gray);
80
+ }
81
+ .promo { color: #e91e63; } /* gate 48: inline hex outside tokens */
82
+ .cta:focus-visible {
83
+ outline: 2px solid var(--color-ink);
84
+ transition: outline 200ms ease; /* gate 15: focus ring fades in */
85
+ }
86
+ .features__head {
87
+ display: grid;
88
+ grid-template-columns: 1fr 2fr; /* the eyebrow itself is gate 54; see the markup */
89
+ }
90
+ .gallery {
91
+ display: grid;
92
+ grid-template-columns: 1fr 1fr; /* gate 50: bare 1fr tracks hold imgs */
93
+ }
94
+ .bar { animation: grow 2s ease infinite; }
95
+ @keyframes grow {
96
+ from { width: 0; } /* gate 14: animating width */
97
+ to { width: 100%; }
98
+ }
99
+ /* gate 27: no prefers-reduced-motion block anywhere */
100
+ /* gate 26: no :active, no :disabled styling anywhere */
101
+ </style>
102
+ </head>
103
+ <body>
104
+ <header class="nav">
105
+ <span class="mono-label">NEXUS</span>
106
+ <button class="cta">Get started</button>
107
+ </header>
108
+
109
+ <main>
110
+ <section class="hero">
111
+ <h1>Unleash hyperproductivity-supercharged workflows</h1>
112
+ <p class="promo">Trusted by 50,000+ teams shipping 10x faster.</p>
113
+ <svg width="120" height="40" viewBox="0 0 120 40">
114
+ <circle cx="20" cy="20" r="16" fill="var(--color-gray)"></circle>
115
+ </svg>
116
+ </section>
117
+
118
+ <div class="features__head">
119
+ <span class="eyebrow">01 / FEATURES</span>
120
+ <h2>Everything, seamlessly</h2>
121
+ </div>
122
+
123
+ <section class="features">
124
+ <div class="card">
125
+ <div class="feature__icon">✨</div>
126
+ <h3>Magic sync</h3>
127
+ <div class="card">
128
+ <p>A card inside a card, as the template gods intended.</p>
129
+ </div>
130
+ </div>
131
+ <div class="bar"></div>
132
+ </section>
133
+
134
+ <section class="gallery">
135
+ <img src="shot-1.png" alt="Product screenshot one">
136
+ <img src="shot-2.png" alt="Product screenshot two">
137
+ </section>
138
+
139
+ <section class="voices">
140
+ <blockquote class="quote">"It changed everything for our team."</blockquote>
141
+ <p>Jane Doe, Head of Operations</p>
142
+ </section>
143
+ </main>
144
+ </body>
145
+ </html>
@@ -0,0 +1,14 @@
1
+ <template>
2
+ <article class="rounded-2xl p-6">
3
+ <span class="text-xs uppercase tracking-widest">Field kit</span>
4
+ <img :src="photo" alt="A deckhand logging a reading" class="rounded-xl hover:scale-110" />
5
+ <button type="button" class="rounded-md px-4 py-2 transition-all" @click="open = !open">Log a reading</button>
6
+ <div aria-hidden="true" :class="{ 'animate-bounce': pulse }" class="h-4 w-4 rounded-full"></div>
7
+ <div aria-hidden="true" class="absolute -right-10 top-0 h-40 w-40 bg-gradient-to-br from-violet-500 to-sky-400 blur-[60px]"></div>
8
+ </article>
9
+ </template>
10
+
11
+ <script setup lang="ts">
12
+ defineProps<{ photo: string; pulse: boolean }>();
13
+ const open = ref(false);
14
+ </script>
@@ -0,0 +1,33 @@
1
+ import Link from "next/link";
2
+ import { cva } from "class-variance-authority";
3
+ import { cn } from "./cn";
4
+
5
+ const badge = cva("rounded-full px-2 py-1 text-xs uppercase tracking-widest", {
6
+ variants: { tone: { loud: "font-semibold", calm: "font-normal" } },
7
+ });
8
+
9
+ type HeroProps = { active: boolean; items: Array<{ id: string; label: string }> };
10
+
11
+ export function Hero({ active, items }: HeroProps) {
12
+ const count = items.length;
13
+ if (count < 1) return null;
14
+ return (
15
+ <section className="hero min-h-screen bg-slate-950 px-6">
16
+ <p className={cn("text-sm font-semibold", active && "text-violet-600")}>Release notes</p>
17
+ <h1 className="bg-gradient-to-r from-purple-500 to-pink-500 bg-clip-text text-5xl text-transparent">
18
+ Logs that sail with you
19
+ </h1>
20
+ <span className="font-mono text-xs">Kept by the crew</span>
21
+ <Link href="/docs" className={`rounded-md px-3 py-2 ${active ? "bg-violet-600" : ""} transition-all`}>
22
+ Read the docs
23
+ </Link>
24
+ <span className={badge({ tone: "loud" })}>New</span>
25
+ <div aria-hidden="true" className="absolute inset-0 -z-10 bg-[#1a1033]" />
26
+ <ul>
27
+ {items.map((item) => (
28
+ <li key={item.id} className="animate-bounce">{item.label}</li>
29
+ ))}
30
+ </ul>
31
+ </section>
32
+ );
33
+ }
@@ -0,0 +1,74 @@
1
+ <!doctype html>
2
+ <!-- Tailwind fixture: MUST FAIL. Fires 67, 54, 64, 10a, 12, 11, 2a, 2b, 29, 6a, 34, 48, 74 and 3 from utility classes, one tell per element. -->
3
+ <html lang="en">
4
+ <head>
5
+ <meta charset="utf-8">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1">
7
+ <title>Tailwind fail fixture</title>
8
+ <script src="https://cdn.tailwindcss.com"></script>
9
+ <link rel="stylesheet" href="style.css">
10
+ </head>
11
+ <!-- 34: overflow-x-hidden on body -->
12
+ <body class="overflow-x-hidden bg-slate-950 text-slate-100">
13
+
14
+ <!-- 29: glass nav -->
15
+ <nav class="sticky top-0 bg-white/10 backdrop-blur-md px-6 py-4">
16
+ <a href="/" class="font-semibold">Fieldnote</a>
17
+ <!-- 67: tracked caps nav link -->
18
+ <a href="/docs" class="text-sm uppercase tracking-wider">Docs</a>
19
+ </nav>
20
+
21
+ <!-- 6a: the first section is the hero, sized in vh -->
22
+ <section class="relative min-h-screen px-6 py-24">
23
+ <!-- 29: blurred orb -->
24
+ <div aria-hidden="true" class="absolute left-1/3 top-0 h-72 w-72 rounded-full bg-fuchsia-500 blur-3xl"></div>
25
+ <!-- 54: accent eyebrow before the h1 -->
26
+ <p class="text-sm font-semibold text-indigo-600">Fewer handoffs</p>
27
+ <h1 class="text-6xl font-bold">
28
+ <!-- 2b: gradient text in another hue -->
29
+ <span class="bg-gradient-to-r from-amber-400 to-orange-600 bg-clip-text text-transparent">Field notes</span> for crews at sea
30
+ </h1>
31
+ <!-- 64: mono as costume on a meta line -->
32
+ <p class="font-mono text-xs text-slate-400">Updated weekly by the crew</p>
33
+ <!-- 10a: transition-all -->
34
+ <a href="/start" class="rounded-lg bg-indigo-600 px-4 py-2 transition-all">Start a log</a>
35
+ <!-- 29: coloured zero-offset glow -->
36
+ <button type="button" class="rounded-lg px-4 py-2 shadow-[0_0_40px_var(--color-glow)]">Preview</button>
37
+ <!-- 12: bounce -->
38
+ <div aria-hidden="true" class="mt-12 h-6 w-6 animate-bounce rounded-full border"></div>
39
+ </section>
40
+
41
+ <!-- 2a: purple-to-blue band -->
42
+ <div aria-hidden="true" class="h-2 bg-gradient-to-r from-purple-500 to-blue-500"></div>
43
+
44
+ <section class="px-6 py-24">
45
+ <h2 class="text-3xl font-semibold">What the crew gets</h2>
46
+ <!-- 3: three icon tiles above h3s; 11: hover scale on three elements -->
47
+ <div class="mt-12 grid gap-8 md:grid-cols-3">
48
+ <div class="rounded-xl p-6 hover:scale-105">
49
+ <div class="flex h-10 w-10 items-center justify-center rounded-lg bg-indigo-600"><svg aria-hidden="true" viewBox="0 0 24 24" class="h-5 w-5"><path d="M4 12h16"/></svg></div>
50
+ <h3 class="mt-4 font-semibold">Tide tables</h3>
51
+ <p class="mt-2 text-slate-400">Every reading lands on the same chart.</p>
52
+ </div>
53
+ <div class="rounded-xl p-6 hover:scale-105">
54
+ <div class="flex h-10 w-10 items-center justify-center rounded-lg bg-indigo-600"><svg aria-hidden="true" viewBox="0 0 24 24" class="h-5 w-5"><path d="M12 4v16"/></svg></div>
55
+ <h3 class="mt-4 font-semibold">Crew logs</h3>
56
+ <p class="mt-2 text-slate-400">One log per watch, signed by whoever kept it.</p>
57
+ </div>
58
+ <div class="rounded-xl p-6 hover:scale-105">
59
+ <div class="flex h-10 w-10 items-center justify-center rounded-lg bg-indigo-600"><svg aria-hidden="true" viewBox="0 0 24 24" class="h-5 w-5"><path d="M4 4l16 16"/></svg></div>
60
+ <h3 class="mt-4 font-semibold">Weather</h3>
61
+ <p class="mt-2 text-slate-400">Forecasts pinned to the hour you sail.</p>
62
+ </div>
63
+ </div>
64
+ </section>
65
+
66
+ <section class="px-6 py-24">
67
+ <!-- 11: the image itself scales on hover -->
68
+ <img src="harbour.jpg" alt="The harbour at dawn" class="rounded-2xl hover:scale-110">
69
+ <!-- 48: literal colour and family in classes -->
70
+ <p class="mt-6 bg-[#0b0b12] font-['Inter'] p-4">Logs stay on the boat until you sync them.</p>
71
+ </section>
72
+
73
+ </body>
74
+ </html>
@@ -0,0 +1,6 @@
1
+ /* Hallmark · fixture: tailwind-fail · every utility tell, one per element */
2
+ :root {
3
+ --color-paper: oklch(18% 0.02 270);
4
+ --color-ink: oklch(95% 0.01 270);
5
+ --color-glow: oklch(62% 0.25 300 / 0.6);
6
+ }
@@ -0,0 +1,33 @@
1
+ import { useState } from "react";
2
+
3
+ type HeroProps = { onStart?: () => void; readings: Array<{ id: string; label: string }> };
4
+
5
+ export function Hero({ onStart, readings }: HeroProps) {
6
+ const [sent, setSent] = useState<boolean>(false);
7
+ const start = () => {
8
+ setSent(true);
9
+ if (onStart && readings.length > 0) onStart();
10
+ };
11
+ return (
12
+ <section className="mx-auto grid min-h-dvh max-w-6xl items-center gap-12 px-6 md:grid-cols-2">
13
+ <div>
14
+ <h1 className="font-display text-5xl text-ink">Logbooks your crew will keep</h1>
15
+ <p className="mt-4 text-lg text-muted">Write a reading once and the whole crew sees it.</p>
16
+ <button
17
+ type="button"
18
+ onClick={start}
19
+ disabled={sent}
20
+ className="mt-8 h-12 rounded-md bg-accent px-5 text-accent-ink transition-colors hover:bg-accent-strong focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent active:translate-y-px disabled:cursor-not-allowed motion-reduce:transition-none"
21
+ >
22
+ Start a log
23
+ </button>
24
+ <ul className="mt-8 space-y-2">
25
+ {readings.map((r) => (
26
+ <li key={r.id} className="text-sm text-muted">{r.label}</li>
27
+ ))}
28
+ </ul>
29
+ </div>
30
+ <figure data-slot="hero" className="aspect-[4/3] rounded-lg bg-well" />
31
+ </section>
32
+ );
33
+ }
@@ -0,0 +1,57 @@
1
+ <!doctype html>
2
+ <!-- Tailwind fixture: MUST PASS clean (0 FAIL, 0 REFLEX, 0 WARN) with theme token classes, sentence case labels, focus-visible rings, motion-reduce fallbacks, themed selection and caret, overflow-x-clip on html and body. -->
3
+ <html lang="en" class="overflow-x-clip [scrollbar-color:var(--color-muted)_var(--color-paper)]">
4
+ <head>
5
+ <meta charset="utf-8">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1">
7
+ <title>Tailwind pass fixture</title>
8
+ <meta name="description" content="A Tailwind page written to pass every gate the static tier reads from utility classes.">
9
+ <script src="https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4"></script>
10
+ <link rel="stylesheet" href="style.css">
11
+ </head>
12
+ <body class="overflow-x-clip bg-paper font-body text-ink selection:bg-accent selection:text-accent-ink">
13
+
14
+ <header class="mx-auto flex max-w-6xl items-center justify-between px-6 py-5">
15
+ <a href="/" class="font-display text-lg focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent">Fieldnote</a>
16
+ <nav aria-label="Main" class="flex gap-6">
17
+ <a href="/pricing" class="text-sm text-muted hover:text-ink focus-visible:outline-2 focus-visible:outline-accent">Pricing</a>
18
+ <a href="/docs" class="text-sm text-muted hover:text-ink focus-visible:outline-2 focus-visible:outline-accent">Docs</a>
19
+ </nav>
20
+ </header>
21
+
22
+ <main>
23
+ <section class="mx-auto grid min-h-dvh max-w-6xl items-center gap-12 px-6 md:grid-cols-2">
24
+ <div>
25
+ <h1 class="font-display text-5xl">Logbooks your crew will keep</h1>
26
+ <p class="mt-4 text-lg text-muted">Write a reading once and the whole crew sees it.</p>
27
+ <form class="mt-8 flex gap-3">
28
+ <label for="email" class="sr-only">Email</label>
29
+ <input id="email" type="email" class="h-12 rounded-md border border-line bg-paper px-4 caret-accent focus-visible:outline-2 focus-visible:outline-accent">
30
+ <button type="submit" class="h-12 rounded-md bg-accent px-5 text-accent-ink transition-colors hover:bg-accent-strong focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent active:translate-y-px disabled:cursor-not-allowed disabled:bg-line motion-reduce:transition-none">Start a log</button>
31
+ </form>
32
+ </div>
33
+ <figure data-slot="hero" class="aspect-[4/3] rounded-lg bg-well">
34
+ <figcaption class="sr-only">Your product screenshot</figcaption>
35
+ </figure>
36
+ </section>
37
+
38
+ <section class="mx-auto max-w-6xl px-6 py-32">
39
+ <h2 class="font-display text-3xl">One log per watch</h2>
40
+ <p class="mt-3 max-w-prose text-muted">Each watch signs its own page, and the next watch reads it first.</p>
41
+ <ul class="mt-10 grid gap-8 md:grid-cols-2">
42
+ <li class="border-t border-line pt-4">
43
+ <h3 class="font-display text-xl">Readings</h3>
44
+ <p class="mt-2 text-sm text-muted">Wind, swell and heading, in the units your boat uses.</p>
45
+ </li>
46
+ <li class="border-t border-line pt-4">
47
+ <h3 class="font-display text-xl">Handover notes</h3>
48
+ <p class="mt-2 text-sm text-muted">What changed since the last watch, in plain sentences.</p>
49
+ </li>
50
+ </ul>
51
+ <a href="/tour" class="mt-10 inline-block text-accent underline underline-offset-4 transition-transform hover:translate-x-0.5 focus-visible:outline-2 focus-visible:outline-accent motion-reduce:transition-none motion-reduce:hover:translate-x-0">Take the tour</a>
52
+ </section>
53
+ </main>
54
+
55
+ <script>window.hallmarkSlots = (m) => { for (const [k, v] of Object.entries(m)) { const s = document.querySelector(`[data-slot="${k}"]`); if (!s) continue; const im = new Image(); im.src = typeof v === 'string' ? v : v.src; im.alt = (typeof v === 'object' && v.alt) || s.dataset.alt || ''; s.prepend(im); } };</script>
56
+ </body>
57
+ </html>
@@ -0,0 +1,15 @@
1
+ /* Hallmark · fixture: tailwind-pass · theme: fixture (by request) · posture: restrained · nav: N1 · footer: none · hero: Settled */
2
+ @import "tailwindcss";
3
+
4
+ @theme {
5
+ --color-paper: oklch(97.5% 0.006 240);
6
+ --color-well: oklch(93% 0.012 240);
7
+ --color-line: oklch(86% 0.015 240);
8
+ --color-ink: oklch(22% 0.025 250);
9
+ --color-muted: oklch(46% 0.02 250);
10
+ --color-accent: oklch(48% 0.15 255);
11
+ --color-accent-strong: oklch(42% 0.15 255);
12
+ --color-accent-ink: oklch(98.5% 0.005 255);
13
+ --font-display: "Fraunces", serif;
14
+ --font-body: "Public Sans", sans-serif;
15
+ }
@@ -0,0 +1,54 @@
1
+ <!doctype html>
2
+ <!--
3
+ Waiver fixture. Five waivers are claimed on a deliberately expressive page:
4
+ four are honoured, one is refused because it names a Floor gate, and the build
5
+ ships. There is no cap, so the page is not blocked for being expressive; what
6
+ it gets instead is a NOTE saying four waivers is a house style, not exceptions.
7
+
8
+ Assertion (run from this directory):
9
+
10
+ node ../../sloplint.mjs . --json | node -e "let s='';process.stdin.on('data',d=>s+=d).on('end',()=>{const j=JSON.parse(s);console.log(JSON.stringify(j.summary))})"
11
+ # expected: fails 0, reflex 0, waived 5, rejected 2, answered 1, notes 1
12
+ # (waived counts findings, not gates: gate 1 fires on both the token and the
13
+ # h1 rule, and gate 7 on both the token and the body background)
14
+
15
+ Case by case:
16
+ waive 40 -> refused, Floor is never waivable, and gate 40 still binds
17
+ waive 7b -> honoured; the guard (surface: absolute in the stamp) holds
18
+ waive 22 -> honoured
19
+ waive 25 -> honoured (no finding to downgrade on this page)
20
+ waive 1 -> honoured, and trips the >3 house-style NOTE
21
+ answered F3 -> honoured; the Finish finding reports ANSWERED instead of WARN
22
+ answered 40 -> refused; 40 is Floor, and Floor findings are fixed, not answered
23
+ -->
24
+ <html lang="en">
25
+ <head>
26
+ <meta charset="utf-8">
27
+ <meta name="viewport" content="width=device-width, initial-scale=1">
28
+ <title>Waiver fixture</title>
29
+ <style>
30
+ /* Hallmark · macrostructure: Manifesto · tone: austere · anchor hue: 250 · surface: absolute · nav: N9 · footer: Ft2 · hero: Poster/H1 */
31
+ /* Hallmark · pre-emit critique: P5 H4 E5 S4 R5 V4 · weakest: E - fixture, not a real build */
32
+ /* Hallmark · waive 40 · contrast measured on the stage · the manifesto is printed white on black */
33
+ /* Hallmark · waive 7b · surface: absolute declared, 40-41 pass · the manifesto stage is printed on black paper */
34
+ /* Hallmark · waive 22 · neutrals achromatic throughout · the manifesto rules are pure grey by intent */
35
+ /* Hallmark · waive 25 · measure runs to 96ch · the manifesto sets long declarative lines */
36
+ /* Hallmark · waive 1 · two families declared · the manifesto pairs a display serif with a grotesque */
37
+ /* Hallmark · answered F3 · the manifesto head is one word and cannot wrap, so balance has nothing to balance */
38
+ /* Hallmark · answered 40 · contrast is fine here honestly */
39
+ :root {
40
+ --color-paper: #000;
41
+ --color-ink: oklch(96% 0 250);
42
+ --font-display: Inter, sans-serif;
43
+ --font-body: "Public Sans", sans-serif;
44
+ }
45
+ html, body { overflow-x: clip; }
46
+ body { background: var(--color-paper); color: var(--color-ink); font-family: var(--font-body); }
47
+ h1 { font-family: var(--font-display); }
48
+ </style>
49
+ </head>
50
+ <body>
51
+ <h1>A manifesto printed on a black stage</h1>
52
+ <p>The manifesto sets long declarative lines and lets the paper do the shouting.</p>
53
+ </body>
54
+ </html>
@@ -0,0 +1,85 @@
1
+ #!/usr/bin/env node
2
+ import { createHash } from "node:crypto";
3
+ import { mkdirSync, existsSync, writeFileSync, readFileSync } from "node:fs";
4
+ import { join, dirname, basename } from "node:path";
5
+
6
+ const ENDPOINT = "https://api.together.xyz/v1/images/generations";
7
+ const DEFAULT_MODEL = "black-forest-labs/FLUX.1.1-pro";
8
+
9
+ function parseArgs(argv) {
10
+ const a = { _: [] };
11
+ for (let i = 0; i < argv.length; i++) {
12
+ const t = argv[i];
13
+ if (t.startsWith("--")) {
14
+ const k = t.slice(2);
15
+ if (k === "force" || k === "json") a[k] = true;
16
+ else a[k] = argv[++i];
17
+ } else a._.push(t);
18
+ }
19
+ return a;
20
+ }
21
+
22
+ function out(obj, code = 0) {
23
+ if (args.json) process.stdout.write(JSON.stringify(obj) + "\n");
24
+ else if (obj.path) console.log(obj.path);
25
+ else if (obj.message || obj.error) console.error(obj.message || obj.error);
26
+ process.exit(code);
27
+ }
28
+
29
+ const args = parseArgs(process.argv.slice(2));
30
+ const prompt = args._.join(" ").trim();
31
+ if (!prompt) out({ error: 'usage: node imagegen.mjs "<prompt>" [--model ...] [--size WxH] [--out path]' }, 2);
32
+
33
+ const model = args.model ?? DEFAULT_MODEL;
34
+ const size = args.size ?? "1024x1024";
35
+ const [w, h] = size.split("x").map((n) => parseInt(n, 10));
36
+ if (!w || !h) out({ error: `bad --size ${size} (want WxH, e.g. 1536x1024)` }, 2);
37
+ const steps = parseInt(args.steps ?? "4", 10);
38
+
39
+ const n = Math.max(1, parseInt(args.n ?? "1", 10) || 1);
40
+ const hash = createHash("sha256").update([model, prompt, size, steps, n].join("|")).digest("hex").slice(0, 16);
41
+ const cacheDir = args.out ? dirname(args.out) : join(process.cwd(), ".hallmark", "img-cache");
42
+ const cachePath = args.out ?? join(cacheDir, `${hash}.png`);
43
+ const stem = cachePath.replace(/\.png$/, "");
44
+ const metaPath = stem + ".json";
45
+ const pathFor = (i) => (n === 1 ? cachePath : `${stem}-${i + 1}.png`);
46
+
47
+ const sameRequest = () => { if (!args.out) return true; try { return JSON.parse(readFileSync(metaPath, "utf8")).hash === hash; } catch { return false; } };
48
+ if (!args.force && existsSync(cachePath) && sameRequest()) {
49
+ out({ path: cachePath, cached: true, model, prompt });
50
+ }
51
+
52
+ const key = process.env.TOGETHER_API_KEY;
53
+ if (!key) {
54
+ out({
55
+ error: "no-key",
56
+ message:
57
+ "TOGETHER_API_KEY not set. Image generation is opt-in; falling back to CSS-art / a labelled placeholder. " +
58
+ "Set TOGETHER_API_KEY to generate real imagery, or keep the typography-only / placeholder path.",
59
+ }, 3);
60
+ }
61
+
62
+ try {
63
+ const res = await fetch(ENDPOINT, {
64
+ method: "POST",
65
+ headers: { "content-type": "application/json", authorization: `Bearer ${key}` },
66
+ body: JSON.stringify({ model, prompt, width: w, height: h, steps, n, response_format: "b64_json" }),
67
+ signal: AbortSignal.timeout(180000),
68
+ });
69
+ if (!res.ok) {
70
+ const detail = (await res.text()).slice(0, 300);
71
+ out({ error: `together ${res.status}`, message: `image API ${res.status}: ${detail}` }, 1);
72
+ }
73
+ const data = await res.json();
74
+ const images = (data?.data ?? []).map((d) => d?.b64_json).filter(Boolean);
75
+ if (!images.length) out({ error: "no-image", message: "image API returned no b64_json payload" }, 1);
76
+
77
+ mkdirSync(cacheDir, { recursive: true });
78
+ const paths = [];
79
+ images.forEach((b64, i) => { const p = pathFor(i); writeFileSync(p, Buffer.from(b64, "base64")); paths.push(p); });
80
+ const provenance = { model, prompt, size, steps, n, hash, files: paths.map((p) => basename(p)), generatedVia: "together", note: "generated asset; post-process before shipping; verify licensing", at: new Date().toISOString().slice(0, 10) };
81
+ writeFileSync(metaPath, JSON.stringify(provenance, null, 2) + "\n");
82
+ out({ path: paths[0], paths, cached: false, model, prompt, provenance });
83
+ } catch (e) {
84
+ out({ error: "fetch-failed", message: `image generation failed: ${String(e?.message ?? e)}. Falling back to placeholder.` }, 1);
85
+ }
@@ -0,0 +1,70 @@
1
+ #!/usr/bin/env node
2
+ import { readFileSync, writeFileSync, mkdirSync, existsSync, renameSync, realpathSync } from "node:fs";
3
+ import { fileURLToPath } from "node:url";
4
+ import { dirname, join } from "node:path";
5
+ import { homedir } from "node:os";
6
+
7
+ const HERE = dirname(fileURLToPath(import.meta.url));
8
+ const HOOK_CMD = `node "${join(HERE, "lint-hook.mjs")}"`;
9
+ const MATCHER = "Write|Edit|MultiEdit";
10
+
11
+ const args = process.argv.slice(2);
12
+ const has = (f) => args.includes(f);
13
+
14
+ const settingsPath = has("--global")
15
+ ? join(homedir(), ".claude", "settings.json")
16
+ : join(process.cwd(), ".claude", "settings.json");
17
+
18
+ const hookEntry = {
19
+ matcher: MATCHER,
20
+ hooks: [{ type: "command", command: HOOK_CMD, timeout: 10 }],
21
+ };
22
+
23
+ function readSettings() {
24
+ if (!existsSync(settingsPath)) return {};
25
+ try { return JSON.parse(readFileSync(settingsPath, "utf8")); } catch {
26
+ console.error(`refusing to overwrite unparseable ${settingsPath}; fix or delete it first.`);
27
+ process.exit(1);
28
+ }
29
+ }
30
+
31
+ const ourHook = (h) => typeof h?.command === "string" && /hallmark[\\/]scripts[\\/]lint-hook\.mjs/.test(h.command);
32
+ const withoutOurs = (list) => list.flatMap((e) => {
33
+ if (!Array.isArray(e?.hooks) || !e.hooks.some(ourHook)) return [e];
34
+ const rest = e.hooks.filter((h) => !ourHook(h));
35
+ return rest.length ? [{ ...e, hooks: rest }] : [];
36
+ });
37
+
38
+ if (has("--print")) {
39
+ console.log(`# add to ${settingsPath} :`);
40
+ console.log(JSON.stringify({ hooks: { PostToolUse: [hookEntry] } }, null, 2));
41
+ process.exit(0);
42
+ }
43
+
44
+ if (has("--remove") && !existsSync(settingsPath)) {
45
+ console.log(`no ${settingsPath}; nothing to remove`);
46
+ process.exit(0);
47
+ }
48
+
49
+ const settings = readSettings();
50
+ if (!settings || typeof settings !== "object" || Array.isArray(settings)) { console.error(`refusing to rewrite ${settingsPath}: it is not a JSON object`); process.exit(1); }
51
+ settings.hooks ??= {};
52
+ settings.hooks.PostToolUse ??= [];
53
+ if (!Array.isArray(settings.hooks.PostToolUse)) { console.error(`refusing to rewrite ${settingsPath}: hooks.PostToolUse is not a list`); process.exit(1); }
54
+ // Write beside the file and rename over it, so a crash never leaves settings.json half written.
55
+ // A symlinked settings.json (a dotfiles repo) keeps its link: the write lands on the file it points at.
56
+ const save = () => { const dest = existsSync(settingsPath) ? realpathSync(settingsPath) : settingsPath; const tmp = `${dest}.hallmark-tmp`; writeFileSync(tmp, JSON.stringify(settings, null, 2) + "\n"); renameSync(tmp, dest); };
57
+
58
+ settings.hooks.PostToolUse = withoutOurs(settings.hooks.PostToolUse);
59
+
60
+ if (has("--remove")) {
61
+ save();
62
+ console.log(`removed the Hallmark lint hook from ${settingsPath}`);
63
+ process.exit(0);
64
+ }
65
+
66
+ settings.hooks.PostToolUse.push(hookEntry);
67
+ mkdirSync(dirname(settingsPath), { recursive: true });
68
+ save();
69
+ console.log(`installed the Hallmark edit-time lint hook into ${settingsPath}`);
70
+ console.log(`it lints Hallmark .html and .css files, and .jsx, .tsx, .vue, .svelte and .astro files inside a project with a .hallmark folder, on write; it advises and never blocks. Remove with --remove.`);