lazycodex-ai 5.1.51 → 5.1.55

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 (554) hide show
  1. package/dist/cli/index.js +1174 -394
  2. package/dist/cli/service-auth/credential-lock.d.ts +11 -0
  3. package/dist/cli/service-auth/credential-owner.d.ts +10 -0
  4. package/dist/cli/service-auth/index.d.ts +3 -1
  5. package/dist/cli/service-auth/keystore.d.ts +8 -1
  6. package/dist/cli/service-auth/owned-refresh.d.ts +21 -0
  7. package/dist/cli/service-auth/protocol-v2.d.ts +27 -0
  8. package/dist/cli/service-auth/protocol.d.ts +26 -2
  9. package/dist/cli/service-auth/recovery-clock.d.ts +7 -0
  10. package/dist/cli/service-auth/refresh-attempt.d.ts +34 -0
  11. package/dist/cli/service-auth/session.d.ts +9 -2
  12. package/dist/cli-node/index.js +1174 -394
  13. package/package.json +2 -1
  14. package/packages/lsp-core/src/lsp/config-loader.ts +18 -2
  15. package/packages/lsp-core/src/lsp/host-js-runtime.test.ts +150 -0
  16. package/packages/lsp-core/src/lsp/host-js-runtime.ts +57 -0
  17. package/packages/lsp-core/src/lsp/server-definitions.ts +10 -0
  18. package/packages/lsp-core/src/lsp/server-resolution.ts +9 -1
  19. package/packages/lsp-core/src/lsp/typescript-server-defaults.test.ts +84 -0
  20. package/packages/lsp-daemon/dist/cli.js +81 -15
  21. package/packages/lsp-daemon/dist/client.js +74 -8
  22. package/packages/lsp-daemon/dist/index.js +76 -10
  23. package/packages/lsp-tools-mcp/dist/cli.js +74 -8
  24. package/packages/lsp-tools-mcp/dist/mcp.js +74 -8
  25. package/packages/lsp-tools-mcp/dist/tools.js +74 -8
  26. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  27. package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +22 -4
  28. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  29. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  30. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  31. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  32. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  33. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  34. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  35. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  36. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +3 -3
  37. package/packages/omo-codex/plugin/components/lsp/dist/cli.js +77 -13
  38. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  39. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  40. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  41. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  42. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  43. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  44. package/packages/omo-codex/plugin/components/telemetry/dist/cli.js +34 -2
  45. package/packages/omo-codex/plugin/components/telemetry/dist/posthog.js +34 -2
  46. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  47. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  48. package/packages/omo-codex/plugin/components/telemetry/test/codex-hook.test.ts +14 -1
  49. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  50. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  51. package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +1 -1
  52. package/packages/omo-codex/plugin/components/ulw-execute-continuation/package.json +1 -1
  53. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +5 -5
  54. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  55. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  56. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  57. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  58. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  59. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  60. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  61. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  62. package/packages/omo-codex/plugin/hooks/post-tool-use-recording-spawn-admission.json +1 -1
  63. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  64. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  65. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  66. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  67. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  68. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  69. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  70. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +1 -1
  71. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  72. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  73. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  74. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  75. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  76. package/packages/omo-codex/plugin/package-lock.json +12 -12
  77. package/packages/omo-codex/plugin/package.json +1 -1
  78. package/packages/omo-codex/plugin/scripts/auto-update-plan.mjs +16 -1
  79. package/packages/omo-codex/plugin/skills/browser/runtime/omowright/index.js +24 -33
  80. package/packages/omo-codex/plugin/skills/browser/runtime/omowright/manifest.json +3 -3
  81. package/packages/omo-codex/plugin/skills/frontend/ATTRIBUTION.md +104 -1
  82. package/packages/omo-codex/plugin/skills/frontend/SKILL.md +7 -3
  83. package/packages/omo-codex/plugin/skills/frontend/references/design/design-system-architecture.md +3 -3
  84. package/packages/omo-codex/plugin/skills/frontend/references/perfection/craft-floor.md +59 -0
  85. package/packages/omo-codex/plugin/skills/frontend/references/perfection/detect.md +52 -0
  86. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/cli.ts +70 -0
  87. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/config.ts +53 -0
  88. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/core/characters.ts +2 -0
  89. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/core/color.ts +150 -0
  90. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/core/page.ts +84 -0
  91. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/core/shadow.ts +40 -0
  92. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/core/source.ts +33 -0
  93. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/detect.ts +77 -0
  94. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/index.ts +23 -0
  95. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/lint.ts +98 -0
  96. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/render/probe-placement.ts +50 -0
  97. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/render/renderer.ts +37 -0
  98. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/render/webview.ts +71 -0
  99. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/report.ts +29 -0
  100. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rule.ts +42 -0
  101. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/ai-color-palette.ts +83 -0
  102. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/cream-palette.ts +35 -0
  103. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/dark-glow.ts +44 -0
  104. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/design-system-color.ts +35 -0
  105. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/gradient-text.ts +59 -0
  106. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/gray-on-color.ts +38 -0
  107. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/index.ts +15 -0
  108. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/low-contrast.ts +57 -0
  109. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/radial-halo.ts +31 -0
  110. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/radial-spotlight-glow.ts +33 -0
  111. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/support/animation-opacity.ts +78 -0
  112. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/support/color-path.ts +15 -0
  113. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/support/contrast-pairs.ts +54 -0
  114. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/support/contrast-role.ts +76 -0
  115. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/support/glow-forms.ts +56 -0
  116. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/support/gradient-samples.ts +134 -0
  117. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/support/gradients.ts +91 -0
  118. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/support/mockup-roots.ts +63 -0
  119. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/support/page-ignore.ts +7 -0
  120. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/support/painted-text.ts +141 -0
  121. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/support/palette-roles.ts +58 -0
  122. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/support/placeholder-contrast.ts +25 -0
  123. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/support/stock-accent.ts +31 -0
  124. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/support/text-colors.ts +80 -0
  125. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/copy/aphoristic-cadence.ts +20 -0
  126. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/copy/broken-image.ts +17 -0
  127. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/copy/em-dash-overuse.ts +46 -0
  128. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/copy/index.ts +15 -0
  129. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/copy/marketing-buzzword.ts +33 -0
  130. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/copy/numbered-section-labels.ts +34 -0
  131. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/copy/repeated-container-text.ts +56 -0
  132. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/copy/script-error.ts +38 -0
  133. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/copy/skipped-heading.ts +81 -0
  134. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/copy/support/numbered-label.ts +94 -0
  135. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/copy/support/page-text.ts +37 -0
  136. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/copy/theater-slop-phrase.ts +21 -0
  137. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/blinking-cursor.ts +48 -0
  138. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/border-accent-on-rounded.ts +14 -0
  139. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/bounce-easing.ts +83 -0
  140. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/buried-raster.ts +72 -0
  141. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/codex-grid-background.ts +34 -0
  142. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/design-system-radius.ts +31 -0
  143. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/gpt-thin-border-wide-shadow.ts +66 -0
  144. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/hard-offset-shadow.ts +31 -0
  145. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/hero-eyebrow-chip.ts +19 -0
  146. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/icon-tile-stack.ts +92 -0
  147. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/index.ts +38 -0
  148. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/kicker-above-heading.ts +69 -0
  149. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/marquee.ts +51 -0
  150. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/organic-clip-path.ts +41 -0
  151. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/pulsing-dot.ts +72 -0
  152. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/repeating-stripes-gradient.ts +25 -0
  153. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/shape-assembled-illustration.ts +58 -0
  154. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/side-tab.ts +17 -0
  155. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/support/appearance.ts +110 -0
  156. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/support/assert-cases.ts +25 -0
  157. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/support/borders.ts +150 -0
  158. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/support/clip-geometry.ts +151 -0
  159. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/support/css-candidates.ts +66 -0
  160. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/support/curve-samples.ts +55 -0
  161. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/support/gradient-pattern.ts +40 -0
  162. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/support/keyframes.ts +134 -0
  163. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/support/labels.ts +85 -0
  164. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/support/raster-state.ts +51 -0
  165. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/index.ts +16 -0
  166. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/body-text-viewport-edge.ts +62 -0
  167. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/clipped-overflow-container.ts +15 -0
  168. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/content-hidden-at-rest.ts +63 -0
  169. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/cramped-padding.ts +97 -0
  170. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/edge-flush-cards.ts +47 -0
  171. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/first-viewport-column-overflow.ts +43 -0
  172. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/heading-rhythm.ts +30 -0
  173. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/index.ts +21 -0
  174. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/monotonous-spacing.ts +32 -0
  175. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/nested-cards.ts +38 -0
  176. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/straggler.ts +28 -0
  177. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/support/cards.ts +114 -0
  178. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/support/clipping.ts +71 -0
  179. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/support/declared-mockups.ts +46 -0
  180. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/support/geometry.ts +73 -0
  181. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/support/hidden-interface.ts +35 -0
  182. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/support/layout-cases.ts +23 -0
  183. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/support/line-breaks.ts +32 -0
  184. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/support/motion.ts +77 -0
  185. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/support/padding.ts +93 -0
  186. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/support/rhythm.ts +161 -0
  187. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/text-occlusion.ts +84 -0
  188. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/text-overflow.ts +72 -0
  189. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/unbalanced-heading.ts +22 -0
  190. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/viewport-reflow.ts +33 -0
  191. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/ai-color-palette.ts +11 -0
  192. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/aphoristic-cadence.ts +14 -0
  193. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/border-accent-on-rounded.ts +20 -0
  194. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/bounce-easing.ts +21 -0
  195. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/broken-image.ts +16 -0
  196. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/codex-grid-background.ts +18 -0
  197. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/dark-glow.ts +21 -0
  198. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/em-dash-overuse.ts +15 -0
  199. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/gradient-text.ts +11 -0
  200. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/gray-on-color.ts +13 -0
  201. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/index.ts +19 -0
  202. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/marketing-buzzword.ts +17 -0
  203. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/marquee.ts +12 -0
  204. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/monotonous-spacing.ts +22 -0
  205. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/overused-font.ts +16 -0
  206. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/radial-halo.ts +14 -0
  207. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/side-tab.ts +58 -0
  208. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/support/accent-scans.ts +78 -0
  209. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/support/check-source.ts +6 -0
  210. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/support/corners.ts +105 -0
  211. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/support/css-effects.ts +81 -0
  212. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/support/css-scopes.ts +131 -0
  213. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/support/image-tags.ts +113 -0
  214. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/support/js-punctuation.ts +34 -0
  215. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/support/markup-scope.ts +44 -0
  216. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/support/source-color.ts +42 -0
  217. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/support/source-shadow.ts +15 -0
  218. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/support/source-text.ts +110 -0
  219. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/all-caps-body.ts +15 -0
  220. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/design-system-font-size.ts +23 -0
  221. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/design-system-font.ts +24 -0
  222. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/extreme-negative-tracking.ts +18 -0
  223. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/flat-type-hierarchy.ts +26 -0
  224. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/index.ts +21 -0
  225. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/italic-serif-display.ts +24 -0
  226. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/justified-text.ts +32 -0
  227. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/line-length.ts +28 -0
  228. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/oversized-h1.ts +20 -0
  229. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/overused-font.ts +45 -0
  230. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/support/drawn-enlargement.ts +48 -0
  231. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/support/fading-text.ts +48 -0
  232. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/support/flex-runs.ts +16 -0
  233. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/support/font-family.ts +28 -0
  234. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/support/painted-text.ts +81 -0
  235. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/support/svg-size.ts +57 -0
  236. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/support/text-context.ts +112 -0
  237. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/support/text-lines.ts +43 -0
  238. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/support/type-hierarchy.ts +48 -0
  239. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/tight-leading.ts +47 -0
  240. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/tiny-text.ts +23 -0
  241. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/undersized-ui-text.ts +28 -0
  242. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/wide-tracking.ts +26 -0
  243. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/snapshot/collect.ts +158 -0
  244. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/snapshot/style-props.ts +25 -0
  245. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/testing/build-snapshot.ts +78 -0
  246. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/tsconfig.json +19 -0
  247. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/types.ts +124 -0
  248. package/packages/omo-codex/plugin/skills/programming/SKILL.md +17 -74
  249. package/packages/omo-codex/plugin/skills/programming/references/go/README.md +1 -1
  250. package/packages/omo-codex/plugin/skills/programming/references/go/bootstrap.md +2 -2
  251. package/packages/omo-codex/plugin/skills/programming/references/python/README.md +4 -4
  252. package/packages/omo-codex/plugin/skills/programming/references/python/one-liners.md +5 -5
  253. package/packages/omo-codex/plugin/skills/programming/references/testing/README.md +82 -0
  254. package/packages/omo-codex/plugin/skills/programming/references/testing/junk-classes.md +56 -0
  255. package/packages/omo-codex/plugin/skills/programming/references/typescript/README.md +1 -2
  256. package/packages/omo-codex/plugin/skills/programming/scripts/go/new-project.ts +197 -0
  257. package/packages/omo-codex/plugin/skills/programming/scripts/python/new-project.ts +231 -0
  258. package/packages/omo-codex/plugin/skills/programming/scripts/python/new-script.ts +134 -0
  259. package/packages/omo-codex/plugin/skills/programming/scripts/rust/new-project.ts +215 -0
  260. package/packages/omo-codex/plugin/skills/programming/scripts/shared/run-tool.ts +19 -0
  261. package/packages/omo-codex/plugin/skills/programming/scripts/typescript/check-test-junk-rules.ts +140 -0
  262. package/packages/omo-codex/plugin/skills/programming/scripts/typescript/check-test-junk.ts +148 -0
  263. package/packages/omo-codex/plugin/skills/programming/scripts/typescript/mutation-proof.ts +179 -0
  264. package/packages/omo-codex/plugin/skills/remove-ai-slops/SKILL.md +32 -20
  265. package/packages/omo-codex/plugin/skills/ulw-research/scripts/source-commands.mjs +3 -1
  266. package/packages/omo-codex/plugin/skills/visual-qa/SKILL.md +12 -1
  267. package/packages/omo-codex/plugin/test/auto-update.test.mjs +62 -0
  268. package/packages/omo-codex/plugin/test/payload-equivalence.test.mjs +12 -2
  269. package/packages/omo-codex/scripts/install-dist/install-local.mjs +79 -10
  270. package/packages/shared-skills/skills/browser/runtime/omowright/index.js +24 -33
  271. package/packages/shared-skills/skills/browser/runtime/omowright/manifest.json +3 -3
  272. package/packages/shared-skills/skills/frontend/ATTRIBUTION.md +104 -1
  273. package/packages/shared-skills/skills/frontend/SKILL.md +7 -3
  274. package/packages/shared-skills/skills/frontend/references/design/design-system-architecture.md +3 -3
  275. package/packages/shared-skills/skills/frontend/references/perfection/craft-floor.md +59 -0
  276. package/packages/shared-skills/skills/frontend/references/perfection/detect.md +52 -0
  277. package/packages/shared-skills/skills/frontend/scripts/detect/cli.ts +70 -0
  278. package/packages/shared-skills/skills/frontend/scripts/detect/config.test.ts +26 -0
  279. package/packages/shared-skills/skills/frontend/scripts/detect/config.ts +53 -0
  280. package/packages/shared-skills/skills/frontend/scripts/detect/core/characters.ts +2 -0
  281. package/packages/shared-skills/skills/frontend/scripts/detect/core/color.test.ts +29 -0
  282. package/packages/shared-skills/skills/frontend/scripts/detect/core/color.ts +150 -0
  283. package/packages/shared-skills/skills/frontend/scripts/detect/core/page.ts +84 -0
  284. package/packages/shared-skills/skills/frontend/scripts/detect/core/shadow.ts +40 -0
  285. package/packages/shared-skills/skills/frontend/scripts/detect/core/source.ts +33 -0
  286. package/packages/shared-skills/skills/frontend/scripts/detect/detect.ts +77 -0
  287. package/packages/shared-skills/skills/frontend/scripts/detect/index.ts +23 -0
  288. package/packages/shared-skills/skills/frontend/scripts/detect/lint.test.ts +27 -0
  289. package/packages/shared-skills/skills/frontend/scripts/detect/lint.ts +98 -0
  290. package/packages/shared-skills/skills/frontend/scripts/detect/render/probe-placement.test.ts +19 -0
  291. package/packages/shared-skills/skills/frontend/scripts/detect/render/probe-placement.ts +50 -0
  292. package/packages/shared-skills/skills/frontend/scripts/detect/render/renderer.ts +37 -0
  293. package/packages/shared-skills/skills/frontend/scripts/detect/render/webview.ts +71 -0
  294. package/packages/shared-skills/skills/frontend/scripts/detect/report.ts +29 -0
  295. package/packages/shared-skills/skills/frontend/scripts/detect/rule.ts +42 -0
  296. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/ai-color-palette.test.ts +74 -0
  297. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/ai-color-palette.ts +83 -0
  298. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/cream-palette.test.ts +24 -0
  299. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/cream-palette.ts +35 -0
  300. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/dark-glow.test.ts +47 -0
  301. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/dark-glow.ts +44 -0
  302. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/design-system-color.test.ts +26 -0
  303. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/design-system-color.ts +35 -0
  304. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/gradient-text.test.ts +24 -0
  305. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/gradient-text.ts +59 -0
  306. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/gray-on-color.test.ts +39 -0
  307. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/gray-on-color.ts +38 -0
  308. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/index.ts +15 -0
  309. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/low-contrast.test.ts +209 -0
  310. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/low-contrast.ts +57 -0
  311. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/placeholder-contrast.test.ts +62 -0
  312. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/radial-halo.test.ts +40 -0
  313. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/radial-halo.ts +31 -0
  314. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/radial-spotlight-glow.test.ts +27 -0
  315. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/radial-spotlight-glow.ts +33 -0
  316. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/support/animation-opacity.ts +78 -0
  317. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/support/color-path.ts +15 -0
  318. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/support/contrast-pairs.ts +54 -0
  319. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/support/contrast-role.ts +76 -0
  320. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/support/glow-forms.ts +56 -0
  321. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/support/gradient-samples.ts +134 -0
  322. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/support/gradients.ts +91 -0
  323. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/support/mockup-roots.ts +63 -0
  324. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/support/page-ignore.ts +7 -0
  325. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/support/painted-text.ts +141 -0
  326. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/support/palette-roles.ts +58 -0
  327. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/support/placeholder-contrast.ts +25 -0
  328. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/support/stock-accent.ts +31 -0
  329. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/support/text-colors.ts +80 -0
  330. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/aphoristic-cadence.test.ts +18 -0
  331. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/aphoristic-cadence.ts +20 -0
  332. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/broken-image.test.ts +25 -0
  333. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/broken-image.ts +17 -0
  334. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/em-dash-overuse.test.ts +39 -0
  335. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/em-dash-overuse.ts +46 -0
  336. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/index.ts +15 -0
  337. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/marketing-buzzword.test.ts +18 -0
  338. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/marketing-buzzword.ts +33 -0
  339. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/numbered-section-labels.test.ts +58 -0
  340. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/numbered-section-labels.ts +34 -0
  341. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/repeated-container-text.test.ts +43 -0
  342. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/repeated-container-text.ts +56 -0
  343. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/script-error.test.ts +48 -0
  344. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/script-error.ts +38 -0
  345. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/skipped-heading.test.ts +49 -0
  346. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/skipped-heading.ts +81 -0
  347. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/support/numbered-label.ts +94 -0
  348. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/support/page-text.ts +37 -0
  349. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/theater-slop-phrase.test.ts +17 -0
  350. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/theater-slop-phrase.ts +21 -0
  351. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/blinking-cursor.test.ts +43 -0
  352. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/blinking-cursor.ts +48 -0
  353. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/border-accent-on-rounded.test.ts +33 -0
  354. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/border-accent-on-rounded.ts +14 -0
  355. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/bounce-easing.test.ts +72 -0
  356. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/bounce-easing.ts +83 -0
  357. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/buried-raster.test.ts +95 -0
  358. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/buried-raster.ts +72 -0
  359. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/codex-grid-background.test.ts +28 -0
  360. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/codex-grid-background.ts +34 -0
  361. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/design-system-radius.test.ts +37 -0
  362. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/design-system-radius.ts +31 -0
  363. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/gpt-thin-border-wide-shadow.test.ts +59 -0
  364. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/gpt-thin-border-wide-shadow.ts +66 -0
  365. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/hard-offset-shadow.test.ts +45 -0
  366. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/hard-offset-shadow.ts +31 -0
  367. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/hero-eyebrow-chip.test.ts +76 -0
  368. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/hero-eyebrow-chip.ts +19 -0
  369. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/icon-tile-stack.test.ts +67 -0
  370. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/icon-tile-stack.ts +92 -0
  371. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/index.ts +38 -0
  372. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/kicker-above-heading.test.ts +126 -0
  373. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/kicker-above-heading.ts +69 -0
  374. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/marquee.test.ts +63 -0
  375. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/marquee.ts +51 -0
  376. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/organic-clip-path.test.ts +67 -0
  377. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/organic-clip-path.ts +41 -0
  378. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/pulsing-dot.test.ts +58 -0
  379. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/pulsing-dot.ts +72 -0
  380. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/repeating-stripes-gradient.test.ts +26 -0
  381. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/repeating-stripes-gradient.ts +25 -0
  382. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/shape-assembled-illustration.test.ts +59 -0
  383. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/shape-assembled-illustration.ts +58 -0
  384. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/side-tab.test.ts +91 -0
  385. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/side-tab.ts +17 -0
  386. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/support/appearance.ts +110 -0
  387. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/support/assert-cases.ts +25 -0
  388. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/support/borders.ts +150 -0
  389. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/support/clip-geometry.ts +151 -0
  390. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/support/css-candidates.ts +66 -0
  391. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/support/curve-samples.ts +55 -0
  392. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/support/gradient-pattern.ts +40 -0
  393. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/support/keyframes.ts +134 -0
  394. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/support/labels.ts +85 -0
  395. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/support/raster-state.ts +51 -0
  396. package/packages/shared-skills/skills/frontend/scripts/detect/rules/index.ts +16 -0
  397. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/body-text-viewport-edge.test.ts +64 -0
  398. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/body-text-viewport-edge.ts +62 -0
  399. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/clipped-overflow-container.test.ts +40 -0
  400. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/clipped-overflow-container.ts +15 -0
  401. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/content-hidden-at-rest.test.ts +62 -0
  402. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/content-hidden-at-rest.ts +63 -0
  403. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/cramped-padding.test.ts +61 -0
  404. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/cramped-padding.ts +97 -0
  405. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/edge-flush-cards.test.ts +43 -0
  406. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/edge-flush-cards.ts +47 -0
  407. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/first-viewport-column-overflow.test.ts +28 -0
  408. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/first-viewport-column-overflow.ts +43 -0
  409. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/heading-rhythm.test.ts +67 -0
  410. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/heading-rhythm.ts +30 -0
  411. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/index.ts +21 -0
  412. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/monotonous-spacing.test.ts +19 -0
  413. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/monotonous-spacing.ts +32 -0
  414. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/nested-cards.test.ts +60 -0
  415. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/nested-cards.ts +38 -0
  416. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/straggler.test.ts +33 -0
  417. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/straggler.ts +28 -0
  418. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/support/cards.ts +114 -0
  419. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/support/clipping.ts +71 -0
  420. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/support/declared-mockups.ts +46 -0
  421. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/support/geometry.ts +73 -0
  422. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/support/hidden-interface.ts +35 -0
  423. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/support/layout-cases.ts +23 -0
  424. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/support/line-breaks.ts +32 -0
  425. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/support/motion.ts +77 -0
  426. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/support/padding.ts +93 -0
  427. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/support/rhythm.ts +161 -0
  428. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/text-occlusion.test.ts +37 -0
  429. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/text-occlusion.ts +84 -0
  430. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/text-overflow.test.ts +83 -0
  431. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/text-overflow.ts +72 -0
  432. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/unbalanced-heading.test.ts +22 -0
  433. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/unbalanced-heading.ts +22 -0
  434. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/viewport-reflow.test.ts +34 -0
  435. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/viewport-reflow.ts +33 -0
  436. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/ai-color-palette.test.ts +13 -0
  437. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/ai-color-palette.ts +11 -0
  438. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/aphoristic-cadence.test.ts +12 -0
  439. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/aphoristic-cadence.ts +14 -0
  440. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/border-accent-on-rounded.test.ts +14 -0
  441. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/border-accent-on-rounded.ts +20 -0
  442. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/bounce-easing.test.ts +19 -0
  443. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/bounce-easing.ts +21 -0
  444. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/broken-image.test.ts +27 -0
  445. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/broken-image.ts +16 -0
  446. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/codex-grid-background.test.ts +11 -0
  447. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/codex-grid-background.ts +18 -0
  448. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/dark-glow.test.ts +15 -0
  449. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/dark-glow.ts +21 -0
  450. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/em-dash-overuse.test.ts +13 -0
  451. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/em-dash-overuse.ts +15 -0
  452. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/gradient-text.test.ts +12 -0
  453. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/gradient-text.ts +11 -0
  454. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/gray-on-color.test.ts +20 -0
  455. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/gray-on-color.ts +13 -0
  456. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/index.ts +19 -0
  457. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/marketing-buzzword.test.ts +12 -0
  458. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/marketing-buzzword.ts +17 -0
  459. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/marquee.test.ts +12 -0
  460. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/marquee.ts +12 -0
  461. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/monotonous-spacing.test.ts +13 -0
  462. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/monotonous-spacing.ts +22 -0
  463. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/overused-font.test.ts +21 -0
  464. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/overused-font.ts +16 -0
  465. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/radial-halo.test.ts +16 -0
  466. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/radial-halo.ts +14 -0
  467. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/side-tab.test.ts +29 -0
  468. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/side-tab.ts +58 -0
  469. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/support/accent-scans.ts +78 -0
  470. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/support/check-source.ts +6 -0
  471. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/support/corners.ts +105 -0
  472. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/support/css-effects.ts +81 -0
  473. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/support/css-scopes.ts +131 -0
  474. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/support/image-tags.ts +113 -0
  475. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/support/js-punctuation.ts +34 -0
  476. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/support/markup-scope.ts +44 -0
  477. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/support/source-color.ts +42 -0
  478. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/support/source-shadow.ts +15 -0
  479. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/support/source-text.ts +110 -0
  480. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/all-caps-body.test.ts +24 -0
  481. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/all-caps-body.ts +15 -0
  482. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/design-system-font-size.test.ts +21 -0
  483. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/design-system-font-size.ts +23 -0
  484. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/design-system-font.test.ts +22 -0
  485. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/design-system-font.ts +24 -0
  486. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/extreme-negative-tracking.test.ts +23 -0
  487. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/extreme-negative-tracking.ts +18 -0
  488. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/flat-type-hierarchy.test.ts +33 -0
  489. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/flat-type-hierarchy.ts +26 -0
  490. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/index.ts +21 -0
  491. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/italic-serif-display.test.ts +24 -0
  492. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/italic-serif-display.ts +24 -0
  493. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/justified-text.test.ts +31 -0
  494. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/justified-text.ts +32 -0
  495. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/line-length.test.ts +43 -0
  496. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/line-length.ts +28 -0
  497. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/oversized-h1.test.ts +26 -0
  498. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/oversized-h1.ts +20 -0
  499. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/overused-font.test.ts +35 -0
  500. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/overused-font.ts +45 -0
  501. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/support/drawn-enlargement.ts +48 -0
  502. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/support/fading-text.ts +48 -0
  503. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/support/flex-runs.ts +16 -0
  504. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/support/font-family.ts +28 -0
  505. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/support/painted-text.test.ts +63 -0
  506. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/support/painted-text.ts +81 -0
  507. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/support/svg-size.ts +57 -0
  508. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/support/text-context.ts +112 -0
  509. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/support/text-lines.ts +43 -0
  510. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/support/type-hierarchy.ts +48 -0
  511. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/tight-leading.test.ts +54 -0
  512. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/tight-leading.ts +47 -0
  513. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/tiny-text.test.ts +60 -0
  514. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/tiny-text.ts +23 -0
  515. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/undersized-ui-text.test.ts +98 -0
  516. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/undersized-ui-text.ts +28 -0
  517. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/wide-tracking.test.ts +26 -0
  518. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/wide-tracking.ts +26 -0
  519. package/packages/shared-skills/skills/frontend/scripts/detect/snapshot/collect.ts +158 -0
  520. package/packages/shared-skills/skills/frontend/scripts/detect/snapshot/style-props.ts +25 -0
  521. package/packages/shared-skills/skills/frontend/scripts/detect/testing/build-snapshot.ts +78 -0
  522. package/packages/shared-skills/skills/frontend/scripts/detect/tsconfig.json +19 -0
  523. package/packages/shared-skills/skills/frontend/scripts/detect/types.ts +124 -0
  524. package/packages/shared-skills/skills/programming/SKILL.md +17 -74
  525. package/packages/shared-skills/skills/programming/references/go/README.md +1 -1
  526. package/packages/shared-skills/skills/programming/references/go/bootstrap.md +2 -2
  527. package/packages/shared-skills/skills/programming/references/python/README.md +4 -4
  528. package/packages/shared-skills/skills/programming/references/python/one-liners.md +5 -5
  529. package/packages/shared-skills/skills/programming/references/testing/README.md +82 -0
  530. package/packages/shared-skills/skills/programming/references/testing/junk-classes.md +56 -0
  531. package/packages/shared-skills/skills/programming/references/typescript/README.md +1 -2
  532. package/packages/shared-skills/skills/programming/scripts/go/new-project.ts +197 -0
  533. package/packages/shared-skills/skills/programming/scripts/python/new-project.ts +231 -0
  534. package/packages/shared-skills/skills/programming/scripts/python/new-script.ts +134 -0
  535. package/packages/shared-skills/skills/programming/scripts/rust/new-project.ts +215 -0
  536. package/packages/shared-skills/skills/programming/scripts/scaffolders.test.ts +96 -0
  537. package/packages/shared-skills/skills/programming/scripts/shared/run-tool.ts +19 -0
  538. package/packages/shared-skills/skills/programming/scripts/typescript/check-test-junk-rules.ts +140 -0
  539. package/packages/shared-skills/skills/programming/scripts/typescript/check-test-junk.test.ts +125 -0
  540. package/packages/shared-skills/skills/programming/scripts/typescript/check-test-junk.ts +148 -0
  541. package/packages/shared-skills/skills/programming/scripts/typescript/mutation-proof.test.ts +43 -0
  542. package/packages/shared-skills/skills/programming/scripts/typescript/mutation-proof.ts +179 -0
  543. package/packages/shared-skills/skills/remove-ai-slops/SKILL.md +32 -20
  544. package/packages/shared-skills/skills/ulw-research/scripts/source-commands.mjs +3 -1
  545. package/packages/shared-skills/skills/ulw-research/scripts/source-integrity.test.ts +39 -2
  546. package/packages/shared-skills/skills/visual-qa/SKILL.md +12 -1
  547. package/packages/omo-codex/plugin/skills/programming/scripts/go/new-project.py +0 -138
  548. package/packages/omo-codex/plugin/skills/programming/scripts/python/new-project.py +0 -172
  549. package/packages/omo-codex/plugin/skills/programming/scripts/python/new-script.py +0 -116
  550. package/packages/omo-codex/plugin/skills/programming/scripts/rust/new-project.py +0 -178
  551. package/packages/shared-skills/skills/programming/scripts/go/new-project.py +0 -138
  552. package/packages/shared-skills/skills/programming/scripts/python/new-project.py +0 -172
  553. package/packages/shared-skills/skills/programming/scripts/python/new-script.py +0 -116
  554. package/packages/shared-skills/skills/programming/scripts/rust/new-project.py +0 -178
@@ -1,11 +1,12 @@
1
1
  import { describe, expect, onTestFinished, test } from "bun:test"
2
- import { chmodSync, existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, unlinkSync, writeFileSync } from "node:fs"
2
+ import { chmodSync, existsSync, mkdirSync, mkdtempSync, readFileSync, readdirSync, rmSync, unlinkSync, writeFileSync } from "node:fs"
3
3
  import { tmpdir } from "node:os"
4
4
  import { join } from "node:path"
5
5
 
6
- import { sha256Of } from "./cli-support.mjs"
6
+ import { CliError, sha256Of } from "./cli-support.mjs"
7
7
  import { addRow, readLedger, writeLedger } from "./fact-ledger.mjs"
8
8
  import { run } from "./report-tools.mjs"
9
+ import { writeSnapshot } from "./source-snapshot.mjs"
9
10
 
10
11
  const BRIEF = readFileSync(join(import.meta.dir, "tests/fixtures/fidelity-brief-locked.md"), "utf8")
11
12
  const PAGE = '<html><body><p>The main deck spans <span title="9 m">320</span> m in total.</p><table id="sizes"><tr><th>Name</th><th>Length</th></tr><tr><td>Deck</td><td>320 m</td></tr></table></body></html>'
@@ -127,6 +128,42 @@ describe("converted text is never a raw snapshot", () => {
127
128
  })
128
129
  })
129
130
 
131
+ describe("replacement over retained raw bytes", () => {
132
+ for (const [name, tampered, recaptured] of [
133
+ ["healthy retained bytes", false, false],
134
+ ["tampered retained bytes", true, false],
135
+ ["an explicit new capture after retained drift", true, true],
136
+ ] as const) {
137
+ test(`#given ${name} #when text replaces the extraction #then only validated retained bytes keep their original observation`, async () => {
138
+ const dir = session()
139
+ const observedAt = "2026-01-01T00:00:00.000Z"
140
+ const { dir: source } = writeSnapshot(join(dir, "sources"), "S1", {
141
+ url: "https://example.invalid/bridge", html: PLAIN, extractor: "model", observed_at: observedAt,
142
+ })
143
+ if (tampered) writeFileSync(join(source, "raw.bin"), PLAIN.replace("320", "330"))
144
+ const before = Object.fromEntries(readdirSync(source).map((name) => [name, readFileSync(join(source, name))]))
145
+ const raw = recaptured ? "A new capture says 340 m." : PLAIN
146
+ const text = recaptured ? raw : "The corrected extraction says 320 m."
147
+ const replaced = snapshot(dir, "S1", "--text", file(dir, "corrected.txt", text), "--replace",
148
+ ...(recaptured ? ["--raw", file(dir, "recaptured.txt", raw)] : []))
149
+
150
+ if (tampered && !recaptured) {
151
+ await expect(replaced).rejects.toBeInstanceOf(CliError)
152
+ expect(Object.fromEntries(readdirSync(source).map((name) => [name, readFileSync(join(source, name))]))).toEqual(before)
153
+ return
154
+ }
155
+
156
+ expect((await replaced).exitCode).toBe(0)
157
+ expect(readFileSync(join(source, "raw.bin"), "utf8")).toBe(raw)
158
+ expect(readFileSync(join(source, "text.txt"), "utf8")).toBe(text)
159
+ const meta = JSON.parse(readFileSync(join(source, "meta.json"), "utf8"))
160
+ expect(meta).toMatchObject({ sha256: sha256Of(raw), text_source: "declared", text_sha256: sha256Of(text) })
161
+ if (recaptured) expect(meta.observed_at).not.toBe(observedAt)
162
+ else expect(meta.observed_at).toBe(observedAt)
163
+ })
164
+ }
165
+ })
166
+
130
167
  // chmod 000 does not stop the owner reading a file on Windows (no POSIX mode bits), so there the same
131
168
  // fail-closed condition is produced the way an unreadable path occurs on win32: raw.bin is replaced by
132
169
  // a directory, and reading it fails (EISDIR). Both paths must make verify exit 1 with the cause.
@@ -42,6 +42,10 @@ The verdict is per page. One failing page fails the whole surface, so "most page
42
42
 
43
43
  Every gate runs on captures produced AFTER the last edit to the rendered source. If any screenshot, PDF, capture, or QA JSON is older than the source file it claims to verify, it is stale and invalid - regenerate it before trusting it. Never report a PASS from an artifact you did not just produce against the current build. Between review rounds, re-capture only the pages a fix touched; the final approving round always judges a complete fresh set. The one deliberately old artifact is the `before` set of Step 6, which is dated to the pre-edit build on purpose.
44
44
 
45
+ ### Machine pre-check - the detect SDK before any reviewer
46
+
47
+ On a web surface, run the `frontend` skill's detect SDK on every enumerated page before capturing for reviewers (`frontend/references/perfection/detect.md`: `detectPage({ kind: "url", url }, { reflow: true })`, or `bun <frontend skill dir>/scripts/detect/cli.ts --reflow --json <url>`). It reads the rendered page and reports contrast against the painted background, the type scale and heading order, overflow at 320-1440 px under an unbroken stress string, and decoration and copy tells. An error or warning is a FAIL on the matching checklist item (E2 contrast, B8 type scale, A9 or A13 layout, F8/F9 surfaces and scaffolds, C4 wrapping) before either reviewer looks; fix it and rerun. Keep the JSON beside the captures and hand it to both reviewers as evidence. Advisories go to the verdict's taste findings.
48
+
45
49
  ### Capture hygiene - validate before dispatching reviewers
46
50
 
47
51
  Before any reviewer sees an image, verify each capture yourself: the file signature matches its extension (a JPEG named `.png` is invalid), the frame is fully composited (no black or missing regions from the screenshot compositor), dimensions match the requested viewport, and the frame holds only the page - a capture showing the browser's tabs or address bar, or the capture tool's own UI, is a window grab, not evidence. A defective capture wastes an entire review round on the pipeline instead of the product - fix the capture tooling and re-shoot before dispatch, and record the tooling defect in the QA log instead of looping the reviewer on it.
@@ -116,7 +120,7 @@ This is the platform baseline, distilled from Apple's Human Interface Guidelines
116
120
  **A. Layout and alignment**
117
121
  - A1 Content is anchored by intent, centred or on the layout grid; nothing sits in the top-left of an otherwise empty canvas.
118
122
  - A2 Backgrounds and scrolling layouts run full-bleed to the display edges; no stray inset margin.
119
- - A3 Margins are symmetric; prose sits in a 45-75 character measure.
123
+ - A3 Margins are symmetric; prose sits in a 65-75 character measure on desktop and at least 45 on a phone.
120
124
  - A4 (phone) Safe areas respected: bars and content inset for the home indicator, notch and status bar.
121
125
  - A5 (phone) Scrollbars are overlay; no reserved right-hand gutter.
122
126
  - A6 One scroll owner per region, no nested same-direction scrolling; a sticky or floating bar stays legible over whatever scrolls under it.
@@ -126,6 +130,7 @@ This is the platform baseline, distilled from Apple's Human Interface Guidelines
126
130
  - A10 Content that continues out of view shows a cue (partial item, fade, chevron).
127
131
  - A11 (mac) Nothing important lives only at the window's bottom edge; the minimum window size keeps toolbar and content legible; the sidebar collapses when the window narrows.
128
132
  - A12 (web and app screens; N/A for a TUI, a printed page, or a figure) Layout contract: every changed screen or region has a `Layout:` line (in `DESIGN.md`, or in the change description when the project has none; the `frontend` skill's Brief step); the capture shows that pattern's structure; the logged owner is the region's main scroller in the probe output, every other scroller listed is nested inside it for its own content (a code block, a dropdown, a composer) or is named in the line too; none of the line's anti-patterns appear. A missing line, a different main scroller, an unexplained sibling scroller, or a present anti-pattern is a FAIL; a logged skip still owes the scroll-owner check.
133
+ - A13 Spacing rhythm, read from computed values: the space above a section heading is at least 1.5x the space below it, and the gap between groups is at least 2x the gap inside a group (the `frontend` skill's `references/perfection/craft-floor.md`).
129
134
 
130
135
  **B. Hierarchy**
131
136
  - B1 One primary action per view, in the prominent style (accent on its background, not its glyph); peers differ by style, never by size.
@@ -135,6 +140,7 @@ This is the platform baseline, distilled from Apple's Human Interface Guidelines
135
140
  - B5 One or two accents per screen; toolbars and tab bars stay monochrome over colourful content; nothing decorative carries accent.
136
141
  - B6 Type hierarchy comes from weight, size and colour, holds in both themes, and uses at most two typefaces.
137
142
  - B7 (web and app screens; N/A for a TUI, a printed page, or a figure) The screen matches its brief (the `frontend` skill's Brief step): the named primary action is the single prominent control, priorities 1-3 appear in that order in reading order on the first viewport, and nothing listed under "left out on purpose" is on the screen. A screen built or changed in this session with no brief is a FAIL; a pre-existing screen under audit with no brief is N/A.
143
+ - B8 Type scale floor, read from computed values: each heading step in use (display to h3, and the smallest heading to body) differs by at least 1.25x in size, and body-family roles (lead, body, small, caption, label) that sit closer also differ by weight, colour or case, a display heading stays at or under 6rem, and letter spacing never goes below -0.04em, unless the brief's chosen style route sets its own display scale or tracking (then that value is the check).
138
144
 
139
145
  **C. Text and copy**
140
146
  - C1 Body text is at least 17 pt-equivalent at 390 (15 pt for secondary text) and 14 px on desktop; no thin weights at small sizes.
@@ -159,6 +165,7 @@ This is the platform baseline, distilled from Apple's Human Interface Guidelines
159
165
  - E4 One colour never means two things; status colours are consistent across the surface.
160
166
  - E5 Translucent surfaces keep text legible over any scrolled content: blur or vibrancy, not a plain alpha fill.
161
167
  - E6 The theme follows the system; an in-app theme control also offers "system".
168
+ - E7 Secondary text on a tinted or coloured surface is a shade of that hue or the foreground at reduced alpha, never neutral gray; a shadow carries a y-offset and a soft blur, never a zero-offset coloured glow unless the brief asked for glowing-border cards (the `frontend` skill's ambience route).
162
169
 
163
170
  **F. Consistency and brand**
164
171
  - F1 One icon set with one stroke, weight and size; icon weight matches adjacent text; no emoji used as an icon.
@@ -168,6 +175,10 @@ This is the platform baseline, distilled from Apple's Human Interface Guidelines
168
175
  - F5 Selected or active state is a wash plus a glyph; focus is a focus-visible ring on fields and a row highlight in lists; no coloured accent side-border marks state.
169
176
  - F6 Standard glyphs for standard actions (share, close, back, search, more) in their standard places.
170
177
  - F7 Windows, sheets and popovers use system shapes; one sheet or popover at a time; a popover's arrow points at its source; only an alert may appear over a popover.
178
+ - F8 Browser surfaces carry the palette in both themes: text selection, caret, visible scrollbars, focus ring, link underline offset, and tabular numerals in changing or aligned numbers; none shows the browser default (select text and focus a field in the capture to prove it).
179
+ - F9 None of the generated scaffolds: a kicker label above a heading, an icon tile stacked over a heading in a grid of same-size cards, a hero metric with no decision behind it, a card nested in a card, monospace used as a "technical" costume. One the brief or its chosen route asked for, recorded as such, passes.
180
+
181
+ A13, B8, E7, F8 and F9 are adapted from the craft floor of [pbakaus/impeccable](https://github.com/pbakaus/impeccable) (Apache-2.0, Copyright 2025 Paul Bakaus); the license and the list of changes are in the `frontend` skill's `ATTRIBUTION.md` section 6.
171
182
 
172
183
  **G. Motion and feedback**
173
184
  - G1 Every animation has a cause - an interaction, a state change, an arrival; no motion on non-interactive elements, no hover that changes nothing, no permanent loop.
@@ -1,138 +0,0 @@
1
- #!/usr/bin/env -S uv run --script
2
- # /// script
3
- # requires-python = ">=3.11"
4
- # dependencies = [
5
- # "typer",
6
- # "rich",
7
- # ]
8
- # ///
9
-
10
- # ─── How to run ───
11
- # 1. Install uv (if not installed):
12
- # curl -LsSf https://astral.sh/uv/install.sh | sh
13
- # 2. Run:
14
- # uv run new-project.py myservice
15
- # uv run new-project.py myservice --module github.com/your-org/myservice
16
- # ──────────────────
17
- #
18
- # Creates a new Go project with the canonical strict layout:
19
- # - go.mod with go 1.23
20
- # - .golangci.yml (v2, strict bundle)
21
- # - Taskfile.yml (fmt + lint + test + build)
22
- # - cmd/server/main.go entrypoint
23
- # - internal/{cmd,config,api,domain,obs} skeletons
24
- # - .github/workflows/ci.yml
25
- #
26
- # Templates live in ./templates/ — keep this script under 250 pure LOC.
27
-
28
- from __future__ import annotations
29
-
30
- import subprocess
31
- import sys
32
- from pathlib import Path
33
- from string import Template
34
-
35
- import typer
36
- from rich.console import Console
37
-
38
- console = Console(stderr=True)
39
-
40
- TEMPLATES_DIR = Path(__file__).parent / "templates"
41
-
42
-
43
- def _render(template_file: str, **subs: str) -> str:
44
- """Read a template file and apply $placeholder substitutions.
45
-
46
- Uses string.Template ($name) so Go/YAML curly braces stay literal.
47
- """
48
- raw = (TEMPLATES_DIR / template_file).read_text()
49
- if not subs:
50
- return raw
51
- return Template(raw).substitute(**subs)
52
-
53
-
54
- # (template-file → relative output path; is_format = .format() is run)
55
- FILES: list[tuple[str, str, bool]] = [
56
- (".golangci.yml", ".golangci.yml", False),
57
- ("Taskfile.yml", "Taskfile.yml", False),
58
- (".editorconfig", ".editorconfig", False),
59
- ("gitignore", ".gitignore", False),
60
- ("ci.yml", ".github/workflows/ci.yml", False),
61
- ("run.go", "internal/cmd/run.go", False),
62
- ("config.go", "internal/config/config.go", False),
63
- ("main.go.tmpl", "cmd/server/main.go", True),
64
- ("AGENTS.md.tmpl", "AGENTS.md", True),
65
- ("README.md.tmpl", "README.md", True),
66
- ]
67
-
68
-
69
- def _init_go_module(project_dir: Path, module: str) -> None:
70
- try:
71
- subprocess.run(
72
- ["go", "mod", "init", module],
73
- cwd=project_dir,
74
- check=True,
75
- capture_output=True,
76
- )
77
- console.print(f" [dim]ran[/] go mod init {module}")
78
- except (subprocess.CalledProcessError, FileNotFoundError) as e:
79
- console.print(f" [yellow]warn[/] go mod init failed ({e}); writing fallback go.mod")
80
- (project_dir / "go.mod").write_text(f"module {module}\n\ngo 1.23\n")
81
-
82
-
83
- def _create_layout(project_dir: Path) -> None:
84
- """Create the canonical internal/ tree."""
85
- subdirs = [
86
- "cmd/server",
87
- "internal/cmd",
88
- "internal/config",
89
- "internal/api",
90
- "internal/domain",
91
- "internal/obs",
92
- ".github/workflows",
93
- ]
94
- for sd in subdirs:
95
- (project_dir / sd).mkdir(parents=True)
96
-
97
-
98
- def _write_files(project_dir: Path, name: str, module: str, purpose: str) -> None:
99
- """Render every template into the project tree."""
100
- for tmpl_name, out_rel, is_format in FILES:
101
- subs = (
102
- {"name": name, "module": module, "short_purpose": purpose}
103
- if is_format
104
- else {}
105
- )
106
- content = _render(tmpl_name, **subs)
107
- out_path = project_dir / out_rel
108
- out_path.parent.mkdir(parents=True, exist_ok=True)
109
- out_path.write_text(content)
110
- console.print(f" [dim]wrote[/] {out_rel}")
111
-
112
-
113
- def main(
114
- name: str,
115
- path: str = typer.Option(".", help="Parent dir"),
116
- module: str = typer.Option("", help="Go module path; default: <name>"),
117
- purpose: str = typer.Option("HTTP", help="Short purpose for AGENTS.md"),
118
- ) -> None:
119
- """Scaffold a new Go project with the strict toolchain."""
120
- project_dir = Path(path) / name
121
- if project_dir.exists():
122
- console.print(f"[red]✗[/red] {project_dir} already exists")
123
- sys.exit(1)
124
-
125
- module_path = module or name
126
-
127
- project_dir.mkdir(parents=True)
128
- _create_layout(project_dir)
129
- _init_go_module(project_dir, module_path)
130
- _write_files(project_dir, name, module_path, purpose)
131
-
132
- console.print(f"\n[bold green]Done![/] cd {project_dir}")
133
- console.print(" go get github.com/caarlos0/env/v11")
134
- console.print(" task # fmt + lint + test")
135
-
136
-
137
- if __name__ == "__main__":
138
- typer.run(main)
@@ -1,172 +0,0 @@
1
- #!/usr/bin/env -S uv run --script
2
- # /// script
3
- # requires-python = ">=3.11"
4
- # dependencies = [
5
- # "typer",
6
- # "rich",
7
- # ]
8
- # ///
9
-
10
- # ─── How to run ───
11
- # 1. Install uv (if not installed):
12
- # curl -LsSf https://astral.sh/uv/install.sh | sh
13
- # 2. Run:
14
- # uv run new-project.py myproject
15
- # uv run new-project.py myproject --path ./workspace
16
- # uv run new-project.py myproject --lib # library (publishable)
17
- # ──────────────────
18
-
19
- """Scaffold a new Python project with ultra-strict config from pyproject-strict.md.
20
-
21
- Creates via `uv init`, then injects basedpyright + ruff ALL + pytest config.
22
- """
23
-
24
- from __future__ import annotations
25
-
26
- import subprocess
27
- import sys
28
- from pathlib import Path
29
-
30
- import typer
31
- from rich import print as rprint
32
-
33
- # ── Strict tool config (from pyproject-strict.md) ──
34
-
35
- TOOL_CONFIG = '''
36
- [dependency-groups]
37
- dev = [
38
- "basedpyright>=1.21",
39
- "ruff>=0.8",
40
- "pytest>=8",
41
- "pytest-cov>=5",
42
- ]
43
-
44
- [tool.basedpyright]
45
- typeCheckingMode = "all"
46
- pythonVersion = "3.13"
47
- reportMissingTypeStubs = false
48
- reportUnknownMemberType = false
49
- reportUnknownArgumentType = false
50
- reportUnknownVariableType = false
51
- reportUnknownLambdaType = false
52
- reportUnknownParameterType = false
53
- reportMissingParameterType = false
54
- reportUnnecessaryIsInstance = false
55
- reportUnusedCallResult = false
56
- reportImplicitOverride = false
57
-
58
- [tool.ruff]
59
- target-version = "py313"
60
- line-length = 120
61
-
62
- [tool.ruff.lint]
63
- select = ["ALL"]
64
- ignore = [
65
- "COM812", # trailing comma (conflicts with formatter)
66
- "ISC001", # single-line string concat (conflicts with formatter)
67
- "D1", # undocumented-public-* (too noisy early on)
68
- "ANN101", # deprecated: self annotation
69
- "ANN102", # deprecated: cls annotation
70
- "S101", # assert used (pytest needs it)
71
- "PLR2004", # magic-value-comparison (test data)
72
- "FBT", # boolean-trap (too strict for CLIs)
73
- "TD", # flake8-todos (noisy)
74
- "FIX", # fixme (noisy)
75
- ]
76
-
77
- [tool.ruff.lint.per-file-ignores]
78
- "tests/**/*.py" = ["S101", "PLR2004", "SLF001", "D", "ARG", "ANN"]
79
-
80
- [tool.ruff.lint.pydocstyle]
81
- convention = "google"
82
-
83
- [tool.pytest.ini_options]
84
- testpaths = ["tests"]
85
- addopts = "-ra --strict-markers --strict-config"
86
- '''
87
-
88
- GITIGNORE = """\
89
- __pycache__/
90
- *.py[cod]
91
- *.so
92
- .venv/
93
- dist/
94
- *.egg-info/
95
- .coverage
96
- htmlcov/
97
- .basedpyright/
98
- .ruff_cache/
99
- """
100
-
101
-
102
- def main(
103
- name: str = typer.Argument(help="Project name"),
104
- path: Path = typer.Option(Path("."), "--path", "-p", help="Parent directory"),
105
- lib: bool = typer.Option(False, "--lib", help="Create as publishable library (uv init --lib)"),
106
- ) -> None:
107
- """Create a new Python project with ultra-strict config."""
108
- project_dir = path / name
109
-
110
- if project_dir.exists():
111
- rprint(f"[red]Error:[/red] {project_dir} already exists")
112
- raise SystemExit(1)
113
-
114
- # Run uv init
115
- cmd = ["uv", "init", "--lib" if lib else "--app", str(project_dir)]
116
- result = subprocess.run(cmd, capture_output=True, text=True)
117
- if result.returncode != 0:
118
- rprint(f"[red]uv init failed:[/red] {result.stderr}")
119
- raise SystemExit(1)
120
-
121
- # Read existing pyproject.toml
122
- pyproject_path = project_dir / "pyproject.toml"
123
- content = pyproject_path.read_text()
124
-
125
- # Remove the default [dependency-groups] if uv init created one
126
- # (we'll replace it with our strict version)
127
- lines = content.splitlines(keepends=True)
128
- filtered: list[str] = []
129
- skip = False
130
- for line in lines:
131
- if line.strip().startswith("[dependency-groups]"):
132
- skip = True
133
- continue
134
- if skip and line.strip().startswith("["):
135
- skip = False
136
- if not skip:
137
- filtered.append(line)
138
-
139
- content = "".join(filtered).rstrip("\n") + "\n"
140
-
141
- # Append strict tool config
142
- content += TOOL_CONFIG
143
-
144
- pyproject_path.write_text(content)
145
-
146
- # Add dev dependencies
147
- subprocess.run(
148
- ["uv", "add", "--dev", "basedpyright", "ruff", "pytest", "pytest-cov"],
149
- cwd=project_dir,
150
- capture_output=True,
151
- )
152
-
153
- # Create tests directory
154
- tests_dir = project_dir / "tests"
155
- tests_dir.mkdir(exist_ok=True)
156
- (tests_dir / "__init__.py").touch()
157
-
158
- # Overwrite .gitignore
159
- (project_dir / ".gitignore").write_text(GITIGNORE)
160
-
161
- # Create py.typed marker for libraries
162
- if lib:
163
- src_dir = project_dir / "src" / name.replace("-", "_")
164
- if src_dir.exists():
165
- (src_dir / "py.typed").touch()
166
-
167
- rprint(f"[green]✓[/green] Created: [bold]{project_dir}[/bold]")
168
- rprint(f" cd {name} && uv sync && uv run basedpyright . && uv run ruff check .")
169
-
170
-
171
- if __name__ == "__main__":
172
- typer.run(main)
@@ -1,116 +0,0 @@
1
- #!/usr/bin/env -S uv run --script
2
- # /// script
3
- # requires-python = ">=3.11"
4
- # dependencies = [
5
- # "typer",
6
- # "rich",
7
- # ]
8
- # ///
9
-
10
- # ─── How to run ───
11
- # 1. Install uv (if not installed):
12
- # curl -LsSf https://astral.sh/uv/install.sh | sh
13
- # 2. Run:
14
- # uv run new-script.py my_tool
15
- # uv run new-script.py my_tool --output ./scripts/my_tool.py
16
- # uv run new-script.py my_tool --deps 'httpx2[http2,brotli,zstd]' --deps rich --deps polars
17
- # uv run new-script.py my_tool --py 3.13
18
- # ──────────────────
19
-
20
- """Generate a PEP 723 Python script with all boilerplate pre-filled.
21
-
22
- Creates a new .py file with:
23
- - uv shebang
24
- - PEP 723 inline metadata (requires-python + dependencies)
25
- - Mandatory "How to run" comment block
26
- - from __future__ import annotations
27
- - main() + if __name__ guard
28
-
29
- By default writes to a temp directory and prints the path.
30
- """
31
-
32
- from __future__ import annotations
33
-
34
- import os
35
- import stat
36
- import sys
37
- import tempfile
38
- from pathlib import Path
39
-
40
- import typer
41
- from rich import print as rprint
42
-
43
-
44
- TEMPLATE = '''\
45
- #!/usr/bin/env -S uv run --script
46
- # /// script
47
- # requires-python = ">={python_version}"
48
- # dependencies = [
49
- {deps_block}# ]
50
- # ///
51
-
52
- # ─── How to run ───
53
- # 1. Install uv (if not installed):
54
- # curl -LsSf https://astral.sh/uv/install.sh | sh
55
- # 2. Run directly (no venv, no pip install needed):
56
- # uv run {filename} {args_hint}
57
- # 3. Or make executable and run:
58
- # chmod +x {filename} && ./{filename}
59
- # ──────────────────
60
-
61
- from __future__ import annotations
62
-
63
-
64
- def main() -> None:
65
- """TODO: implement."""
66
-
67
-
68
- if __name__ == "__main__":
69
- main()
70
- '''
71
-
72
-
73
- def main(
74
- name: str = typer.Argument(help="Script name (without .py extension)"),
75
- output: Path | None = typer.Option(None, "--output", "-o", help="Output path. Default: OS temp directory."),
76
- deps: list[str] = typer.Option([], "--deps", "-d", help="Dependencies to include (repeat --deps for each)."),
77
- py: str = typer.Option("3.13", "--py", help="Minimum Python version."),
78
- ) -> None:
79
- """Generate a new PEP 723 script with all boilerplate pre-filled."""
80
- filename = f"{name}.py" if not name.endswith(".py") else name
81
- stem = filename.removesuffix(".py")
82
-
83
- if output is not None:
84
- dest = Path(output)
85
- else:
86
- tmp_dir = Path(tempfile.gettempdir()) / "uv-scripts"
87
- tmp_dir.mkdir(exist_ok=True)
88
- dest = tmp_dir / filename
89
-
90
- dep_list = deps or []
91
- if dep_list:
92
- deps_block = "".join(f'# "{d}",\n' for d in dep_list)
93
- else:
94
- deps_block = '# # add deps here, e.g.: "httpx2[http2,brotli,zstd]"\n'
95
-
96
- content = TEMPLATE.format(
97
- python_version=py,
98
- deps_block=deps_block,
99
- filename=filename,
100
- args_hint="",
101
- )
102
-
103
- dest.parent.mkdir(parents=True, exist_ok=True)
104
- dest.write_text(content)
105
-
106
- # Make executable on Unix
107
- if sys.platform != "win32":
108
- st = dest.stat()
109
- dest.chmod(st.st_mode | stat.S_IEXEC | stat.S_IXGRP | stat.S_IXOTH)
110
-
111
- rprint(f"[green]✓[/green] Created: [bold]{dest}[/bold]")
112
- rprint(f" Run: [cyan]uv run {dest}[/cyan]")
113
-
114
-
115
- if __name__ == "__main__":
116
- typer.run(main)