@caddis/cli 0.2.6 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (265) hide show
  1. package/bundles/antigravity-plugin/agents/claude-md-curator.md +1 -1
  2. package/bundles/antigravity-plugin/agents/knowledge-transfer.md +17 -32
  3. package/bundles/antigravity-plugin/caddis_statusline.py +825 -0
  4. package/bundles/antigravity-plugin/claude-md/folder-agents.md.tmpl +21 -0
  5. package/bundles/antigravity-plugin/guard_agy.py +60 -9
  6. package/bundles/antigravity-plugin/plugin.json +1 -1
  7. package/bundles/antigravity-plugin/scripts/caddis_gate.py +524 -0
  8. package/bundles/antigravity-plugin/scripts/caddis_inventory.py +439 -0
  9. package/bundles/antigravity-plugin/scripts/caddis_migrate_dir.py +270 -0
  10. package/bundles/antigravity-plugin/scripts/caddis_spawn.py +300 -0
  11. package/bundles/antigravity-plugin/scripts/caddis_statusline.py +825 -0
  12. package/bundles/antigravity-plugin/scripts/caddis_tidy.py +366 -0
  13. package/bundles/antigravity-plugin/scripts/check_doc_coverage.py +924 -0
  14. package/bundles/antigravity-plugin/scripts/claude-deepseek.ps1 +4 -0
  15. package/bundles/antigravity-plugin/scripts/claude-deepseek.sh +3 -0
  16. package/bundles/antigravity-plugin/scripts/claude-glm.ps1 +4 -0
  17. package/bundles/antigravity-plugin/scripts/claude-glm.sh +3 -0
  18. package/bundles/antigravity-plugin/scripts/claude-oss.ps1 +64 -0
  19. package/bundles/antigravity-plugin/scripts/claude-oss.sh +60 -0
  20. package/bundles/antigravity-plugin/scripts/claudster_config.py +121 -0
  21. package/bundles/antigravity-plugin/scripts/claudster_doctor.py +356 -0
  22. package/bundles/antigravity-plugin/scripts/claudster_init.py +400 -0
  23. package/bundles/antigravity-plugin/scripts/claudster_migrate_rules.py +300 -0
  24. package/bundles/antigravity-plugin/scripts/enforcement_inventory.py +261 -0
  25. package/bundles/antigravity-plugin/scripts/hook_log.py +156 -0
  26. package/bundles/antigravity-plugin/scripts/new-machine.ps1 +170 -0
  27. package/bundles/antigravity-plugin/scripts/oss_ask.py +98 -0
  28. package/bundles/antigravity-plugin/scripts/oss_model.py +174 -0
  29. package/bundles/antigravity-plugin/scripts/oss_review.py +718 -0
  30. package/bundles/antigravity-plugin/scripts/setup_project_ai.py +1432 -0
  31. package/bundles/antigravity-plugin/scripts/usage_review.py +1323 -0
  32. package/bundles/antigravity-plugin/session_end_agy.py +52 -8
  33. package/bundles/antigravity-plugin/skills/_registry.md +1 -0
  34. package/bundles/antigravity-plugin/skills/advisory-hub/SKILL.md +44 -0
  35. package/bundles/antigravity-plugin/skills/code-review/SKILL.md +11 -0
  36. package/bundles/antigravity-plugin/skills/fastapi-dev/SKILL.md +1 -1
  37. package/bundles/antigravity-plugin/skills/feature-plan/SKILL.md +21 -0
  38. package/bundles/antigravity-plugin/skills/gate-review/SKILL.md +11 -0
  39. package/bundles/antigravity-plugin/skills/implement/SKILL.md +36 -0
  40. package/bundles/antigravity-plugin/skills/security-review/SKILL.md +9 -0
  41. package/bundles/antigravity-plugin/skills/ship/SKILL.md +1 -1
  42. package/bundles/antigravity-plugin/skills/ship-merge/SKILL.md +1 -1
  43. package/bundles/antigravity-plugin/skills/ship-pr/SKILL.md +1 -1
  44. package/bundles/antigravity-plugin/skills/statusline/SKILL.md +105 -0
  45. package/bundles/antigravity-plugin/skills/use-model/SKILL.md +15 -3
  46. package/bundles/antigravity-plugin/skills/validate-phase/SKILL.md +31 -0
  47. package/bundles/antigravity-plugin/warm_start_agy.py +117 -11
  48. package/bundles/antigravity-plugin-extras/plugin.json +1 -1
  49. package/bundles/antigravity-plugin-extras/skills/architecture-design/SKILL.md +1 -1
  50. package/bundles/antigravity-plugin-extras/skills/caching-patterns/SKILL.md +1 -1
  51. package/bundles/antigravity-plugin-extras/skills/webapp-development/SKILL.md +1 -1
  52. package/bundles/codex/.codex/config.toml.example +36 -0
  53. package/bundles/codex/.codex/skills/coding/api-design/SKILL.md +249 -0
  54. package/bundles/codex/.codex/skills/coding/backend-development/SKILL.md +305 -0
  55. package/bundles/codex/.codex/skills/coding/code-review/SKILL.md +140 -0
  56. package/bundles/codex/.codex/skills/coding/codebase-audit/SKILL.md +204 -0
  57. package/bundles/codex/.codex/skills/coding/dashboard-perf-sweep/SKILL.md +132 -0
  58. package/bundles/codex/.codex/skills/coding/dashboard-perf-sweep/scripts/perf_sweep.py +249 -0
  59. package/bundles/codex/.codex/skills/coding/error-handling/SKILL.md +260 -0
  60. package/bundles/codex/.codex/skills/coding/fastapi-dev/SKILL.md +300 -0
  61. package/bundles/codex/.codex/skills/coding/javascript-typescript/SKILL.md +142 -0
  62. package/bundles/codex/.codex/skills/coding/python/SKILL.md +388 -0
  63. package/bundles/codex/.codex/skills/coding/refactoring/SKILL.md +486 -0
  64. package/bundles/codex/.codex/skills/coding/security-review/SKILL.md +205 -0
  65. package/bundles/codex/.codex/skills/coding/sql/SKILL.md +321 -0
  66. package/bundles/codex/.codex/skills/data/database-design/SKILL.md +177 -0
  67. package/bundles/codex/.codex/skills/data/db-diagram/SKILL.md +148 -0
  68. package/bundles/codex/.codex/skills/data/db-diagram/scripts/sql_to_graph.py +1212 -0
  69. package/bundles/codex/.codex/skills/devops/ci-cd-pipeline/SKILL.md +315 -0
  70. package/bundles/codex/.codex/skills/devops/gh-cli/SKILL.md +195 -0
  71. package/bundles/codex/.codex/skills/devops/git-commit/SKILL.md +285 -0
  72. package/bundles/codex/.codex/skills/devops/using-git-worktrees/SKILL.md +217 -0
  73. package/bundles/codex/.codex/skills/devops/windows-deployment/SKILL.md +880 -0
  74. package/bundles/codex/.codex/skills/docs/code-documentation/SKILL.md +271 -0
  75. package/bundles/codex/.codex/skills/docs/explainer-doc/SKILL.md +97 -0
  76. package/bundles/codex/.codex/skills/docs/technical-writing/SKILL.md +286 -0
  77. package/bundles/codex/.codex/skills/docs/writing-plans/SKILL.md +387 -0
  78. package/bundles/codex/.codex/skills/frontend/css-architecture/SKILL.md +305 -0
  79. package/bundles/codex/.codex/skills/frontend/css-architecture/references/RESPONSIVE-DESIGN.md +604 -0
  80. package/bundles/codex/.codex/skills/frontend/frontend-design/SKILL.md +193 -0
  81. package/bundles/codex/.codex/skills/frontend/frontend-design/references/my-tech-stack.md +127 -0
  82. package/bundles/codex/.codex/skills/frontend/mockup/SKILL.md +242 -0
  83. package/bundles/codex/.codex/skills/frontend/react-best-practices/SKILL.md +269 -0
  84. package/bundles/codex/.codex/skills/frontend/react-dev/README.md +404 -0
  85. package/bundles/codex/.codex/skills/frontend/react-dev/SKILL.md +459 -0
  86. package/bundles/codex/.codex/skills/frontend/react-dev/examples/generic-components.md +579 -0
  87. package/bundles/codex/.codex/skills/frontend/react-dev/examples/server-components.md +579 -0
  88. package/bundles/codex/.codex/skills/frontend/react-dev/references/event-handlers.md +574 -0
  89. package/bundles/codex/.codex/skills/frontend/react-dev/references/hooks.md +456 -0
  90. package/bundles/codex/.codex/skills/frontend/react-dev/references/react-19-patterns.md +638 -0
  91. package/bundles/codex/.codex/skills/frontend/react-dev/references/react-router.md +1002 -0
  92. package/bundles/codex/.codex/skills/frontend/react-dev/references/tanstack-router.md +587 -0
  93. package/bundles/codex/.codex/skills/frontend/ui-review/SKILL.md +176 -0
  94. package/bundles/codex/.codex/skills/frontend/ui-review/references/framework-fixes.md +471 -0
  95. package/bundles/codex/.codex/skills/frontend/ui-review/references/visual-checklist.md +236 -0
  96. package/bundles/codex/.codex/skills/frontend/warm-editorial-ui/DESIGN_TOKENS.md +487 -0
  97. package/bundles/codex/.codex/skills/frontend/warm-editorial-ui/IMPLEMENTATION_GUIDE.md +177 -0
  98. package/bundles/codex/.codex/skills/frontend/warm-editorial-ui/SKILL.md +732 -0
  99. package/bundles/codex/.codex/skills/media/draw-io/SKILL.md +162 -0
  100. package/bundles/codex/.codex/skills/media/draw-io/references/aws-icons.md +677 -0
  101. package/bundles/codex/.codex/skills/media/draw-io/references/layout-guidelines.md +142 -0
  102. package/bundles/codex/.codex/skills/media/draw-io/references/troubleshooting.md +118 -0
  103. package/bundles/codex/.codex/skills/media/draw-io/references/workflows.md +103 -0
  104. package/bundles/codex/.codex/skills/media/draw-io/scripts/convert-drawio-to-png.sh +25 -0
  105. package/bundles/codex/.codex/skills/media/draw-io/scripts/find_aws_icon.py +79 -0
  106. package/bundles/codex/.codex/skills/media/mermaid-diagrams/SKILL.md +292 -0
  107. package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/ENHANCEMENTS.md +264 -0
  108. package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/MERMAID-SUMMARY.md +137 -0
  109. package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/advanced-features.md +556 -0
  110. package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/architecture-diagrams.md +192 -0
  111. package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/c4-diagrams.md +410 -0
  112. package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/class-diagrams.md +361 -0
  113. package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/erd-diagrams.md +510 -0
  114. package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/flowcharts.md +450 -0
  115. package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/sequence-diagrams.md +394 -0
  116. package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/troubleshooting.md +335 -0
  117. package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/workflows.md +418 -0
  118. package/bundles/codex/.codex/skills/media/particle-art/SKILL.md +243 -0
  119. package/bundles/codex/.codex/skills/media/particle-art/references/canvas-utils.ts +171 -0
  120. package/bundles/codex/.codex/skills/media/particle-art/references/dot-field.template.tsx +203 -0
  121. package/bundles/codex/.codex/skills/media/particle-art/references/flow-field.template.tsx +263 -0
  122. package/bundles/codex/.codex/skills/media/particle-art/references/node-shape.template.tsx +261 -0
  123. package/bundles/codex/.codex/skills/media/particle-art/references/shape-sampler.ts +281 -0
  124. package/bundles/codex/.codex/skills/media/particle-art/references/stipple-morph.template.tsx +167 -0
  125. package/bundles/codex/.codex/skills/media/particle-art/references/stipple.template.tsx +175 -0
  126. package/bundles/codex/.codex/skills/media/particle-art/references/trail-ghost.template.tsx +266 -0
  127. package/bundles/codex/.codex/skills/media/particle-art/references/usage-examples.md +320 -0
  128. package/bundles/codex/.codex/skills/testing/playwright/API_REFERENCE.md +653 -0
  129. package/bundles/codex/.codex/skills/testing/playwright/SKILL.md +454 -0
  130. package/bundles/codex/.codex/skills/testing/playwright/lib/helpers.js +441 -0
  131. package/bundles/codex/.codex/skills/testing/playwright/package.json +26 -0
  132. package/bundles/codex/.codex/skills/testing/playwright/run.js +228 -0
  133. package/bundles/codex/.codex/skills/testing/tdd-workflow/SKILL.md +188 -0
  134. package/bundles/codex/.codex/skills/testing/test-strategy/SKILL.md +155 -0
  135. package/bundles/codex/.codex/skills/testing/webapp-testing/LICENSE.txt +202 -0
  136. package/bundles/codex/.codex/skills/testing/webapp-testing/SKILL.md +97 -0
  137. package/bundles/codex/.codex/skills/testing/webapp-testing/examples/console_logging.py +35 -0
  138. package/bundles/codex/.codex/skills/testing/webapp-testing/examples/element_discovery.py +40 -0
  139. package/bundles/codex/.codex/skills/testing/webapp-testing/examples/static_html_automation.py +33 -0
  140. package/bundles/codex/.codex/skills/testing/webapp-testing/scripts/with_server.py +106 -0
  141. package/bundles/codex/.codex/skills/workflow/advisory-hub/SKILL.md +227 -0
  142. package/bundles/codex/.codex/skills/workflow/advisory-hub/reference/context-template.md +214 -0
  143. package/bundles/codex/.codex/skills/workflow/advisory-hub/reference/hub-handbook.md +233 -0
  144. package/bundles/codex/.codex/skills/workflow/advisory-hub/reference/report-contract.md +94 -0
  145. package/bundles/codex/.codex/skills/workflow/advisory-hub/reference/succession.md +118 -0
  146. package/bundles/codex/.codex/skills/workflow/best-practices/SKILL.md +500 -0
  147. package/bundles/codex/.codex/skills/workflow/best-practices/agents/best-practices-referencer.md +263 -0
  148. package/bundles/codex/.codex/skills/workflow/best-practices/agents/codebase-context-builder.md +326 -0
  149. package/bundles/codex/.codex/skills/workflow/best-practices/agents/task-intent-analyzer.md +245 -0
  150. package/bundles/codex/.codex/skills/workflow/best-practices/references/anti-patterns.md +571 -0
  151. package/bundles/codex/.codex/skills/workflow/best-practices/references/before-after-examples.md +1114 -0
  152. package/bundles/codex/.codex/skills/workflow/best-practices/references/best-practices-guide.md +513 -0
  153. package/bundles/codex/.codex/skills/workflow/best-practices/references/common-workflows.md +692 -0
  154. package/bundles/codex/.codex/skills/workflow/best-practices/references/prompt-patterns.md +547 -0
  155. package/bundles/codex/.codex/skills/workflow/brainstorming/SKILL.md +57 -0
  156. package/bundles/codex/.codex/skills/workflow/context-curator/SKILL.md +157 -0
  157. package/bundles/codex/.codex/skills/workflow/golden-plan/SKILL.md +586 -0
  158. package/bundles/codex/.codex/skills/workflow/preflight/SKILL.md +440 -0
  159. package/bundles/codex/.codex/skills/workflow/skill-creator/LICENSE.txt +202 -0
  160. package/bundles/codex/.codex/skills/workflow/skill-creator/SKILL.md +491 -0
  161. package/bundles/codex/.codex/skills/workflow/skill-creator/agents/analyzer.md +274 -0
  162. package/bundles/codex/.codex/skills/workflow/skill-creator/agents/comparator.md +202 -0
  163. package/bundles/codex/.codex/skills/workflow/skill-creator/agents/grader.md +223 -0
  164. package/bundles/codex/.codex/skills/workflow/skill-creator/assets/eval_review.html +146 -0
  165. package/bundles/codex/.codex/skills/workflow/skill-creator/eval-viewer/generate_review.py +471 -0
  166. package/bundles/codex/.codex/skills/workflow/skill-creator/eval-viewer/viewer.html +1325 -0
  167. package/bundles/codex/.codex/skills/workflow/skill-creator/references/schemas.md +430 -0
  168. package/bundles/codex/.codex/skills/workflow/skill-creator/scripts/__init__.py +0 -0
  169. package/bundles/codex/.codex/skills/workflow/skill-creator/scripts/aggregate_benchmark.py +401 -0
  170. package/bundles/codex/.codex/skills/workflow/skill-creator/scripts/generate_report.py +326 -0
  171. package/bundles/codex/.codex/skills/workflow/skill-creator/scripts/improve_description.py +247 -0
  172. package/bundles/codex/.codex/skills/workflow/skill-creator/scripts/package_skill.py +136 -0
  173. package/bundles/codex/.codex/skills/workflow/skill-creator/scripts/quick_validate.py +103 -0
  174. package/bundles/codex/.codex/skills/workflow/skill-creator/scripts/run_eval.py +310 -0
  175. package/bundles/codex/.codex/skills/workflow/skill-creator/scripts/run_loop.py +328 -0
  176. package/bundles/codex/.codex/skills/workflow/skill-creator/scripts/utils.py +47 -0
  177. package/bundles/codex/AGENTS.md +146 -0
  178. package/bundles/manifest.json +4 -3
  179. package/dist/claude-deepseek.js +544 -0
  180. package/dist/claude-glm.js +544 -0
  181. package/dist/claude-oss.js +544 -0
  182. package/dist/cli.js +542 -90
  183. package/package.json +5 -2
  184. package/bundles/antigravity-plugin/statusline-command-agy.sh +0 -91
  185. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +0 -93
  186. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
  187. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
  188. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BigShoulders-OFL.txt +0 -93
  189. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
  190. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Boldonse-OFL.txt +0 -93
  191. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
  192. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
  193. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +0 -93
  194. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
  195. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
  196. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
  197. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +0 -93
  198. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
  199. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/DMMono-OFL.txt +0 -93
  200. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
  201. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/EricaOne-OFL.txt +0 -94
  202. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
  203. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
  204. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/GeistMono-OFL.txt +0 -93
  205. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
  206. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Gloock-OFL.txt +0 -93
  207. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
  208. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
  209. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +0 -93
  210. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
  211. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
  212. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
  213. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
  214. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
  215. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
  216. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
  217. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
  218. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +0 -93
  219. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
  220. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
  221. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
  222. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Italiana-OFL.txt +0 -93
  223. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
  224. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
  225. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +0 -93
  226. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
  227. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
  228. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
  229. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Jura-OFL.txt +0 -93
  230. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +0 -93
  231. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
  232. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
  233. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
  234. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
  235. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Lora-OFL.txt +0 -93
  236. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
  237. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
  238. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/NationalPark-OFL.txt +0 -93
  239. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
  240. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +0 -93
  241. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
  242. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
  243. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Outfit-OFL.txt +0 -93
  244. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
  245. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
  246. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/PixelifySans-OFL.txt +0 -93
  247. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/PoiretOne-OFL.txt +0 -93
  248. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
  249. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
  250. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/RedHatMono-OFL.txt +0 -93
  251. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
  252. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Silkscreen-OFL.txt +0 -93
  253. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
  254. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
  255. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/SmoochSans-OFL.txt +0 -93
  256. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
  257. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Tektur-OFL.txt +0 -93
  258. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
  259. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
  260. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
  261. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
  262. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/WorkSans-OFL.txt +0 -93
  263. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
  264. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/YoungSerif-OFL.txt +0 -93
  265. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
@@ -0,0 +1,140 @@
1
+ ---
2
+ name: code-review
3
+ context: fork
4
+ description: Automated code review for pull requests using specialized review patterns. Analyzes code for quality, security, performance, and best practices. Use when reviewing code changes, PRs, or doing code audits.
5
+ source: anthropics/claude-code
6
+ license: Apache-2.0
7
+ ---
8
+
9
+ # Code Review
10
+
11
+ > **On Claude Code, prefer the native `/code-review`.** It is a command, not a skill, so it always
12
+ > fires — including headless — and it has grown capabilities this one does not have: effort levels
13
+ > (`low`…`max`), an `ultra` mode that runs a multi-agent review in the cloud, `--comment` to post
14
+ > findings as inline PR comments, and `--fix` to apply them to the working tree. Reach for it first.
15
+ >
16
+ > This surface remains because caddis ships to harnesses that have **no** native equivalent — agy,
17
+ > Codex and Copilot. There it is the only review you get. Do not delete it to tidy up Claude Code.
18
+ >
19
+ > `/caddis:cross-review` is NOT replaced by either. It sends the diff to a **different vendor's**
20
+ > model, which neither this nor the native reviewer can do.
21
+
22
+ ## Review Categories
23
+
24
+ ### 1. Security Review
25
+ Check for:
26
+ - SQL injection vulnerabilities
27
+ - XSS (Cross-Site Scripting)
28
+ - Command injection
29
+ - Insecure deserialization
30
+ - Hardcoded secrets/credentials
31
+ - Improper authentication/authorization
32
+ - Insecure direct object references
33
+
34
+ ### 2. Performance Review
35
+ Check for:
36
+ - N+1 queries
37
+ - Missing database indexes
38
+ - Unnecessary re-renders (React)
39
+ - Memory leaks
40
+ - Blocking operations in async code
41
+ - Missing caching opportunities
42
+ - Large bundle sizes
43
+
44
+ ### 3. Code Quality Review
45
+ Check for:
46
+ - Code duplication (DRY violations)
47
+ - Functions doing too much (SRP violations)
48
+ - Deep nesting / complex conditionals
49
+ - Magic numbers/strings
50
+ - Poor naming
51
+ - Missing error handling
52
+ - Incomplete type coverage
53
+
54
+ ### 4. Testing Review
55
+ Check for:
56
+ - Missing test coverage for new code
57
+ - Tests that don't test behavior
58
+ - Flaky test patterns
59
+ - Missing edge cases
60
+ - Mocked external dependencies
61
+
62
+ ## Review Output Format
63
+
64
+ ```markdown
65
+ ## Code Review Summary
66
+
67
+ ### 🔴 Critical (Must Fix)
68
+ - **[File:Line]** [Issue description]
69
+ - **Why:** [Explanation]
70
+ - **Fix:** [Suggested fix]
71
+
72
+ ### 🟡 Suggestions (Should Consider)
73
+ - **[File:Line]** [Issue description]
74
+ - **Why:** [Explanation]
75
+ - **Fix:** [Suggested fix]
76
+
77
+ ### 🟢 Nits (Optional)
78
+ - **[File:Line]** [Minor suggestion]
79
+
80
+ ### ✅ What's Good
81
+ - [Positive feedback on good patterns]
82
+ ```
83
+
84
+ ## Common Patterns to Flag
85
+
86
+ ### Security
87
+ ```javascript
88
+ // BAD: SQL injection
89
+ const query = `SELECT * FROM users WHERE id = ${userId}`;
90
+
91
+ // GOOD: Parameterized query
92
+ const query = 'SELECT * FROM users WHERE id = $1';
93
+ await db.query(query, [userId]);
94
+ ```
95
+
96
+ ### Performance
97
+ ```javascript
98
+ // BAD: N+1 query
99
+ users.forEach(async user => {
100
+ const posts = await getPosts(user.id);
101
+ });
102
+
103
+ // GOOD: Batch query
104
+ const userIds = users.map(u => u.id);
105
+ const posts = await getPostsForUsers(userIds);
106
+ ```
107
+
108
+ ### Error Handling
109
+ ```javascript
110
+ // BAD: Swallowing errors
111
+ try {
112
+ await riskyOperation();
113
+ } catch (e) {}
114
+
115
+ // GOOD: Handle or propagate
116
+ try {
117
+ await riskyOperation();
118
+ } catch (e) {
119
+ logger.error('Operation failed', { error: e });
120
+ throw new AppError('Operation failed', { cause: e });
121
+ }
122
+ ```
123
+
124
+ ## Review Checklist
125
+
126
+ - [ ] No hardcoded secrets
127
+ - [ ] Input validation present
128
+ - [ ] Error handling complete
129
+ - [ ] Types/interfaces defined
130
+ - [ ] Tests added for new code
131
+ - [ ] No obvious performance issues
132
+ - [ ] Code is readable and documented
133
+ - [ ] Breaking changes documented
134
+
135
+ ## Machine Verdict (automated / headless runs)
136
+
137
+ **Then, as the very last line of your output (nothing after it), emit the machine verdict:**
138
+ `REVIEW: CLEAN` (no blocking issues found across the categories above) or `REVIEW: BLOCKING` (one
139
+ or more blocking issues). Automated runners read only this line; it must exactly match one of
140
+ those two forms.
@@ -0,0 +1,204 @@
1
+ ---
2
+ name: codebase-audit
3
+ context: fork
4
+ description: Systematic codebase audit methodology for unfamiliar codebases before architecture or implementation work. Use for new codebase, unfamiliar codebase, pre-implementation audit, codebase review, technical due diligence, or onboarding to an existing project. Produces AUDIT-FINDINGS.md and QUESTIONS.md. Routes to Architect, Planner, or Code Reviewer agents.
5
+ ---
6
+
7
+ # Codebase Audit Skill
8
+
9
+ Systematic 6-step audit for entering an unfamiliar codebase before architecture changes, major features, or refactoring. Do not guess patterns — audit first.
10
+
11
+ ## 1. When to Apply This Skill
12
+
13
+ **Trigger conditions:**
14
+ - "I'm new to this codebase"
15
+ - "Audit this project before we start building"
16
+ - "I need to understand what's here before changing it"
17
+ - "Pre-implementation review"
18
+ - Any major feature in a codebase you haven't worked in this session
19
+
20
+ **Do not skip the audit** even when the task seems small — hidden coupling causes broken assumptions.
21
+
22
+ ## 2. Audit Scope — 20 Areas
23
+
24
+ | # | Area | What to Look For |
25
+ |---|---|---|
26
+ | 1 | **Architecture** | Monolith/microservice/monorepo, layer separation, module boundaries |
27
+ | 2 | **Entry Points** | Main files, router setup, CLI entry, exports index |
28
+ | 3 | **Framework & Runtime** | React version, Next.js, FastAPI, Django, Node version, Python version |
29
+ | 4 | **Dependencies** | `package.json`/`pyproject.toml` — packages, versions, peer deps, outdated |
30
+ | 5 | **Code Quality** | Lint config, formatter, TypeScript strict mode, type coverage |
31
+ | 6 | **Testing** | Test runner, coverage %, which layers are tested, missing tests |
32
+ | 7 | **Security Posture** | Auth implementation, env var usage, hardcoded secrets, CORS |
33
+ | 8 | **Documentation** | README completeness, inline comments, API docs |
34
+ | 9 | **Performance Signals** | Caching, lazy loading, database indexes, N+1 queries |
35
+ | 10 | **DevOps / CI** | Build commands, CI config, deployment method, Dockerfile |
36
+ | 11 | **API Design** | REST conventions, versioning, error response format, input validation |
37
+ | 12 | **Data Layer** | ORM vs raw SQL, migration strategy, schema location |
38
+ | 13 | **State Management** | Client state (Zustand, Redux, Context), server state (React Query) |
39
+ | 14 | **Error Handling** | Global error boundary, unhandled promise rejections, logging |
40
+ | 15 | **Environment Config** | `.env.example`, `pydantic-settings`, config validation on startup |
41
+ | 16 | **Dead Code / Tech Debt** | TODOs, commented-out code, unused packages, deprecated calls |
42
+ | 17 | **Naming Conventions** | Consistent file/folder naming, component vs module patterns |
43
+ | 18 | **Shared Libraries** | Utility functions, hooks, services — shared vs duplicated |
44
+ | 19 | **Accessibility** | ARIA usage, keyboard nav, color contrast, skip-nav |
45
+ | 20 | **Observability** | Logging format, tracing, health endpoints, error reporting |
46
+
47
+ ## 3. 6-Step Audit Method
48
+
49
+ ### Step 1 — Map the Repository
50
+ ```
51
+ actions:
52
+ - List top-level directories and understand intent of each
53
+ - Identify the project type (app, library, monorepo, microservice)
54
+ - Read README.md fully — note setup instructions, known issues
55
+ - Check for CONTRIBUTING.md, ARCHITECTURE.md, or ADR folders
56
+ ```
57
+
58
+ ### Step 2 — Find Entry Points
59
+ ```
60
+ actions:
61
+ - Identify main application entry (main.py, app.py, src/index.ts, src/main.ts)
62
+ - Trace the request lifecycle from entry to response (1 complete path)
63
+ - Identify router/controller/handler layers
64
+ - Find test entry (jest.config.ts, vite.config.ts, pytest.ini/pyproject.toml)
65
+ - Find build entry (package.json scripts, Makefile, Dockerfile)
66
+ ```
67
+
68
+ ### Step 3 — Dependencies and Versions
69
+ ```
70
+ actions:
71
+ - Read package.json / pyproject.toml — note major dependencies and versions
72
+ - Check for deprecated or significantly outdated packages
73
+ - Identify direct vs transitive dependency conflicts
74
+ - Note peer dependency version mismatches
75
+ - Check for security advisories (mental note or npm audit / pip-audit)
76
+ ```
77
+
78
+ ### Step 4 — Audit by Severity
79
+ ```
80
+ For each area in §2, assign:
81
+ 🔴 CRITICAL — Security vulnerability, data loss risk, broken functionality
82
+ 🟡 WARNING — Performance issue, tech debt, missing validation
83
+ 🟢 NOTE — Style inconsistency, minor improvement opportunity
84
+ ⚪ OK — Meets expectations, no action needed
85
+ ```
86
+
87
+ ### Step 5 — Compile Questions
88
+ ```
89
+ For every assumption or ambiguity discovered:
90
+ - Business context: "Why does X exist? Is it still needed?"
91
+ - Architecture: "Is this pattern intentional or historical?"
92
+ - Implementation: "Is there a newer pattern preferred for this?"
93
+ - Scope: "Which areas are off-limits for this change?"
94
+ ```
95
+
96
+ ### Step 6 — Write Deliverables
97
+ Write two files in the project root (or `docs/` if it exists):
98
+ - `AUDIT-FINDINGS.md`
99
+ - `QUESTIONS.md`
100
+
101
+ ## 4. Output Templates
102
+
103
+ ### `AUDIT-FINDINGS.md`
104
+ ```markdown
105
+ # Codebase Audit Findings
106
+
107
+ **Project**: [name]
108
+ **Audited**: [date]
109
+ **Scope**: [what was covered]
110
+
111
+ ## Summary
112
+ [2–3 sentence high-level assessment]
113
+
114
+ ## Critical Findings 🔴
115
+
116
+ ### CRIT-001: [Title]
117
+ **File**: `path/to/file.ts` (line N)
118
+ **Issue**: [What is wrong and why]
119
+ **Risk**: [What can go wrong]
120
+ **Recommendation**: [Specific fix]
121
+
122
+ ## Warnings 🟡
123
+
124
+ ### WARN-001: [Title]
125
+ **File**: `path/to/file.py`
126
+ **Issue**: [What needs attention]
127
+ **Recommendation**: [Specific improvement]
128
+
129
+ ## Notes 🟢
130
+
131
+ - [Minor observations, style, preferences]
132
+
133
+ ## Architecture Overview
134
+ [Brief description of what was found — layers, patterns, notable design decisions]
135
+
136
+ ## Scope for Current Task
137
+ Based on the requested change, these areas are in scope: …
138
+ These areas should NOT be touched: …
139
+ ```
140
+
141
+ ### `QUESTIONS.md`
142
+ ```markdown
143
+ # Pre-Implementation Questions
144
+
145
+ **For**: [next agent or human reviewer]
146
+ **Context**: [what we're about to build]
147
+
148
+ ## Blocking Questions (must answer before code changes)
149
+
150
+ ### Q1: [Question]
151
+ **Context**: [why this matters]
152
+ **Impact if wrong**: [what breaks]
153
+
154
+ ### Q2: [Question]
155
+
156
+ ## Advisory Questions (inform decisions but don't block)
157
+
158
+ ### Q3: [Question]
159
+
160
+ ## Assumptions Made
161
+ If we proceed without answers, these assumptions apply:
162
+ - [assumption 1]
163
+ - [assumption 2]
164
+ ```
165
+
166
+ ## 5. Severity Tags
167
+
168
+ | Tag | Code | Meaning |
169
+ |---|---|---|
170
+ | 🔴 Critical | `CRIT-NNN` | Fix before any changes proceed |
171
+ | 🟡 Warning | `WARN-NNN` | Address in current or next sprint |
172
+ | 🟢 Note | `NOTE-NNN` | Backlog item or stylistic observation |
173
+ | ⚪ OK | — | No action needed |
174
+
175
+ ## 6. Handoff Guidance
176
+
177
+ After completing the audit:
178
+
179
+ | Finding Type | Route To |
180
+ |---|---|
181
+ | Architecture redesign needed | `@Architect` — provide `AUDIT-FINDINGS.md` |
182
+ | Implementation can proceed with caution | `@Planner` — provide findings + questions |
183
+ | Major quality/security issues | `@Code-Reviewer` + `@Security-Analyst` |
184
+ | Only minor notes, clear path | Proceed directly with `@Implement` or `@Anchor` |
185
+
186
+ ### Prompt template for handoff:
187
+ ```
188
+ @[Agent]: I've completed a codebase audit.
189
+ Findings: [link or inline AUDIT-FINDINGS.md]
190
+ Blocking questions: [key Q from QUESTIONS.md]
191
+ The task is: [original task description]
192
+ Please [design solution / create plan / review / implement] with these findings in mind.
193
+ ```
194
+
195
+ ## 7. Checklist
196
+
197
+ - [ ] README.md read fully
198
+ - [ ] Entry point traced end-to-end (one complete request/render cycle)
199
+ - [ ] All 20 audit areas assessed (even if just ⚪ OK)
200
+ - [ ] Critical findings have file + line citation
201
+ - [ ] `AUDIT-FINDINGS.md` written to disk
202
+ - [ ] `QUESTIONS.md` written to disk
203
+ - [ ] Blocking questions identified separately
204
+ - [ ] Agent handoff prompt prepared
@@ -0,0 +1,132 @@
1
+ ---
2
+ name: dashboard-perf-sweep
3
+ context: fork
4
+ description: Re-measure an app's dashboard/API endpoints for load-time regressions and decide, with a documented checklist (not a black-box verdict), whether a slow one is a candidate for the rs-kit summary-table refresher pattern — or needs an index, keyset paging, gzip, or nothing at all. Use when the user says "sweep dashboard performance", "check if this app needs rs-kit", "re-measure the perf tracker", "is this endpoint a refresher candidate", or when a dashboard-performance-tracker.md is stale and needs re-validating. Read-only by default (dev servers only; prod requires an explicit opt-in and human confirmation) and human-invoked, never scheduled -- it surfaces candidates, it does not enroll them.
5
+ ---
6
+
7
+ # dashboard-perf-sweep — re-measure, then judge the shape, not just the time
8
+
9
+ Today an app "earns" the rs-kit refresher pattern only when someone happens to be doing unrelated
10
+ work on it, hits a slow page, and measures it properly. That worked for a couple of apps in the
11
+ fleet, but a snapshot measurement goes stale — a page added last month, or a table that crossed a
12
+ growth threshold since, has no mechanism to surface itself. This skill re-measures on demand.
13
+
14
+ **What already exists and must NOT be rebuilt:** every app in the fleet has its own
15
+ `.caddis/kb/dashboard-performance-tracker.md` with real baseline measurements. The gap this closes
16
+ is **re-measurement and re-judgment**, not first-time discovery.
17
+
18
+ ## Explicit scope guardrails — do not relax without a new conversation
19
+
20
+ - **Read-only except the final tracker update.** No code changes, no schema changes, ever. The only
21
+ write this skill makes is a diffable update to the target app's own `dashboard-performance-tracker.md`.
22
+ - **Dev by default.** Measuring against prod requires an explicit opt-in flag from the user AND, per
23
+ this project's convention for risky/hard-to-reverse actions, confirmation before hitting a live
24
+ service.
25
+ - **Human-invoked, not scheduled.** Run this when a person chooses to — never wire it into a cron job
26
+ or background automation. It surfaces candidates; it does not enroll them.
27
+ - **rs-kit is one of several possible recommendations, never the only output.** The checklist below
28
+ must be able to conclude "needs an index," "needs keyset paging," "needs gzip/trimmed fields,"
29
+ "not currently a candidate" — recommending rs-kit only for the specific aggregation shape.
30
+
31
+ ## The decision model — two gates, not one number
32
+
33
+ **Gate 1 — time (mechanical).** `DASHBOARD-PERFORMANCE-STANDARD.md` Rule 6: the first, uncached load
34
+ of any dashboard endpoint must finish in **under ~1 second**. The harness script below applies this
35
+ gate automatically per endpoint. Passing gate 1 does **not** mean rs-kit — it just means "look closer."
36
+
37
+ **Gate 2 — shape (judgment, applied by you the agent, never automated).** rs-kit fixes exactly one
38
+ shape: a query that recomputes `O(all rows ever stored)` per request, against data that keeps
39
+ growing. Time alone is not sufficient evidence — the fleet's own history proves it:
40
+
41
+ | App | Cold time | Root cause | rs-kit? |
42
+ |---|---|---|---|
43
+ | App A | worst >60s, 5 real breaches | recurring full-table aggregation | **YES** |
44
+ | App B (pre-fix) | 14s–60s+ across several endpoints | recurring full-table aggregation | **YES** |
45
+ | App C | 10.3s | a single ~158MB LOB payload on 9.1k rows, not aggregation | **NO** — SQL aggregate + gzip |
46
+ | App D | 1.9s | cold JSON parse, no DB at all in prod | **NO** — warm the provider |
47
+ | App E | 202ms | n/a — never crossed gate 1 | **NO** |
48
+
49
+ A naive "slow ⇒ recommend rs-kit" tool would have wrongly flagged App C and App D. That already
50
+ happened once before the shape distinction was made explicit — don't repeat it.
51
+
52
+ ## Step 1 — build the endpoint list for this app
53
+
54
+ The tracker files are semi-structured (page names + backtick route fragments in a markdown table),
55
+ not a clean machine-parseable list — extract the list yourself, per app, each run:
56
+
57
+ 1. Read the target app's `.caddis/kb/dashboard-performance-tracker.md` — pull every "Page / endpoint"
58
+ entry, in particular anything marked ⏳ pending or not re-measured recently.
59
+ 2. If the app has a `UI_PAGE_GUIDE.md` (check root and `docs/reference/`), cross-check it for pages
60
+ **not yet in the tracker** — this is what catches drift, not just re-running the same old list. Not
61
+ every app has one; if it's missing, say so explicitly rather than silently only using the tracker.
62
+ 3. Write the result as a JSON file matching the harness's input shape:
63
+ ```json
64
+ [
65
+ {"name": "Historical Trends chart", "method": "GET", "path": "/api/trends/daily"},
66
+ {"name": "IW grid", "method": "POST", "path": "/raworkbench/investigation/query", "json": {}}
67
+ ]
68
+ ```
69
+ 4. Confirm with the user (or the app's own `run`/`webapp-testing` conventions) how to reach the dev
70
+ instance safely, and what auth the endpoints need (open / token / session cookie) — pass it via
71
+ `--header`.
72
+
73
+ ## Step 2 — start the dev server, then run the harness
74
+
75
+ Use the app's own `run` skill/convention to start it — this skill does not start dev servers itself,
76
+ only measures an already-reachable URL.
77
+
78
+ **Use `127.0.0.1`, never the hostname `localhost`, in `--base-url`.** On Windows, Python's `urllib`
79
+ resolves `localhost` dual-stack (tries IPv6 `::1` first) and can add a **spurious, rock-steady
80
+ ~1000ms** to every single request — cold *and* warm, on every endpoint including the framework's own
81
+ static docs page. It looks exactly like a real, uniform perf problem (equal cold/warm, present on
82
+ trivial routes too) and is not one. This cost real time during this skill's own validation (§
83
+ Validating below) before `127.0.0.1` was substituted and the true numbers — sub-15ms — appeared. If a
84
+ sweep ever comes back with a suspiciously uniform floor across unrelated endpoints, first time a
85
+ `/docs` or `/openapi.json` route on the same base URL before trusting the data.
86
+
87
+ ```bash
88
+ python <skill-dir>/scripts/perf_sweep.py --base-url http://127.0.0.1:<port> --endpoints endpoints.json
89
+ python <skill-dir>/scripts/perf_sweep.py --base-url http://127.0.0.1:<port> --endpoints endpoints.json \
90
+ --header "Cookie: session=..." --output report.json
91
+ ```
92
+
93
+ Cold = first request after the dev server's fresh start (or right after a cache-bust if it can't be
94
+ restarted cheaply); warm = the immediate second request. The report flags gate-1 breaches and prints
95
+ the cold/warm ratio — a big ratio with no cache in between already points at a query-shape problem,
96
+ not a cache-TTL one. **A page that errors or times out is a finding, not a script failure** — it's
97
+ printed as `[ERROR]`, never silently dropped.
98
+
99
+ ## Step 3 — apply the gate-2 checklist to every gate-1 breach
100
+
101
+ Force these questions, in order, for each slow endpoint — don't skip to a verdict:
102
+
103
+ 1. **Does response size explain most of the time** (large payload, not a slow query)? → not rs-kit;
104
+ recommend trimming fields / gzip / virtualization.
105
+ 2. **Is the slow part parsing/serialization, not the DB round-trip?** → not rs-kit; recommend
106
+ caching/warming the parsed form (App D precedent).
107
+ 3. **Does the query scale with total stored rows rather than the response size** — read the actual
108
+ SQL/query plan, not just the timing — **and is the same aggregation recomputed per request on data
109
+ that keeps growing?** → candidate for rs-kit.
110
+ 4. **Is it slow only at deep pagination (OFFSET)?** → not rs-kit; recommend keyset paging
111
+ (`exception_id`-style cursor, App B precedent).
112
+ 5. **Is a specific WHERE clause unseekable** (function-wrapped column, NVARCHAR/VARCHAR param
113
+ mismatch)? → not rs-kit; recommend an index or a param-type fix.
114
+
115
+ Link findings to real fleet precedent (the table above, the `nvarchar-param-varchar-column-scan`
116
+ pattern, the keyset-paging work) rather than describing fixes in the abstract — every category here
117
+ has already been solved once in this fleet.
118
+
119
+ ## Step 4 — update the tracker, diffably
120
+
121
+ Update the target app's own `dashboard-performance-tracker.md` in place with the new measurements and
122
+ verdicts, so drift becomes visible over time in the diff. Never silently overwrite it without the user
123
+ being able to see a before/after. Print a summary alongside the file edit.
124
+
125
+ ## Validating this skill against known ground truth
126
+
127
+ Before trusting a new app's output, or after changing the checklist, run the sweep against two
128
+ already-known apps in your fleet and confirm it reproduces the **already-established, human-verified**
129
+ conclusion for each: one that's genuinely fast (should conclude "not a candidate") and one with a
130
+ known aggregation breach (should conclude "aggregation-shaped, rs-kit candidate" for the pages
131
+ already identified). If the output disagrees with the known-good conclusion for either, that's a
132
+ checklist bug — fix the checklist, don't rationalize the disagreement away.