cuelo 0.10.83 → 0.10.85

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 (368) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +31 -29
  3. package/.next/build-manifest.json +2 -2
  4. package/.next/prerender-manifest.json +3 -3
  5. package/.next/required-server-files.js +1 -1
  6. package/.next/required-server-files.json +1 -1
  7. package/.next/routes-manifest.json +14 -0
  8. package/.next/server/app/_global-error/page.js +3 -3
  9. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  10. package/.next/server/app/_global-error.html +1 -1
  11. package/.next/server/app/_global-error.rsc +1 -1
  12. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  13. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  14. package/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  15. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  16. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  17. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  18. package/.next/server/app/_not-found/page.js +2 -2
  19. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  20. package/.next/server/app/_not-found.html +1 -1
  21. package/.next/server/app/_not-found.rsc +2 -2
  22. package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  23. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  24. package/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  25. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  26. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  27. package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  28. package/.next/server/app/api/agent/[id]/account/route.js +1 -1
  29. package/.next/server/app/api/agent/[id]/bash-output/route.js +1 -1
  30. package/.next/server/app/api/agent/[id]/events/route.js +2 -2
  31. package/.next/server/app/api/agent/[id]/route.js +1 -1
  32. package/.next/server/app/api/agent/new/route.js +1 -1
  33. package/.next/server/app/api/agent/running/route.js +1 -1
  34. package/.next/server/app/api/attachment-settings/route.js +1 -1
  35. package/.next/server/app/api/attachments/[id]/transcription/route.js +2 -2
  36. package/.next/server/app/api/attachments/draft/route.js +1 -1
  37. package/.next/server/app/api/attachments/route.js +2 -2
  38. package/.next/server/app/api/auth/all-providers/route.js +1 -1
  39. package/.next/server/app/api/auth/api-key/[provider]/route.js +1 -1
  40. package/.next/server/app/api/auth/login/[provider]/route.js +2 -2
  41. package/.next/server/app/api/auth/logout/[provider]/route.js +1 -1
  42. package/.next/server/app/api/auth/providers/route.js +1 -1
  43. package/.next/server/app/api/character-mode/route.js +2 -0
  44. package/.next/server/app/api/character-mode/route.js.nft.json +1 -0
  45. package/.next/server/app/api/character-mode/route_client-reference-manifest.js +1 -0
  46. package/.next/server/app/api/cwd/browse/route.js +1 -1
  47. package/.next/server/app/api/cwd/validate/route.js +1 -1
  48. package/.next/server/app/api/default-cwd/route.js +1 -1
  49. package/.next/server/app/api/display-settings/route.js +1 -1
  50. package/.next/server/app/api/document-text/route.js +2 -2
  51. package/.next/server/app/api/experiments/route.js +1 -1
  52. package/.next/server/app/api/file-index/route.js +1 -1
  53. package/.next/server/app/api/files/[...path]/route.js +1 -1
  54. package/.next/server/app/api/git/diff/route.js +2 -2
  55. package/.next/server/app/api/git/status/route.js +2 -2
  56. package/.next/server/app/api/github/projects/route.js +1 -1
  57. package/.next/server/app/api/gpt6/handles/route.js +1 -1
  58. package/.next/server/app/api/gpt6/reply/route.js +1 -1
  59. package/.next/server/app/api/gpt6/token/route.js +1 -1
  60. package/.next/server/app/api/gpt6/web6-session/route.js +1 -1
  61. package/.next/server/app/api/home/route.js +1 -1
  62. package/.next/server/app/api/live/call/[callId]/route.js +1 -1
  63. package/.next/server/app/api/live/call/[callId]/route.js.nft.json +1 -1
  64. package/.next/server/app/api/live/events/route.js +2 -2
  65. package/.next/server/app/api/live/events/route.js.nft.json +1 -1
  66. package/.next/server/app/api/live/interpret/cloud/events/route.js +2 -2
  67. package/.next/server/app/api/live/interpret/cloud/events/route.js.nft.json +1 -1
  68. package/.next/server/app/api/live/interpret/cloud/input/route.js +1 -1
  69. package/.next/server/app/api/live/interpret/cloud/input/route.js.nft.json +1 -1
  70. package/.next/server/app/api/live/interpret/cloud/route.js +1 -1
  71. package/.next/server/app/api/live/interpret/cloud/route.js.nft.json +1 -1
  72. package/.next/server/app/api/live/interpret/route.js +1 -1
  73. package/.next/server/app/api/live/interpret/route.js.nft.json +1 -1
  74. package/.next/server/app/api/live/offer/route.js +1 -1
  75. package/.next/server/app/api/live/offer/route.js.nft.json +1 -1
  76. package/.next/server/app/api/live/voices/route.js +1 -1
  77. package/.next/server/app/api/live/voices/route.js.nft.json +1 -1
  78. package/.next/server/app/api/mcp/route.js +2 -2
  79. package/.next/server/app/api/model-roles/route.js +1 -1
  80. package/.next/server/app/api/models/route.js +1 -1
  81. package/.next/server/app/api/models-config/catalog/route.js +1 -1
  82. package/.next/server/app/api/models-config/discover/route.js +1 -1
  83. package/.next/server/app/api/models-config/route.js +2 -2
  84. package/.next/server/app/api/models-config/test/route.js +1 -1
  85. package/.next/server/app/api/office-characters/[...path]/route.js +2 -0
  86. package/.next/server/app/api/office-characters/[...path]/route.js.nft.json +1 -0
  87. package/.next/server/app/api/office-characters/[...path]/route_client-reference-manifest.js +1 -0
  88. package/.next/server/app/api/plugins/route.js +1 -1
  89. package/.next/server/app/api/project-docs/route.js +1 -1
  90. package/.next/server/app/api/project-trust/route.js +1 -1
  91. package/.next/server/app/api/projects/route.js +1 -1
  92. package/.next/server/app/api/runs/[runId]/prelude/route.js +1 -1
  93. package/.next/server/app/api/runs/[runId]/route.js +1 -1
  94. package/.next/server/app/api/runs/[runId]/turns/route.js +1 -1
  95. package/.next/server/app/api/runs/route.js +1 -1
  96. package/.next/server/app/api/sessions/[id]/auto-name/route.js +1 -1
  97. package/.next/server/app/api/sessions/[id]/context/route.js +1 -1
  98. package/.next/server/app/api/sessions/[id]/entries/[entryId]/thinking/route.js +1 -1
  99. package/.next/server/app/api/sessions/[id]/export/route.js +1 -1
  100. package/.next/server/app/api/sessions/[id]/route.js +1 -1
  101. package/.next/server/app/api/sessions/[id]/state/route.js +1 -1
  102. package/.next/server/app/api/sessions/route.js +1 -1
  103. package/.next/server/app/api/sessions/search/route.js +1 -1
  104. package/.next/server/app/api/settings/route.js +1 -1
  105. package/.next/server/app/api/sidecars/[service]/[...path]/route.js +1 -1
  106. package/.next/server/app/api/skills/check/route.js +1 -1
  107. package/.next/server/app/api/skills/install/route.js +2 -2
  108. package/.next/server/app/api/skills/route.js +2 -2
  109. package/.next/server/app/api/skills/search/route.js +1 -1
  110. package/.next/server/app/api/skills/update/route.js +1 -1
  111. package/.next/server/app/api/subagents/eta/route.js +1 -1
  112. package/.next/server/app/api/theme/route.js +1 -1
  113. package/.next/server/app/api/tool-image/route.js +1 -1
  114. package/.next/server/app/api/update-maintenance/route.js +2 -2
  115. package/.next/server/app/api/updates/route.js +1 -1
  116. package/.next/server/app/api/web-access/recovery/route.js +1 -1
  117. package/.next/server/app/api/web-access/route.js +1 -1
  118. package/.next/server/app/api/web6/consults/route.js +1 -1
  119. package/.next/server/app/api/worktrees/route.js +1 -1
  120. package/.next/server/app/favicon.ico/route.js +1 -1
  121. package/.next/server/app/index.html +1 -1
  122. package/.next/server/app/index.rsc +4 -4
  123. package/.next/server/app/index.segments/__PAGE__.segment.rsc +3 -3
  124. package/.next/server/app/index.segments/_full.segment.rsc +4 -4
  125. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  126. package/.next/server/app/index.segments/_index.segment.rsc +2 -2
  127. package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  128. package/.next/server/app/manifest.webmanifest/route.js +2 -2
  129. package/.next/server/app/page.js +21 -21
  130. package/.next/server/app/page_client-reference-manifest.js +1 -1
  131. package/.next/server/app/recover/page.js +2 -2
  132. package/.next/server/app/recover/page_client-reference-manifest.js +1 -1
  133. package/.next/server/app/recover.html +1 -1
  134. package/.next/server/app/recover.rsc +2 -2
  135. package/.next/server/app/recover.segments/_full.segment.rsc +2 -2
  136. package/.next/server/app/recover.segments/_head.segment.rsc +1 -1
  137. package/.next/server/app/recover.segments/_index.segment.rsc +2 -2
  138. package/.next/server/app/recover.segments/_tree.segment.rsc +1 -1
  139. package/.next/server/app/recover.segments/recover/__PAGE__.segment.rsc +1 -1
  140. package/.next/server/app/recover.segments/recover.segment.rsc +1 -1
  141. package/.next/server/app-paths-manifest.json +31 -29
  142. package/.next/server/chunks/{6775.js → 205.js} +2 -2
  143. package/.next/server/chunks/3379.js +1 -1
  144. package/.next/server/chunks/7738.js +1 -0
  145. package/.next/server/functions-config-manifest.json +2 -0
  146. package/.next/server/middleware-build-manifest.js +1 -1
  147. package/.next/server/pages/404.html +1 -1
  148. package/.next/server/pages/500.html +1 -1
  149. package/.next/server/server-reference-manifest.json +1 -1
  150. package/.next/static/chunks/app/_global-error/page-436da0332762a8e3.js +1 -0
  151. package/.next/static/chunks/app/api/agent/[id]/account/route-436da0332762a8e3.js +1 -0
  152. package/.next/static/chunks/app/api/agent/[id]/bash-output/route-436da0332762a8e3.js +1 -0
  153. package/.next/static/chunks/app/api/agent/[id]/events/route-436da0332762a8e3.js +1 -0
  154. package/.next/static/chunks/app/api/agent/[id]/route-436da0332762a8e3.js +1 -0
  155. package/.next/static/chunks/app/api/agent/new/route-436da0332762a8e3.js +1 -0
  156. package/.next/static/chunks/app/api/agent/running/route-436da0332762a8e3.js +1 -0
  157. package/.next/static/chunks/app/api/attachment-settings/route-436da0332762a8e3.js +1 -0
  158. package/.next/static/chunks/app/api/attachments/[id]/transcription/route-436da0332762a8e3.js +1 -0
  159. package/.next/static/chunks/app/api/attachments/draft/route-436da0332762a8e3.js +1 -0
  160. package/.next/static/chunks/app/api/attachments/route-436da0332762a8e3.js +1 -0
  161. package/.next/static/chunks/app/api/auth/all-providers/route-436da0332762a8e3.js +1 -0
  162. package/.next/static/chunks/app/api/auth/api-key/[provider]/route-436da0332762a8e3.js +1 -0
  163. package/.next/static/chunks/app/api/auth/login/[provider]/route-436da0332762a8e3.js +1 -0
  164. package/.next/static/chunks/app/api/auth/logout/[provider]/route-436da0332762a8e3.js +1 -0
  165. package/.next/static/chunks/app/api/auth/providers/route-436da0332762a8e3.js +1 -0
  166. package/.next/static/chunks/app/api/character-mode/route-436da0332762a8e3.js +1 -0
  167. package/.next/static/chunks/app/api/cwd/browse/route-436da0332762a8e3.js +1 -0
  168. package/.next/static/chunks/app/api/cwd/validate/route-436da0332762a8e3.js +1 -0
  169. package/.next/static/chunks/app/api/default-cwd/route-436da0332762a8e3.js +1 -0
  170. package/.next/static/chunks/app/api/display-settings/route-436da0332762a8e3.js +1 -0
  171. package/.next/static/chunks/app/api/document-text/route-436da0332762a8e3.js +1 -0
  172. package/.next/static/chunks/app/api/experiments/route-436da0332762a8e3.js +1 -0
  173. package/.next/static/chunks/app/api/file-index/route-436da0332762a8e3.js +1 -0
  174. package/.next/static/chunks/app/api/files/[...path]/route-436da0332762a8e3.js +1 -0
  175. package/.next/static/chunks/app/api/git/diff/route-436da0332762a8e3.js +1 -0
  176. package/.next/static/chunks/app/api/git/status/route-436da0332762a8e3.js +1 -0
  177. package/.next/static/chunks/app/api/github/projects/route-436da0332762a8e3.js +1 -0
  178. package/.next/static/chunks/app/api/gpt6/handles/route-436da0332762a8e3.js +1 -0
  179. package/.next/static/chunks/app/api/gpt6/reply/route-436da0332762a8e3.js +1 -0
  180. package/.next/static/chunks/app/api/gpt6/token/route-436da0332762a8e3.js +1 -0
  181. package/.next/static/chunks/app/api/gpt6/web6-session/route-436da0332762a8e3.js +1 -0
  182. package/.next/static/chunks/app/api/home/route-436da0332762a8e3.js +1 -0
  183. package/.next/static/chunks/app/api/live/call/[callId]/route-436da0332762a8e3.js +1 -0
  184. package/.next/static/chunks/app/api/live/events/route-436da0332762a8e3.js +1 -0
  185. package/.next/static/chunks/app/api/live/interpret/cloud/events/route-436da0332762a8e3.js +1 -0
  186. package/.next/static/chunks/app/api/live/interpret/cloud/input/route-436da0332762a8e3.js +1 -0
  187. package/.next/static/chunks/app/api/live/interpret/cloud/route-436da0332762a8e3.js +1 -0
  188. package/.next/static/chunks/app/api/live/interpret/route-436da0332762a8e3.js +1 -0
  189. package/.next/static/chunks/app/api/live/offer/route-436da0332762a8e3.js +1 -0
  190. package/.next/static/chunks/app/api/live/voices/route-436da0332762a8e3.js +1 -0
  191. package/.next/static/chunks/app/api/mcp/route-436da0332762a8e3.js +1 -0
  192. package/.next/static/chunks/app/api/model-roles/route-436da0332762a8e3.js +1 -0
  193. package/.next/static/chunks/app/api/models/route-436da0332762a8e3.js +1 -0
  194. package/.next/static/chunks/app/api/models-config/catalog/route-436da0332762a8e3.js +1 -0
  195. package/.next/static/chunks/app/api/models-config/discover/route-436da0332762a8e3.js +1 -0
  196. package/.next/static/chunks/app/api/models-config/route-436da0332762a8e3.js +1 -0
  197. package/.next/static/chunks/app/api/models-config/test/route-436da0332762a8e3.js +1 -0
  198. package/.next/static/chunks/app/api/office-characters/[...path]/route-436da0332762a8e3.js +1 -0
  199. package/.next/static/chunks/app/api/plugins/route-436da0332762a8e3.js +1 -0
  200. package/.next/static/chunks/app/api/project-docs/route-436da0332762a8e3.js +1 -0
  201. package/.next/static/chunks/app/api/project-trust/route-436da0332762a8e3.js +1 -0
  202. package/.next/static/chunks/app/api/projects/route-436da0332762a8e3.js +1 -0
  203. package/.next/static/chunks/app/api/runs/[runId]/prelude/route-436da0332762a8e3.js +1 -0
  204. package/.next/static/chunks/app/api/runs/[runId]/route-436da0332762a8e3.js +1 -0
  205. package/.next/static/chunks/app/api/runs/[runId]/turns/route-436da0332762a8e3.js +1 -0
  206. package/.next/static/chunks/app/api/runs/route-436da0332762a8e3.js +1 -0
  207. package/.next/static/chunks/app/api/sessions/[id]/auto-name/route-436da0332762a8e3.js +1 -0
  208. package/.next/static/chunks/app/api/sessions/[id]/context/route-436da0332762a8e3.js +1 -0
  209. package/.next/static/chunks/app/api/sessions/[id]/entries/[entryId]/thinking/route-436da0332762a8e3.js +1 -0
  210. package/.next/static/chunks/app/api/sessions/[id]/export/route-436da0332762a8e3.js +1 -0
  211. package/.next/static/chunks/app/api/sessions/[id]/route-436da0332762a8e3.js +1 -0
  212. package/.next/static/chunks/app/api/sessions/[id]/state/route-436da0332762a8e3.js +1 -0
  213. package/.next/static/chunks/app/api/sessions/route-436da0332762a8e3.js +1 -0
  214. package/.next/static/chunks/app/api/sessions/search/route-436da0332762a8e3.js +1 -0
  215. package/.next/static/chunks/app/api/settings/route-436da0332762a8e3.js +1 -0
  216. package/.next/static/chunks/app/api/sidecars/[service]/[...path]/route-436da0332762a8e3.js +1 -0
  217. package/.next/static/chunks/app/api/skills/check/route-436da0332762a8e3.js +1 -0
  218. package/.next/static/chunks/app/api/skills/install/route-436da0332762a8e3.js +1 -0
  219. package/.next/static/chunks/app/api/skills/route-436da0332762a8e3.js +1 -0
  220. package/.next/static/chunks/app/api/skills/search/route-436da0332762a8e3.js +1 -0
  221. package/.next/static/chunks/app/api/skills/update/route-436da0332762a8e3.js +1 -0
  222. package/.next/static/chunks/app/api/subagents/eta/route-436da0332762a8e3.js +1 -0
  223. package/.next/static/chunks/app/api/theme/route-436da0332762a8e3.js +1 -0
  224. package/.next/static/chunks/app/api/tool-image/route-436da0332762a8e3.js +1 -0
  225. package/.next/static/chunks/app/api/update-maintenance/route-436da0332762a8e3.js +1 -0
  226. package/.next/static/chunks/app/api/updates/route-436da0332762a8e3.js +1 -0
  227. package/.next/static/chunks/app/api/web-access/recovery/route-436da0332762a8e3.js +1 -0
  228. package/.next/static/chunks/app/api/web-access/route-436da0332762a8e3.js +1 -0
  229. package/.next/static/chunks/app/api/web6/consults/route-436da0332762a8e3.js +1 -0
  230. package/.next/static/chunks/app/api/worktrees/route-436da0332762a8e3.js +1 -0
  231. package/.next/static/chunks/app/{layout-4e22adaca20b3c57.js → layout-9732ddae4dc9638c.js} +1 -1
  232. package/.next/static/chunks/app/manifest.webmanifest/route-436da0332762a8e3.js +1 -0
  233. package/.next/static/chunks/app/page-8e9c8449e2f53ae8.js +75 -0
  234. package/.next/static/chunks/next/dist/client/components/builtin/app-error-436da0332762a8e3.js +1 -0
  235. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-436da0332762a8e3.js +1 -0
  236. package/.next/static/chunks/next/dist/client/components/builtin/not-found-436da0332762a8e3.js +1 -0
  237. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-436da0332762a8e3.js +1 -0
  238. package/.next/static/y4k_8nU4FYWcP7nTP4oCU/_buildManifest.js +1 -0
  239. package/.next/trace +108 -108
  240. package/.next/trace-build +1 -1
  241. package/.next/types/app/api/character-mode/route.ts +351 -0
  242. package/.next/types/app/api/office-characters/[...path]/route.ts +351 -0
  243. package/.next/types/routes.d.ts +3 -1
  244. package/.next/types/validator.ts +18 -0
  245. package/README.md +1 -1
  246. package/Tools/CUELO_Setup/files/native-runtime-patch.js +1 -1
  247. package/Tools/OMP_Global_Config/agent/extensions/character-voice.ts +217 -22
  248. package/Tools/OMP_Global_Config/agent/extensions/slop-gate/review.ts +1 -1
  249. package/Tools/OMP_Global_Config/agent/rules/harness-policy.json +2 -1
  250. package/Tools/OMP_Global_Config/agent/skills/humanizer/LICENSE.txt +21 -0
  251. package/Tools/OMP_Global_Config/agent/skills/humanizer/SKILL.md +357 -0
  252. package/Tools/OMP_Global_Config/agent/skills/humanizer/UPSTREAM.json +37 -0
  253. package/Tools/OMP_Global_Config/agent/skills/humanizer/examples/after-1.md +17 -0
  254. package/Tools/OMP_Global_Config/agent/skills/humanizer/examples/after-2.md +27 -0
  255. package/Tools/OMP_Global_Config/agent/skills/humanizer/examples/after-3.md +60 -0
  256. package/Tools/OMP_Global_Config/agent/skills/humanizer/examples/after-4.md +50 -0
  257. package/Tools/OMP_Global_Config/agent/skills/humanizer/examples/before-1.md +15 -0
  258. package/Tools/OMP_Global_Config/agent/skills/humanizer/examples/before-2.md +27 -0
  259. package/Tools/OMP_Global_Config/agent/skills/humanizer/examples/before-3.md +29 -0
  260. package/Tools/OMP_Global_Config/agent/skills/humanizer/examples/before-4.md +23 -0
  261. package/Tools/OMP_Global_Config/agent/skills/humanizer/references/pos-patterns.md +132 -0
  262. package/Tools/OMP_Global_Config/agent/skills/humanizer/references/punctuation-patterns.md +353 -0
  263. package/Tools/OMP_Global_Config/agent/skills/humanizer/references/spacing-patterns.md +132 -0
  264. package/Tools/OMP_Global_Config/agent/skills/humanizer/references/structure-patterns.md +186 -0
  265. package/Tools/OMP_Global_Config/agent/skills/humanizer/references/translation-ese-patterns.md +641 -0
  266. package/Tools/OMP_Global_Config/agent/skills/humanizer/references/vocabulary-patterns.md +511 -0
  267. package/Tools/OMP_Global_Config/agent/skills/kill-ai-slop/LICENSE +202 -0
  268. package/Tools/OMP_Global_Config/agent/skills/kill-ai-slop/README.md +113 -0
  269. package/Tools/OMP_Global_Config/agent/skills/kill-ai-slop/SKILL.md +121 -0
  270. package/Tools/OMP_Global_Config/agent/skills/kill-ai-slop/references/detection.md +411 -0
  271. package/Tools/OMP_Global_Config/agent/skills/kill-ai-slop/references/fixes.md +368 -0
  272. package/Tools/OMP_Global_Config/agent/skills/kill-ai-slop/references/taxonomy.md +343 -0
  273. package/Tools/OMP_Global_Config/agent/skills/kill-ai-slop/scripts/rules.ru.mjs +23 -0
  274. package/Tools/OMP_Global_Config/agent/skills/kill-ai-slop/scripts/scan.mjs +508 -0
  275. package/Tools/OMP_Global_Config/agent/skills/stop-slop/LICENSE +21 -0
  276. package/Tools/OMP_Global_Config/agent/skills/stop-slop/README.md +62 -0
  277. package/Tools/OMP_Global_Config/agent/skills/stop-slop/SKILL.md +68 -0
  278. package/Tools/OMP_Global_Config/agent/skills/stop-slop/references/examples.md +59 -0
  279. package/Tools/OMP_Global_Config/agent/skills/stop-slop/references/phrases.md +128 -0
  280. package/Tools/OMP_Global_Config/agent/skills/stop-slop/references/structures.md +134 -0
  281. package/package.json +4 -1
  282. package/.next/static/chunks/app/_global-error/page-60d4ba1619c3b27a.js +0 -1
  283. package/.next/static/chunks/app/api/agent/[id]/account/route-60d4ba1619c3b27a.js +0 -1
  284. package/.next/static/chunks/app/api/agent/[id]/bash-output/route-60d4ba1619c3b27a.js +0 -1
  285. package/.next/static/chunks/app/api/agent/[id]/events/route-60d4ba1619c3b27a.js +0 -1
  286. package/.next/static/chunks/app/api/agent/[id]/route-60d4ba1619c3b27a.js +0 -1
  287. package/.next/static/chunks/app/api/agent/new/route-60d4ba1619c3b27a.js +0 -1
  288. package/.next/static/chunks/app/api/agent/running/route-60d4ba1619c3b27a.js +0 -1
  289. package/.next/static/chunks/app/api/attachment-settings/route-60d4ba1619c3b27a.js +0 -1
  290. package/.next/static/chunks/app/api/attachments/[id]/transcription/route-60d4ba1619c3b27a.js +0 -1
  291. package/.next/static/chunks/app/api/attachments/draft/route-60d4ba1619c3b27a.js +0 -1
  292. package/.next/static/chunks/app/api/attachments/route-60d4ba1619c3b27a.js +0 -1
  293. package/.next/static/chunks/app/api/auth/all-providers/route-60d4ba1619c3b27a.js +0 -1
  294. package/.next/static/chunks/app/api/auth/api-key/[provider]/route-60d4ba1619c3b27a.js +0 -1
  295. package/.next/static/chunks/app/api/auth/login/[provider]/route-60d4ba1619c3b27a.js +0 -1
  296. package/.next/static/chunks/app/api/auth/logout/[provider]/route-60d4ba1619c3b27a.js +0 -1
  297. package/.next/static/chunks/app/api/auth/providers/route-60d4ba1619c3b27a.js +0 -1
  298. package/.next/static/chunks/app/api/cwd/browse/route-60d4ba1619c3b27a.js +0 -1
  299. package/.next/static/chunks/app/api/cwd/validate/route-60d4ba1619c3b27a.js +0 -1
  300. package/.next/static/chunks/app/api/default-cwd/route-60d4ba1619c3b27a.js +0 -1
  301. package/.next/static/chunks/app/api/display-settings/route-60d4ba1619c3b27a.js +0 -1
  302. package/.next/static/chunks/app/api/document-text/route-60d4ba1619c3b27a.js +0 -1
  303. package/.next/static/chunks/app/api/experiments/route-60d4ba1619c3b27a.js +0 -1
  304. package/.next/static/chunks/app/api/file-index/route-60d4ba1619c3b27a.js +0 -1
  305. package/.next/static/chunks/app/api/files/[...path]/route-60d4ba1619c3b27a.js +0 -1
  306. package/.next/static/chunks/app/api/git/diff/route-60d4ba1619c3b27a.js +0 -1
  307. package/.next/static/chunks/app/api/git/status/route-60d4ba1619c3b27a.js +0 -1
  308. package/.next/static/chunks/app/api/github/projects/route-60d4ba1619c3b27a.js +0 -1
  309. package/.next/static/chunks/app/api/gpt6/handles/route-60d4ba1619c3b27a.js +0 -1
  310. package/.next/static/chunks/app/api/gpt6/reply/route-60d4ba1619c3b27a.js +0 -1
  311. package/.next/static/chunks/app/api/gpt6/token/route-60d4ba1619c3b27a.js +0 -1
  312. package/.next/static/chunks/app/api/gpt6/web6-session/route-60d4ba1619c3b27a.js +0 -1
  313. package/.next/static/chunks/app/api/home/route-60d4ba1619c3b27a.js +0 -1
  314. package/.next/static/chunks/app/api/live/call/[callId]/route-60d4ba1619c3b27a.js +0 -1
  315. package/.next/static/chunks/app/api/live/events/route-60d4ba1619c3b27a.js +0 -1
  316. package/.next/static/chunks/app/api/live/interpret/cloud/events/route-60d4ba1619c3b27a.js +0 -1
  317. package/.next/static/chunks/app/api/live/interpret/cloud/input/route-60d4ba1619c3b27a.js +0 -1
  318. package/.next/static/chunks/app/api/live/interpret/cloud/route-60d4ba1619c3b27a.js +0 -1
  319. package/.next/static/chunks/app/api/live/interpret/route-60d4ba1619c3b27a.js +0 -1
  320. package/.next/static/chunks/app/api/live/offer/route-60d4ba1619c3b27a.js +0 -1
  321. package/.next/static/chunks/app/api/live/voices/route-60d4ba1619c3b27a.js +0 -1
  322. package/.next/static/chunks/app/api/mcp/route-60d4ba1619c3b27a.js +0 -1
  323. package/.next/static/chunks/app/api/model-roles/route-60d4ba1619c3b27a.js +0 -1
  324. package/.next/static/chunks/app/api/models/route-60d4ba1619c3b27a.js +0 -1
  325. package/.next/static/chunks/app/api/models-config/catalog/route-60d4ba1619c3b27a.js +0 -1
  326. package/.next/static/chunks/app/api/models-config/discover/route-60d4ba1619c3b27a.js +0 -1
  327. package/.next/static/chunks/app/api/models-config/route-60d4ba1619c3b27a.js +0 -1
  328. package/.next/static/chunks/app/api/models-config/test/route-60d4ba1619c3b27a.js +0 -1
  329. package/.next/static/chunks/app/api/plugins/route-60d4ba1619c3b27a.js +0 -1
  330. package/.next/static/chunks/app/api/project-docs/route-60d4ba1619c3b27a.js +0 -1
  331. package/.next/static/chunks/app/api/project-trust/route-60d4ba1619c3b27a.js +0 -1
  332. package/.next/static/chunks/app/api/projects/route-60d4ba1619c3b27a.js +0 -1
  333. package/.next/static/chunks/app/api/runs/[runId]/prelude/route-60d4ba1619c3b27a.js +0 -1
  334. package/.next/static/chunks/app/api/runs/[runId]/route-60d4ba1619c3b27a.js +0 -1
  335. package/.next/static/chunks/app/api/runs/[runId]/turns/route-60d4ba1619c3b27a.js +0 -1
  336. package/.next/static/chunks/app/api/runs/route-60d4ba1619c3b27a.js +0 -1
  337. package/.next/static/chunks/app/api/sessions/[id]/auto-name/route-60d4ba1619c3b27a.js +0 -1
  338. package/.next/static/chunks/app/api/sessions/[id]/context/route-60d4ba1619c3b27a.js +0 -1
  339. package/.next/static/chunks/app/api/sessions/[id]/entries/[entryId]/thinking/route-60d4ba1619c3b27a.js +0 -1
  340. package/.next/static/chunks/app/api/sessions/[id]/export/route-60d4ba1619c3b27a.js +0 -1
  341. package/.next/static/chunks/app/api/sessions/[id]/route-60d4ba1619c3b27a.js +0 -1
  342. package/.next/static/chunks/app/api/sessions/[id]/state/route-60d4ba1619c3b27a.js +0 -1
  343. package/.next/static/chunks/app/api/sessions/route-60d4ba1619c3b27a.js +0 -1
  344. package/.next/static/chunks/app/api/sessions/search/route-60d4ba1619c3b27a.js +0 -1
  345. package/.next/static/chunks/app/api/settings/route-60d4ba1619c3b27a.js +0 -1
  346. package/.next/static/chunks/app/api/sidecars/[service]/[...path]/route-60d4ba1619c3b27a.js +0 -1
  347. package/.next/static/chunks/app/api/skills/check/route-60d4ba1619c3b27a.js +0 -1
  348. package/.next/static/chunks/app/api/skills/install/route-60d4ba1619c3b27a.js +0 -1
  349. package/.next/static/chunks/app/api/skills/route-60d4ba1619c3b27a.js +0 -1
  350. package/.next/static/chunks/app/api/skills/search/route-60d4ba1619c3b27a.js +0 -1
  351. package/.next/static/chunks/app/api/skills/update/route-60d4ba1619c3b27a.js +0 -1
  352. package/.next/static/chunks/app/api/subagents/eta/route-60d4ba1619c3b27a.js +0 -1
  353. package/.next/static/chunks/app/api/theme/route-60d4ba1619c3b27a.js +0 -1
  354. package/.next/static/chunks/app/api/tool-image/route-60d4ba1619c3b27a.js +0 -1
  355. package/.next/static/chunks/app/api/update-maintenance/route-60d4ba1619c3b27a.js +0 -1
  356. package/.next/static/chunks/app/api/updates/route-60d4ba1619c3b27a.js +0 -1
  357. package/.next/static/chunks/app/api/web-access/recovery/route-60d4ba1619c3b27a.js +0 -1
  358. package/.next/static/chunks/app/api/web-access/route-60d4ba1619c3b27a.js +0 -1
  359. package/.next/static/chunks/app/api/web6/consults/route-60d4ba1619c3b27a.js +0 -1
  360. package/.next/static/chunks/app/api/worktrees/route-60d4ba1619c3b27a.js +0 -1
  361. package/.next/static/chunks/app/manifest.webmanifest/route-60d4ba1619c3b27a.js +0 -1
  362. package/.next/static/chunks/app/page-b61cdb3a88126c55.js +0 -75
  363. package/.next/static/chunks/next/dist/client/components/builtin/app-error-60d4ba1619c3b27a.js +0 -1
  364. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-60d4ba1619c3b27a.js +0 -1
  365. package/.next/static/chunks/next/dist/client/components/builtin/not-found-60d4ba1619c3b27a.js +0 -1
  366. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-60d4ba1619c3b27a.js +0 -1
  367. package/.next/static/vdQU0PJ0EqoAWyaBUHRpd/_buildManifest.js +0 -1
  368. /package/.next/static/{vdQU0PJ0EqoAWyaBUHRpd → y4k_8nU4FYWcP7nTP4oCU}/_ssgManifest.js +0 -0
@@ -0,0 +1,343 @@
1
+ # The AI-slop taxonomy
2
+
3
+ 35 tells, in two tiers. **Classic** = widely recognised. **Evolved** = newer
4
+ defaults that already read as templated. For each: what it is, why it reads as
5
+ machine-made, and the fix. Detection patterns live in `detection.md`; code
6
+ patches in `fixes.md`.
7
+
8
+ The rule under every entry: slop is the *absence of a decision*. A tell is only
9
+ slop when it's a default nobody chose. The same element, chosen and defended,
10
+ is fine.
11
+
12
+ ## Color
13
+
14
+ **01 · Indigo→violet gradient** — the `#6366f1 → #a855f7` diagonal on buttons,
15
+ glows, and hero backgrounds. It's the factory setting of Tailwind demos and
16
+ template galleries, so it reads as an absence of a decision.
17
+ *Fix:* one justified accent; if a gradient, give it direction and a reason, not
18
+ a "premium" sticker.
19
+
20
+ **02 · Gradient headline text** — `background-clip:text` rainbow fills on
21
+ headings. Trades legibility and contrast for an effect every AI page uses;
22
+ decoration eats the message.
23
+ *Fix:* solid color for headings; build hierarchy with size, weight, and space.
24
+
25
+ **03 · Warm "cozy" palette** — amber/stone/orange wash on soft beige. The
26
+ model's laziest translation of "warm and friendly": Tailwind's warm ramp served
27
+ raw, so every "human" product looks identical.
28
+ *Fix:* neutral base + one restrained warm accent; warmth comes from words.
29
+
30
+ **04 · The default semantic palette** — info in blue/indigo, tip in amber,
31
+ success in green, error in red: the framework's stock `-50` backgrounds with
32
+ `-600` text. Nobody picked these hues; three or four unrelated candy colors,
33
+ related to nothing — not your brand, not each other. A bowl of default rainbow
34
+ candy where every box shouts a different colour.
35
+ *Fix:* grow semantic colours out of your one palette (tints of a hue plus
36
+ neutrals); colour only the states that truly differ. Most notes need no colour.
37
+
38
+ **05 · The one-hue status box** — a status or alert where the border, text, and
39
+ background are all one hue, the background just a see-through version of it: red
40
+ on red, yellow on yellow, green on green. The framework reflex
41
+ (`border-red-500`, `text-red-500`, `bg-red-500/10`), one loud hue at three
42
+ opacities, nothing toned to sit next to your UI. Red/yellow/green is a traffic
43
+ light, not a palette.
44
+ *Fix:* carry the state in words and weight first — a bold "Error" reads before
45
+ colour does. If you colour at all, one muted accent from your own palette on a
46
+ neutral surface.
47
+
48
+ **06 · Gradients as atmosphere** — a near-black blue page with a soft glow up
49
+ top and cards whose surface is itself a gradient, lighter above and darker
50
+ below: the default "premium dark mode." The glow and surface gradients carry no
51
+ information; it's the move a model makes to look premium in the dark, the same
52
+ midnight blue with a spotlight behind a thousand AI pages. Same family:
53
+ bento cards each washed in a tint of their own accent — the green card gets a
54
+ green gradient, the purple card a purple one — plus repeating-gradient stripes
55
+ as surface decoration, and colored box-shadow glows used as dark-mode accents.
56
+ *Fix:* pick one flat background and hold it; build surface depth with a hairline
57
+ and a restrained shadow. If a glow must exist, let it point at something.
58
+
59
+ ## Type
60
+
61
+ **07 · Serif-italic on one word** — swapping one word in a sans headline to
62
+ serif italic for "emphasis." Cheap drama that stages two voices in one sentence;
63
+ the most viral AI headline tic.
64
+ *Fix:* emphasise with weight, position, or a line break; keep one voice, and if
65
+ you truly need italic use the same family's italic.
66
+
67
+ **08 · Serif where sans belongs** — Playfair/Lora/Cormorant display serif on a
68
+ dev tool or SaaS, as body/UI text or as an oversized italic-serif hero
69
+ headline. The model equates "premium" with "serif"; display serifs are hard to
70
+ read at UI sizes and tonally off, a tuxedo on a terminal. The italic-serif hero
71
+ reads as taste in isolation — by now it's the universal AI-startup landing
72
+ page uniform.
73
+ *Fix:* one legible sans you chose; serif only when you want that voice, and a
74
+ text serif not a display one. Set the hero roman, or use a non-serif display
75
+ face (a genuinely editorial product may keep it — judge by context).
76
+
77
+ **09 · Decorative strikes & highlights** — striking out, underlining, or
78
+ swiping a highlighter over a word, not to delete or annotate but as decorative
79
+ "emphasis." The same disease as serif-emphasis: the model doesn't trust the
80
+ words to carry weight, so it draws on them.
81
+ *Fix:* let weight, size, line breaks, and structure carry emphasis; keep strike
82
+ for real edits, underline for links, highlight for real annotation.
83
+
84
+ **10 · The kicker above every heading** — a tiny uppercase, letter-spaced label
85
+ above the hero headline, then another above every section heading: FEATURES,
86
+ HOW IT WORKS, TESTIMONIALS. The kicker is an editorial device for *adding*
87
+ information (a section, a date, a category); the AI page stamps it as a reflex,
88
+ and the label restates what the heading already says. Zero information, worn as
89
+ a hat on every heading — a template's rhythm, not a decision.
90
+ *Fix:* delete any kicker that restates its heading; keep one only where it adds
91
+ a real dimension. Let scale and space introduce sections.
92
+
93
+ **11 · The full-sentence display headline** — a whole marketing sentence set at
94
+ display size (`text-6xl font-extrabold tracking-tight`), wrapping to three or
95
+ four lines and eating the first viewport. Display sizes are for the two or
96
+ three words that can carry that scale; the model doesn't know which words yours
97
+ are, so it sets the whole pitch huge and crushes the tracking to look
98
+ "designed." Size standing in for the decision about what matters. (The
99
+ killaislop.com site itself did it — its definition section set a whole
100
+ sentence at display size until this entry forced the fix.)
101
+ *Fix:* compress the one thing into a few words and let those be big; say the
102
+ rest in a normal-size subline. Tighten tracking only as far as the face was
103
+ designed to go.
104
+
105
+ **12 · The flat type hierarchy** — every size on the page crammed between 14
106
+ and 18px: headings barely bigger than body, labels barely smaller, hierarchy
107
+ left entirely to shades of gray. The opposite failure of the display-size
108
+ sentence, and the same absence: nobody decided what matters most. The model
109
+ plays it safe (`text-lg` heading, `text-sm` everything else), so a reader
110
+ can't tell the page's one important thing from its footnotes.
111
+ *Fix:* a scale with few steps and real contrast between them (1.25× and up);
112
+ give the most important thing a size that says so. If two sizes are within a
113
+ pixel or two, merge them.
114
+
115
+ ## Copy
116
+
117
+ **13 · Highlighted keywords** — coloring or bolding scattered words
118
+ mid-paragraph, like a highlighter ran over it. When every word is emphasised,
119
+ none is; it's the signature of not knowing the point.
120
+ *Fix:* let sentence structure carry emphasis — at most one accent per paragraph.
121
+
122
+ **14 · The AI copywriting voice** — "It's not just X — it's Y", "Say goodbye to
123
+ X", punchy three-word triads, an em-dash habit, dismissing things as "X
124
+ theater." A rhythmic fingerprint: symmetrical, one notch too excited,
125
+ specifics-free.
126
+ *Fix:* write something specific — real numbers, nouns, consequences; say it the
127
+ way one person explains it to another.
128
+
129
+ **15 · Emoji everywhere** — an emoji on every heading, button, and bullet: 🚀
130
+ launch, ⚡ fast, 🔒 secure, 🎉 delight. Borrowed warmth standing in for tone
131
+ that copy and design should carry; a glyph before every point is louder, not
132
+ clearer.
133
+ *Fix:* cut decorative emoji from the UI; keep one only where it genuinely
134
+ carries information, like a real status.
135
+
136
+ ## Components
137
+
138
+ **16 · The glowing status dot** — a status indicator (online / ready / live)
139
+ drawn as a solid dot in a pale halo, usually pulsing, almost always saturated
140
+ green; at its most decorative, glued into a hero marketing pill, playing status
141
+ for a tagline with no state behind it. A status is a tiny signal; the halo,
142
+ pulse, and breathing glow carry no information. Inflating a binary state into a
143
+ glowing gem is textbook overdesign.
144
+ *Fix:* a small, flat, single-color dot plus a word; no halo, no pulse. Colour
145
+ only when the state actually matters or changes — and if nothing is live behind
146
+ it, no dot at all.
147
+
148
+ **17 · Rounded card, colored left border** — a pale rounded box with a 4px
149
+ colored bar down the left, wrapped around every list item, not just a "Tip/Note"
150
+ but feature points and changelog rows. A docs admonition turned into universal
151
+ decoration, so every row looks like an "important note" and none is. Sibling
152
+ move: a thick accent ring (`border-2` in a loud color) around a rounded card
153
+ to make one tier "pop."
154
+ *Fix:* let a list be a list — alignment, spacing, hierarchy. Callouts are
155
+ scarce: one or two a page, only for a genuine aside.
156
+
157
+ **18 · Rounded-square icon tiles** — every feature gets a rounded-square chip +
158
+ a line icon, tiled into a grid. Shortest path to "looks designed"; the icons
159
+ rarely relate to the content, they just fill the grid. Same reflex at another
160
+ size: a giant decorative line icon (`w-24 h-24`) parked in a card as filler.
161
+ *Fix:* an icon must carry meaning or go; a clear label + one sentence beats a
162
+ row of glyphs.
163
+
164
+ **19 · Max radius + glassmorphism** — everything a max-radius pill; every card a
165
+ translucent `backdrop-blur` pane. A frozen slice of 2021 Dribbble; effect
166
+ presets unrelated to what the product says.
167
+ *Fix:* one radius, held site-wide (usually small); depth from solid surfaces and
168
+ space, not blur.
169
+
170
+ **20 · The oversized drop shadow** — a small card or icon casting a huge, soft
171
+ shadow that bleeds far past it on every side: big blur, low opacity, almost no
172
+ offset. A shadow says how high a surface floats, and real light gives a tight
173
+ contact shadow plus a soft ambient one with the blur tracking the height; this
174
+ one tracks nothing. A big soft blur reads as "depth" in a thumbnail but maps to
175
+ no real height — atmosphere standing in for elevation. Variant: the "ghost
176
+ card," a hairline border *plus* a wide diffuse shadow on the same card — two
177
+ separators doing one job; commit to an edge or an elevation, not both.
178
+ *Fix:* a small elevation scale, held: tight blur, small offset, low opacity,
179
+ never a shadow bigger than the thing casting it. Often a hairline does the
180
+ separating and no shadow is needed; keep it colorless — a tinted glow isn't depth.
181
+
182
+ **21 · Corners that don't nest** — the same radius on every layer: a big-radius
183
+ outer box with an inner box at the same big radius, so the corners don't sit
184
+ concentrically and the inner arc fights the outer one. Nested corners have a
185
+ rule (inner = outer − gap); AI UIs skip the math and stamp one radius token on
186
+ everything.
187
+ *Fix:* compute the nested radius (inner = outer − padding), or don't round the
188
+ inner element at all; keep a small, deliberate radius scale.
189
+
190
+ **22 · The border that dies at the corner** — a rounded rectangle with a 1px
191
+ hairline on its straight edges and nothing at the corners: the outline runs to
192
+ the tangent points and stops, the arcs go naked. It happens because the radius
193
+ and the border live on different boxes. The model memorized a recipe — content
194
+ that can't round its own corners (a table, an image, a list, a scroll area)
195
+ gets wrapped in `rounded-xl overflow-hidden` — while the child component ships
196
+ with its own 1px border or dividers. Every line is locally correct: the
197
+ wrapper owns the radius, the child owns the stroke. But the square stroke ring
198
+ falls outside the rounded clip at all four corners and gets erased; the
199
+ straight runs survive inside the clip. The model never renders its own output,
200
+ so it never sees the corner; a human sees the broken edge in one glance. The
201
+ fingerprint of code that's right line by line and wrong as a whole.
202
+ *Fix:* put the radius and the border on the same box — border + border-radius
203
+ on one element, and the stroke wraps the arc for free. If an outer layer
204
+ genuinely must clip content, move the border up onto the clipping layer too.
205
+ Inverse holds: if the lines are really dividers, keep them straight, run them
206
+ edge to edge, and don't round the fill.
207
+
208
+ **23 · Badge and pill spam** — "✨ New", "β Beta", "🔥 Popular" decorative pills
209
+ everywhere. Manufacturing fake buzz; in bulk each stops meaning anything.
210
+ *Fix:* a badge only for real status (a version, stock).
211
+
212
+ **24 · AI-drawn SVG icons** — asking a model to "draw an icon" and shipping what
213
+ comes back: a round blob with two dot eyes, a mascot of primitive shapes, a logo
214
+ that's a rounded square with a face. Vector art the machine can't really draw,
215
+ used as the product's mark; it looks like placeholder art that never got
216
+ replaced.
217
+ *Fix:* get a real, high-quality icon. Commission a designer, or generate one
218
+ with the best image model and refine it until it's crisp and on-brand. A crude
219
+ SVG the model sketched, or a bare fallback letter, isn't a mark worth shipping.
220
+
221
+ **25 · Icon in a tint of itself** — every icon wrapped in a rounded square
222
+ filled with a see-through tint of its own color: a blue icon on faint blue, a
223
+ green one on faint green (`bg-{color}/10` behind `text-{color}`). A one-line
224
+ reflex — pad, round, wash in 10% of the icon's hue — so the page becomes a grid
225
+ of soft colored squares.
226
+ *Fix:* let an icon just be an icon; inherit the text color, no container. If
227
+ something genuinely needs one, give it a deliberate opaque surface from your
228
+ palette, not a tint of the icon it holds.
229
+
230
+ ## Motion
231
+
232
+ **26 · The springy hover** — every card, button, and image wearing
233
+ `hover:scale-105` and `transition-all`: touch it and it grows, lifts, and
234
+ bounces on an elastic ease. Motion is information — what changed, where a thing
235
+ went, what's interactive — and scaling a card on hover says nothing; the card
236
+ isn't growing, and the user already knows the cursor is on it. `transition-all`
237
+ is the tell inside the tell: animating every property is the absence of
238
+ deciding which one means something.
239
+ *Fix:* transition only the properties that carry the state change (background,
240
+ border, opacity), 120–200ms, standard ease. Hover feedback is a surface shift,
241
+ not growth; save spring physics for things that genuinely move through space.
242
+
243
+ **27 · The wobbling spinner** — a loading spinner that doesn't turn around its
244
+ own centre: the arc wobbles, tracing a little circle as it spins. Off-centre
245
+ artwork, a stray `transform-origin`, or a rotate keyframe that clobbers the
246
+ centering `translate(-50%, -50%)` (a keyframe replaces the whole `transform`).
247
+ A spinner has exactly one job — rotate in place around a fixed point — and
248
+ anyone who runs the page sees the wobble within half a second; shipping it is
249
+ an admission that nobody ever watched the interface move. Other tells are an
250
+ absence of taste; this one is an absence of looking. It lands at the worst
251
+ moment: the user has nothing to do but stare, and the most-watched element on
252
+ the page is limping. "Loading" reads as "broken."
253
+ *Fix:* give the rotation a real centre: artwork centred in its own box (the
254
+ SVG arc centred on the viewBox), `transform-origin` at center, and centering
255
+ kept out of the animated `transform` — position with a wrapper or the
256
+ standalone `rotate` property. Then watch one full revolution.
257
+
258
+ ## Layout
259
+
260
+ **28 · The all-caps card grid** — an ALL-CAPS label plus a number or icon,
261
+ copied into rows of interchangeable cards: feature grids and dashboard
262
+ stat-cards alike. It fakes structure while stuffing unrelated things into
263
+ identical boxes; the ALL-CAPS micro-label is the default costume for "looks
264
+ designed."
265
+ *Fix:* decide the single most important thing and show it fully; if you must
266
+ list, use real hierarchy and contrast, not a grid of equal-weight cards.
267
+
268
+ **29 · The invented stat row** — three big numbers in a row: 10k+ developers,
269
+ 99.9% uptime, 24/7 support, on a product that launched yesterday. Social proof
270
+ turned into a layout, filled whether or not the proof exists; the numbers are
271
+ set dressing (a round 10k+, two nines, a 24/7), not measurements. Real numbers
272
+ are odd and specific — and one invented figure poisons every true one beside it.
273
+ *Fix:* show a number only if you measured it, and say where it came from; one
274
+ real, checkable figure beats three round ones. No numbers yet? Say what the
275
+ product does.
276
+
277
+ **30 · The 01 / 02 / 03 section markers** — a giant faint ordinal beside every
278
+ marketing section (01 Collaborate, 02 Innovate, 03 Scale) as if they were steps
279
+ in a sequence. Numbering is a claim that these things happen in this order;
280
+ feature sections have no order, so the numerals are costume borrowed from
281
+ editorial design where an index means something. The cheapest way to look
282
+ structured without deciding on a structure.
283
+ *Fix:* number what's genuinely ordered — install steps, a changelog, a
284
+ catalogue — and delete the ornamental ordinals everywhere else.
285
+
286
+ **31 · Cards inside cards** — a bordered, rounded, shadowed card holding
287
+ another card holding another, every layer with its own surface and padding. A
288
+ card claims its content is one self-contained thing; nested three deep, nothing
289
+ is contained and the padding stacks until content is a sliver. The model boxes
290
+ because a box is the only grouping move it trusts — grouping by spacing and
291
+ alignment requires deciding what belongs together.
292
+ *Fix:* one surface per region; inside it, group with spacing, alignment, and
293
+ hairline dividers. A child earns its own surface only when it's genuinely a
294
+ separate object (a preview, an embed).
295
+
296
+ **32 · One gap everywhere** — `gap-4`, `p-4`, `space-y-4`: one spacing value
297
+ stamped across the page, so a heading sits exactly as far from its own body as
298
+ from the previous, unrelated section. Spacing is how a layout says what belongs
299
+ together — tight inside a group, generous between groups. One value everywhere
300
+ announces that nothing belongs to anything; proximity stops carrying
301
+ information, and the eye has to read every line to find the structure.
302
+ *Fix:* space by relationship, not by token: pull related lines close, push
303
+ unrelated groups apart. A small scale with real jumps (4/8/16/32/64), used
304
+ unevenly on purpose.
305
+
306
+ ## Evolved slop
307
+
308
+ **33 · Inter everywhere** — Space Grotesk for display, Inter for body; or
309
+ Geist, Manrope, Plus Jakarta Sans. Every AI-built page draws from the same five
310
+ faces. They're good typefaces — that's the trap: the model reaches for them
311
+ because everyone did, and every product wearing them dissolves into the same
312
+ page. A typeface is the loudest single signal of who made this; outsourcing it
313
+ to the training-data average dodges the identity decision the way the indigo
314
+ gradient dodged the color one.
315
+ *Fix:* choose a face the way you'd choose a logo — try a few, set your own copy
316
+ in each, be able to say why this one. Landing back on Inter after that is a
317
+ choice; starting there isn't. (A system stack, picked for a reason, is a choice
318
+ too.)
319
+
320
+ **34 · The "tasteful terminal"** — mono everywhere, a near-black background, one
321
+ warm accent, ASCII art: the look of "an AI that read one Vercel blog post." It
322
+ isn't ugly, that's the trap; it's polished enough to have become the new
323
+ default, dodging the design decision exactly like the indigo gradient did, in
324
+ cooler clothing.
325
+ *Fix:* keep monospace for code, not UI chrome; use ASCII art and terminal
326
+ metaphors only where they serve the product. Real taste is a choice you can
327
+ explain, not this season's safest template.
328
+
329
+ **35 · The editorial dashboard** — an operational UI dressed as a magazine: a
330
+ giant serif "Good evening" greeting, serif numerals in the stat cards, cream
331
+ paper, a tracked-caps kicker over every block. The second-wave uniform:
332
+ scolded out of indigo gradients, the model's new shorthand for "taste" is
333
+ cream + display serif + one deep accent, stamped on any surface regardless of
334
+ its job. The greeting is lifted from a chat assistant's home screen, where the
335
+ greeting is the content; a dashboard's content is its numbers, and display
336
+ serifs with proportional oldstyle figures are prose type — the numerals you
337
+ can't scan down a column. A magazine is read once; a console is scanned all
338
+ day.
339
+ *Fix:* match the type to the job — a scanned interface takes a legible sans
340
+ with tabular lining numerals, hierarchy from scale and space. Display serif
341
+ belongs to genuinely editorial surfaces (docs, essays, a magazine). For
342
+ warmth, one material decision — a paper tint or an ink accent — not the full
343
+ costume.
@@ -0,0 +1,23 @@
1
+ // Example --rules module: Russian AI-copywriting tells.
2
+ //
3
+ // node scan.mjs <root> --rules=path/to/rules.ru.mjs
4
+ //
5
+ // Each entry has the same shape as a core tell in scan.mjs. Patterns may be
6
+ // RegExp or plain strings (strings are compiled case-insensitive). `copy: true`
7
+ // means the tell also reads prose (.md), not only code. Use this file as the
8
+ // template for your own language- or stack-specific rules.
9
+ //
10
+ // Note: JavaScript's \b is ASCII-only and never matches next to Cyrillic
11
+ // letters — write plain substrings or explicit boundaries instead.
12
+ export default [
13
+ { id: "ru-14", group: "copy", name: "русский AI-слог", fix: "скажите конкретную вещь",
14
+ copy: true,
15
+ patterns: [
16
+ /не просто .{1,40}?[—–-]\s*это/iu,
17
+ /попрощайтесь с|забудьте о том|представьте себе мир/iu,
18
+ /молниеносн|бесшовн|безупречн|революционн|беспрецедентн/iu,
19
+ /раскройте (?:весь )?потенциал/iu,
20
+ /выведите .{1,30} на новый уровень/iu,
21
+ /в считанные секунды/iu,
22
+ ] },
23
+ ];