@tyroneross/build-loop 0.30.3

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 (389) hide show
  1. package/.agents/plugins/marketplace.json +10 -0
  2. package/.claude-plugin/marketplace.json +38 -0
  3. package/.claude-plugin/plugin.json +30 -0
  4. package/.codex-plugin/plugin.json +41 -0
  5. package/.cursor/rules/build-loop-surface.mdc +22 -0
  6. package/AGENTS.md +498 -0
  7. package/LICENSE +202 -0
  8. package/README.md +403 -0
  9. package/agents/alignment-checker.md +124 -0
  10. package/agents/api-assessor.md +136 -0
  11. package/agents/architecture-scout.md +185 -0
  12. package/agents/assessment-orchestrator.md +163 -0
  13. package/agents/build-orchestrator.md +198 -0
  14. package/agents/database-assessor.md +133 -0
  15. package/agents/design-contract-specialist.md +239 -0
  16. package/agents/fact-checker.md +69 -0
  17. package/agents/fix-critique.md +161 -0
  18. package/agents/frontend-assessor.md +136 -0
  19. package/agents/implementer.md +185 -0
  20. package/agents/independent-auditor.md +143 -0
  21. package/agents/mock-scanner.md +78 -0
  22. package/agents/optimize-runner.md +112 -0
  23. package/agents/overfitting-reviewer.md +96 -0
  24. package/agents/performance-assessor.md +159 -0
  25. package/agents/plan-critic.md +85 -0
  26. package/agents/promotion-reviewer.md +121 -0
  27. package/agents/recurring-pattern-detector.md +248 -0
  28. package/agents/retrospective-synthesizer.md +109 -0
  29. package/agents/root-cause-investigator.md +285 -0
  30. package/agents/scope-auditor.md +121 -0
  31. package/agents/security-reviewer.md +151 -0
  32. package/agents/self-improvement-architect.md +125 -0
  33. package/agents/synthesis-critic.md +99 -0
  34. package/agents/transcript-pattern-miner.md +165 -0
  35. package/agents/ui-validator.md +193 -0
  36. package/codex-skills/build-loop/SKILL.md +20 -0
  37. package/codex-skills/debug-loop/SKILL.md +18 -0
  38. package/codex-skills/handoff/SKILL.md +22 -0
  39. package/codex-skills/knowledge/SKILL.md +21 -0
  40. package/codex-skills/optimize/SKILL.md +18 -0
  41. package/codex-skills/research/SKILL.md +18 -0
  42. package/commands/agent-rally-point.md +301 -0
  43. package/commands/assess.md +41 -0
  44. package/commands/debug.md +20 -0
  45. package/commands/debugger-detail.md +34 -0
  46. package/commands/debugger-scan.md +15 -0
  47. package/commands/debugger-status.md +20 -0
  48. package/commands/debugger.md +32 -0
  49. package/commands/handoff.md +113 -0
  50. package/commands/knowledge-review.md +16 -0
  51. package/commands/optimize.md +31 -0
  52. package/commands/plan-verify.md +39 -0
  53. package/commands/promote-experiment.md +129 -0
  54. package/commands/research.md +22 -0
  55. package/commands/run.md +12 -0
  56. package/commands/self-review.md +51 -0
  57. package/commands/start-prd.md +57 -0
  58. package/commands/test.md +34 -0
  59. package/dist/src/assessment-orchestrator.d.ts +78 -0
  60. package/dist/src/assessment-orchestrator.d.ts.map +1 -0
  61. package/dist/src/assessment-orchestrator.js +304 -0
  62. package/dist/src/assessment-orchestrator.js.map +1 -0
  63. package/dist/src/audit-miner.d.ts +21 -0
  64. package/dist/src/audit-miner.d.ts.map +1 -0
  65. package/dist/src/audit-miner.js +421 -0
  66. package/dist/src/audit-miner.js.map +1 -0
  67. package/dist/src/batch-operations.d.ts +30 -0
  68. package/dist/src/batch-operations.d.ts.map +1 -0
  69. package/dist/src/batch-operations.js +339 -0
  70. package/dist/src/batch-operations.js.map +1 -0
  71. package/dist/src/config.d.ts +83 -0
  72. package/dist/src/config.d.ts.map +1 -0
  73. package/dist/src/config.js +176 -0
  74. package/dist/src/config.js.map +1 -0
  75. package/dist/src/context-engine.d.ts +45 -0
  76. package/dist/src/context-engine.d.ts.map +1 -0
  77. package/dist/src/context-engine.js +135 -0
  78. package/dist/src/context-engine.js.map +1 -0
  79. package/dist/src/debug-wrapper.d.ts +58 -0
  80. package/dist/src/debug-wrapper.d.ts.map +1 -0
  81. package/dist/src/debug-wrapper.js +285 -0
  82. package/dist/src/debug-wrapper.js.map +1 -0
  83. package/dist/src/index.d.ts +31 -0
  84. package/dist/src/index.d.ts.map +1 -0
  85. package/dist/src/index.js +149 -0
  86. package/dist/src/index.js.map +1 -0
  87. package/dist/src/interactive-verifier.d.ts +26 -0
  88. package/dist/src/interactive-verifier.d.ts.map +1 -0
  89. package/dist/src/interactive-verifier.js +435 -0
  90. package/dist/src/interactive-verifier.js.map +1 -0
  91. package/dist/src/lessons.d.ts +59 -0
  92. package/dist/src/lessons.d.ts.map +1 -0
  93. package/dist/src/lessons.js +172 -0
  94. package/dist/src/lessons.js.map +1 -0
  95. package/dist/src/log-reader.d.ts +39 -0
  96. package/dist/src/log-reader.d.ts.map +1 -0
  97. package/dist/src/log-reader.js +291 -0
  98. package/dist/src/log-reader.js.map +1 -0
  99. package/dist/src/logger.d.ts +59 -0
  100. package/dist/src/logger.d.ts.map +1 -0
  101. package/dist/src/logger.js +328 -0
  102. package/dist/src/logger.js.map +1 -0
  103. package/dist/src/parallel-retrieval.d.ts +52 -0
  104. package/dist/src/parallel-retrieval.d.ts.map +1 -0
  105. package/dist/src/parallel-retrieval.js +309 -0
  106. package/dist/src/parallel-retrieval.js.map +1 -0
  107. package/dist/src/pattern-extractor.d.ts +30 -0
  108. package/dist/src/pattern-extractor.d.ts.map +1 -0
  109. package/dist/src/pattern-extractor.js +386 -0
  110. package/dist/src/pattern-extractor.js.map +1 -0
  111. package/dist/src/result-aggregator.d.ts +44 -0
  112. package/dist/src/result-aggregator.d.ts.map +1 -0
  113. package/dist/src/result-aggregator.js +315 -0
  114. package/dist/src/result-aggregator.js.map +1 -0
  115. package/dist/src/retrieval.d.ts +139 -0
  116. package/dist/src/retrieval.d.ts.map +1 -0
  117. package/dist/src/retrieval.js +724 -0
  118. package/dist/src/retrieval.js.map +1 -0
  119. package/dist/src/setup/auto-setup.d.ts +15 -0
  120. package/dist/src/setup/auto-setup.d.ts.map +1 -0
  121. package/dist/src/setup/auto-setup.js +157 -0
  122. package/dist/src/setup/auto-setup.js.map +1 -0
  123. package/dist/src/setup/configure-hooks.d.ts +8 -0
  124. package/dist/src/setup/configure-hooks.d.ts.map +1 -0
  125. package/dist/src/setup/configure-hooks.js +16 -0
  126. package/dist/src/setup/configure-hooks.js.map +1 -0
  127. package/dist/src/setup/create-slash-commands.d.ts +8 -0
  128. package/dist/src/setup/create-slash-commands.d.ts.map +1 -0
  129. package/dist/src/setup/create-slash-commands.js +101 -0
  130. package/dist/src/setup/create-slash-commands.js.map +1 -0
  131. package/dist/src/setup/index.d.ts +8 -0
  132. package/dist/src/setup/index.d.ts.map +1 -0
  133. package/dist/src/setup/index.js +17 -0
  134. package/dist/src/setup/index.js.map +1 -0
  135. package/dist/src/setup/inject-claude-md.d.ts +10 -0
  136. package/dist/src/setup/inject-claude-md.d.ts.map +1 -0
  137. package/dist/src/setup/inject-claude-md.js +150 -0
  138. package/dist/src/setup/inject-claude-md.js.map +1 -0
  139. package/dist/src/setup/uninstall.d.ts +22 -0
  140. package/dist/src/setup/uninstall.d.ts.map +1 -0
  141. package/dist/src/setup/uninstall.js +235 -0
  142. package/dist/src/setup/uninstall.js.map +1 -0
  143. package/dist/src/storage.d.ts +192 -0
  144. package/dist/src/storage.d.ts.map +1 -0
  145. package/dist/src/storage.js +1037 -0
  146. package/dist/src/storage.js.map +1 -0
  147. package/dist/src/string-similarity.d.ts +8 -0
  148. package/dist/src/string-similarity.d.ts.map +1 -0
  149. package/dist/src/string-similarity.js +57 -0
  150. package/dist/src/string-similarity.js.map +1 -0
  151. package/dist/src/traces/adapters/browser.d.ts +69 -0
  152. package/dist/src/traces/adapters/browser.d.ts.map +1 -0
  153. package/dist/src/traces/adapters/browser.js +280 -0
  154. package/dist/src/traces/adapters/browser.js.map +1 -0
  155. package/dist/src/traces/adapters/index.d.ts +23 -0
  156. package/dist/src/traces/adapters/index.d.ts.map +1 -0
  157. package/dist/src/traces/adapters/index.js +67 -0
  158. package/dist/src/traces/adapters/index.js.map +1 -0
  159. package/dist/src/traces/adapters/langchain.d.ts +42 -0
  160. package/dist/src/traces/adapters/langchain.d.ts.map +1 -0
  161. package/dist/src/traces/adapters/langchain.js +151 -0
  162. package/dist/src/traces/adapters/langchain.js.map +1 -0
  163. package/dist/src/traces/adapters/opentelemetry.d.ts +46 -0
  164. package/dist/src/traces/adapters/opentelemetry.d.ts.map +1 -0
  165. package/dist/src/traces/adapters/opentelemetry.js +164 -0
  166. package/dist/src/traces/adapters/opentelemetry.js.map +1 -0
  167. package/dist/src/traces/adapters/sentry.d.ts +58 -0
  168. package/dist/src/traces/adapters/sentry.d.ts.map +1 -0
  169. package/dist/src/traces/adapters/sentry.js +212 -0
  170. package/dist/src/traces/adapters/sentry.js.map +1 -0
  171. package/dist/src/traces/index.d.ts +10 -0
  172. package/dist/src/traces/index.d.ts.map +1 -0
  173. package/dist/src/traces/index.js +45 -0
  174. package/dist/src/traces/index.js.map +1 -0
  175. package/dist/src/traces/storage.d.ts +78 -0
  176. package/dist/src/traces/storage.d.ts.map +1 -0
  177. package/dist/src/traces/storage.js +399 -0
  178. package/dist/src/traces/storage.js.map +1 -0
  179. package/dist/src/traces/summarizer.d.ts +83 -0
  180. package/dist/src/traces/summarizer.d.ts.map +1 -0
  181. package/dist/src/traces/summarizer.js +247 -0
  182. package/dist/src/traces/summarizer.js.map +1 -0
  183. package/dist/src/traces/types.d.ts +365 -0
  184. package/dist/src/traces/types.d.ts.map +1 -0
  185. package/dist/src/traces/types.js +14 -0
  186. package/dist/src/traces/types.js.map +1 -0
  187. package/dist/src/types.d.ts +495 -0
  188. package/dist/src/types.d.ts.map +1 -0
  189. package/dist/src/types.js +27 -0
  190. package/dist/src/types.js.map +1 -0
  191. package/docs/agent-surface-policy.md +45 -0
  192. package/docs/memory-setup.md +226 -0
  193. package/hooks/_arch_scan_bg.py +88 -0
  194. package/hooks/_plugin_drift_check_bg.py +85 -0
  195. package/hooks/_session_start_lib.sh +42 -0
  196. package/hooks/git/pre-push +141 -0
  197. package/hooks/hooks.json +126 -0
  198. package/hooks/post-commit +30 -0
  199. package/hooks/pre-commit +29 -0
  200. package/hooks/pre-edit-apppulse.sh +6 -0
  201. package/hooks/pre-edit-architecture.sh +106 -0
  202. package/hooks/pre-edit-rally-point.sh +92 -0
  203. package/hooks/session-start-apppulse.sh +6 -0
  204. package/hooks/session-start-architecture.sh +10 -0
  205. package/hooks/session-start-git-hooks.sh +12 -0
  206. package/hooks/session-start-plugin-drift.sh +27 -0
  207. package/hooks/session-start-rally-point.sh +44 -0
  208. package/hooks/session-start-retrieval.sh +24 -0
  209. package/hooks/session-start-worktree-gc.sh +105 -0
  210. package/hooks/test_apppulse_hooks.sh +6 -0
  211. package/hooks/test_rally_point_hooks.sh +388 -0
  212. package/hooks/test_sec008_hooks.sh +66 -0
  213. package/package.json +111 -0
  214. package/scripts/README.md +301 -0
  215. package/scripts/_db_url.py +61 -0
  216. package/scripts/_paths.py +445 -0
  217. package/scripts/blm.py +162 -0
  218. package/scripts/blm_api.py +263 -0
  219. package/scripts/check_cache_sync.py +490 -0
  220. package/scripts/embed_backend.py +475 -0
  221. package/scripts/install_memory.py +556 -0
  222. package/scripts/lessons_index/__init__.py +77 -0
  223. package/scripts/lessons_index/__main__.py +135 -0
  224. package/scripts/lessons_index/ingest.py +288 -0
  225. package/scripts/lessons_index/query.py +285 -0
  226. package/scripts/lessons_index/schema.py +114 -0
  227. package/scripts/memory_context/__init__.py +610 -0
  228. package/scripts/memory_graph/__init__.py +393 -0
  229. package/scripts/project_resolver.py +172 -0
  230. package/scripts/prune_codex_plugin_cache.py +23 -0
  231. package/scripts/prune_plugin_cache.py +359 -0
  232. package/scripts/semantic_index/__init__.py +482 -0
  233. package/scripts/semantic_index/_bench_hybrid.py +175 -0
  234. package/scripts/semantic_index/backfill.py +263 -0
  235. package/scripts/semantic_index/hybrid.py +174 -0
  236. package/scripts/semantic_index/test_backfill.py +292 -0
  237. package/scripts/semantic_index/test_hybrid.py +541 -0
  238. package/scripts/sync_navgator_lessons.py +666 -0
  239. package/scripts/sync_plugin_cache.py +388 -0
  240. package/skills/agent-rally-point/SKILL.md +165 -0
  241. package/skills/agent-rally-watcher/SKILL.md +83 -0
  242. package/skills/api-registry-bridge/SKILL.md +59 -0
  243. package/skills/architecture/dead/SKILL.md +56 -0
  244. package/skills/architecture/impact/SKILL.md +88 -0
  245. package/skills/architecture/review/SKILL.md +227 -0
  246. package/skills/architecture/rules/SKILL.md +72 -0
  247. package/skills/architecture/scan/SKILL.md +79 -0
  248. package/skills/architecture/trace/SKILL.md +65 -0
  249. package/skills/attribution-standard/SKILL.md +122 -0
  250. package/skills/authentication/SKILL.md +81 -0
  251. package/skills/authentication/references/better-auth-magic-link.md +135 -0
  252. package/skills/authentication/references/better-auth-setup.md +224 -0
  253. package/skills/authentication/references/google-calendar-sync.md +278 -0
  254. package/skills/authentication/references/google-cloud-console.md +159 -0
  255. package/skills/authentication/references/google-geocoding-directions.md +126 -0
  256. package/skills/authentication/references/google-lessons-example-web-app.md +177 -0
  257. package/skills/authentication/references/google-maps.md +162 -0
  258. package/skills/authentication/references/google-oauth-setup.md +343 -0
  259. package/skills/authentication/references/google-places.md +173 -0
  260. package/skills/authentication/references/lessons-example-web-app-better-auth.md +126 -0
  261. package/skills/authentication/references/resend-email.md +227 -0
  262. package/skills/authentication/references/resend-otp-magic-link.md +153 -0
  263. package/skills/authentication/references/supabase-auth.md +172 -0
  264. package/skills/auto-decision-capture/SKILL.md +419 -0
  265. package/skills/build-loop/SKILL.md +516 -0
  266. package/skills/build-loop/detect-plugins.mjs +82 -0
  267. package/skills/build-loop/eval-guide.md +65 -0
  268. package/skills/build-loop/fallbacks.md +549 -0
  269. package/skills/build-loop/phases/fact-check.md +42 -0
  270. package/skills/build-loop/phases/ui-validation.md +267 -0
  271. package/skills/build-loop/references/apple-native-planning.md +439 -0
  272. package/skills/build-loop/references/capability-routing.md +181 -0
  273. package/skills/build-loop/references/codex-subagents.md +98 -0
  274. package/skills/build-loop/references/coordination.md +161 -0
  275. package/skills/build-loop/references/correction-aware-capture.md +177 -0
  276. package/skills/build-loop/references/independent-auditor.md +72 -0
  277. package/skills/build-loop/references/intent-capability-pack.md +170 -0
  278. package/skills/build-loop/references/intent-exploration-prompts.md +96 -0
  279. package/skills/build-loop/references/leadership.md +72 -0
  280. package/skills/build-loop/references/memory.md +284 -0
  281. package/skills/build-loop/references/modular-systems-pack.md +96 -0
  282. package/skills/build-loop/references/output-style.md +129 -0
  283. package/skills/build-loop/references/pay-it-forward-arch.md +98 -0
  284. package/skills/build-loop/references/phase-1-assess.md +218 -0
  285. package/skills/build-loop/references/phase-2-plan.md +77 -0
  286. package/skills/build-loop/references/phase-3-execute.md +47 -0
  287. package/skills/build-loop/references/phase-4-review.md +310 -0
  288. package/skills/build-loop/references/phase-5-iterate.md +71 -0
  289. package/skills/build-loop/references/phase-6-learn.md +56 -0
  290. package/skills/build-loop/references/recent-design-structures.md +274 -0
  291. package/skills/build-loop/references/refactor-history/ASSESSMENT.md +85 -0
  292. package/skills/build-loop/references/refactor-history/STANDALONE_TEST_RUN.md +149 -0
  293. package/skills/build-loop/references/refactor-history/scenarios/01-simple-bugfix.md +32 -0
  294. package/skills/build-loop/references/refactor-history/scenarios/02-ui-build-with-iteration.md +48 -0
  295. package/skills/build-loop/references/refactor-history/scenarios/03-multi-failure-escalation.md +60 -0
  296. package/skills/build-loop/references/refactor-history/scenarios/04-ui-build-ibr-absent.md +51 -0
  297. package/skills/build-loop/references/refactor-history/scenarios/05-refactor-navgator-absent.md +71 -0
  298. package/skills/build-loop/references/refactor-history/scenarios/06-recurring-bug-debugger-absent.md +52 -0
  299. package/skills/build-loop/references/refactor-history/trace-comparison.md +202 -0
  300. package/skills/build-loop/references/self-recursive-dev.md +77 -0
  301. package/skills/build-loop/references/self-review.md +232 -0
  302. package/skills/build-loop/references/ui-io-contract.md +116 -0
  303. package/skills/build-loop/scanners/audit-design-rules.mjs +476 -0
  304. package/skills/build-loop/scanners/require-visual-evidence.mjs +239 -0
  305. package/skills/build-loop/templates/backlog-item.md +35 -0
  306. package/skills/build-loop/templates/codex-worker-prompt.md +89 -0
  307. package/skills/build-loop/templates/ui-subagent-prompt.md +179 -0
  308. package/skills/build-loop/templates/ux-fix-plan.md +40 -0
  309. package/skills/building-with-deepagents/SKILL.md +195 -0
  310. package/skills/building-with-deepagents/references/anti-patterns.md +141 -0
  311. package/skills/building-with-deepagents/references/api-quick-reference.md +184 -0
  312. package/skills/capabilities/SKILL.md +91 -0
  313. package/skills/debug-loop/SKILL.md +278 -0
  314. package/skills/debug-loop/references/convergence-rules.md +145 -0
  315. package/skills/debug-loop/references/swiftui-macos-clunky-ui-debugger.html +823 -0
  316. package/skills/debugging/assess/SKILL.md +111 -0
  317. package/skills/debugging/debug-loop/SKILL.md +231 -0
  318. package/skills/debugging/memory/SKILL.md +147 -0
  319. package/skills/debugging/store/SKILL.md +153 -0
  320. package/skills/debugging-memory/SKILL.md +440 -0
  321. package/skills/debugging-memory/examples/incident-example.json +67 -0
  322. package/skills/debugging-memory/references/incident-documentation.md +280 -0
  323. package/skills/debugging-memory/references/ios-notification-alarm-playbook.md +300 -0
  324. package/skills/debugging-memory/references/pattern-extraction.md +163 -0
  325. package/skills/debugging-memory/references/subagent-integration.md +312 -0
  326. package/skills/defenseclaw-bridge/SKILL.md +156 -0
  327. package/skills/defenseclaw-bridge/references/dc-config-mapping.md +162 -0
  328. package/skills/defenseclaw-bridge/references/output-format.md +108 -0
  329. package/skills/handoff/SKILL.md +94 -0
  330. package/skills/ibr-bridge/SKILL.md +68 -0
  331. package/skills/knowledge/SKILL.md +127 -0
  332. package/skills/knowledge/references/recall-integration.md +83 -0
  333. package/skills/knowledge/templates/madr-minimal.md +56 -0
  334. package/skills/knowledge-review/SKILL.md +112 -0
  335. package/skills/logging-tracer/SKILL.md +202 -0
  336. package/skills/logging-tracer/references/log-analysis.md +128 -0
  337. package/skills/logging-tracer/references/stack-templates.md +274 -0
  338. package/skills/logging-tracer-bridge/SKILL.md +70 -0
  339. package/skills/mcp-builder/SKILL.md +278 -0
  340. package/skills/mcp-builder/references/mcp-security.md +106 -0
  341. package/skills/model-tiering/SKILL.md +216 -0
  342. package/skills/native-ax-driver/SKILL.md +220 -0
  343. package/skills/native-ax-driver/scripts/layout_fill.py +222 -0
  344. package/skills/native-ax-driver/scripts/native_driver.py +495 -0
  345. package/skills/native-ax-driver/swift/bl-ax-driver/Package.swift +20 -0
  346. package/skills/native-ax-driver/swift/bl-ax-driver/Sources/main.swift +542 -0
  347. package/skills/optimize/SKILL.md +202 -0
  348. package/skills/optimize/profiles.md +61 -0
  349. package/skills/plan-verify/SKILL.md +115 -0
  350. package/skills/plan-verify/test-fixtures/example-app-v20-findings.json +27 -0
  351. package/skills/plan-verify/test-fixtures/example-app-v20.md +42 -0
  352. package/skills/plan-verify/test-fixtures/example-app-v22-findings.json +15 -0
  353. package/skills/plan-verify/test-fixtures/example-app-v22.md +1608 -0
  354. package/skills/plan-verify/test-fixtures/unrelated-good-plan-findings.json +15 -0
  355. package/skills/plan-verify/test-fixtures/unrelated-good-plan.md +55 -0
  356. package/skills/plugin-builder/SKILL.md +329 -0
  357. package/skills/plugin-builder/references/authoritative-sources.md +104 -0
  358. package/skills/plugin-builder/references/build-loop-phase-guidance.md +94 -0
  359. package/skills/plugin-builder/references/components-guide.md +221 -0
  360. package/skills/plugin-builder/references/distribution.md +317 -0
  361. package/skills/plugin-builder/references/dual-host-claude-codex.md +220 -0
  362. package/skills/plugin-builder/references/hooks-reference.md +210 -0
  363. package/skills/plugin-builder/references/manifest-schema.md +111 -0
  364. package/skills/plugin-builder/references/plugin-hygiene-lessons.md +307 -0
  365. package/skills/plugin-tests/SKILL.md +94 -0
  366. package/skills/prd-bridge/SKILL.md +135 -0
  367. package/skills/research/SKILL.md +80 -0
  368. package/skills/security-methodology/SKILL.md +105 -0
  369. package/skills/security-methodology/references/cross-source-matrix.md +77 -0
  370. package/skills/security-methodology/references/mitre-atlas-starter.md +83 -0
  371. package/skills/security-methodology/references/nist-600-1-mapping.md +119 -0
  372. package/skills/security-methodology/references/owasp-agentic-top-10.md +157 -0
  373. package/skills/security-methodology/references/owasp-llm-top-10.md +144 -0
  374. package/skills/security-methodology/references/owasp-web-top-10.md +65 -0
  375. package/skills/self-improve/SKILL.md +298 -0
  376. package/skills/spec-writing/SKILL.md +548 -0
  377. package/skills/spec-writing/scripts/check_checklist.py +478 -0
  378. package/skills/sync-skills/SKILL.md +132 -0
  379. package/skills/telemetry/SKILL.md +66 -0
  380. package/skills/ui-design/SKILL.md +75 -0
  381. package/skills/ui-design/references/design-patterns-multi.md +165 -0
  382. package/skills/ui-design/references/design-preferences-from-owned-apps.md +150 -0
  383. package/skills/ui-design/references/evidence-capture-policy.md +55 -0
  384. package/skills/ui-design/references/ui-guidance-sources.md +330 -0
  385. package/skills/ui-design/references/universal-design-principles.alt.md +182 -0
  386. package/skills/ui-design/references/universal-design-principles.md +419 -0
  387. package/templates/memory/MEMORY.md.template +55 -0
  388. package/templates/memory/constitution.md.template +64 -0
  389. package/templates/memory/manifest.json +47 -0
@@ -0,0 +1,65 @@
1
+ <!-- SPDX-FileCopyrightText: 2025-2026 Tyrone Ross, Jr <46267523+tyroneross@users.noreply.github.com> | SPDX-License-Identifier: Apache-2.0 -->
2
+
3
+ # LLM Eval Reference
4
+
5
+ Loaded on demand during Phase 2 (grader design) and Phase 5 (validation).
6
+
7
+ ## Grading Hierarchy
8
+
9
+ 1. **Code-based** (preferred): fast, deterministic, cheap. Test pass/fail, lint clean, build succeeds, schema validation.
10
+ 2. **LLM-as-judge**: for nuanced criteria code can't check. Binary pass/fail only.
11
+ 3. **Human**: last resort. Only for calibrating automated graders.
12
+
13
+ ## LLM-as-Judge Rules
14
+
15
+ - **Binary pass/fail only**. No Likert scales. Categorical decisions are more reliable.
16
+ - **One evaluator per dimension**. No multi-dimension God Evaluator.
17
+ - **Judge reasons, then decides**. Think in thinking tags, output only pass/fail.
18
+ - **Use the running Claude instance as judge**. No external API calls.
19
+
20
+ ## Judge Prompt Template
21
+
22
+ ```
23
+ You are evaluating whether code meets a specific criterion.
24
+
25
+ <criterion>
26
+ {criterion_description}
27
+ </criterion>
28
+
29
+ <pass_condition>
30
+ {what_constitutes_a_pass}
31
+ </pass_condition>
32
+
33
+ <evidence>
34
+ {code_output_or_screenshot_or_test_result}
35
+ </evidence>
36
+
37
+ Think through your evaluation in <thinking> tags.
38
+ Then output exactly one word: PASS or FAIL.
39
+ ```
40
+
41
+ ## Code-Based Grader Patterns
42
+
43
+ ```bash
44
+ npm test 2>&1; echo "EXIT:$?" # pass if EXIT:0
45
+ npm run lint 2>&1; echo "EXIT:$?" # pass if EXIT:0
46
+ npx tsc --noEmit 2>&1; echo "EXIT:$?" # pass if EXIT:0
47
+ npm run build 2>&1; echo "EXIT:$?" # pass if EXIT:0
48
+ ```
49
+
50
+ ## Scorecard Format
51
+
52
+ ```markdown
53
+ ## Scorecard: [feature] — [date]
54
+
55
+ | # | Criterion | Method | Result | Evidence |
56
+ |---|-----------|--------|--------|----------|
57
+ | 1 | Tests pass | code | ✅ PASS | exit 0, 47/47 passing |
58
+ | 2 | Goal met | llm-judge | ❌ FAIL | Judge: missing X |
59
+
60
+ **Overall**: N/M PASS | **Iteration**: 1 of 5 | **Action**: Fix criterion 2
61
+ ```
62
+
63
+ ## Designing Good Criteria
64
+
65
+ Bad: "Code quality is good" → Good: "No lint errors, all types resolve, no `any` types outside explicit escape hatches"
@@ -0,0 +1,549 @@
1
+ <!-- SPDX-FileCopyrightText: 2025-2026 Tyrone Ross, Jr <46267523+tyroneross@users.noreply.github.com> | SPDX-License-Identifier: Apache-2.0 -->
2
+
3
+ # Capability Fallbacks
4
+
5
+ Inline guidance the orchestrator embeds in subagent prompts when a preferred plugin is absent. Subagents do not inherit parent Skill context — only text in the prompt survives the dispatch boundary. Copy the relevant section verbatim into the subagent prompt.
6
+
7
+ Each section is self-contained. Keep prose tight: the goal is "capture the concept" for new users without the full toolkit, not to replicate the plugin.
8
+
9
+ **Design principle**: fallbacks are degraded-but-useful, not skip-silently. Build-loop should carry knowledge of *what to look for* even when it can't run the deep validation. Every section below names specific files, grep patterns, or commands — not just "investigate carefully."
10
+
11
+ ---
12
+
13
+ ## web-ui — Web UI build / validation
14
+
15
+ **Build-loop-owned static fallback.** When no browser/simulator/native-AX path is available, build-loop cannot compute every rendered style value, but it CAN grep the code for specific UI contract and design-rule violations. The checks below are the minimum-viable static-analysis subset.
16
+
17
+ > **Precedence note**: IBR is explicit-only. Do not route web UI builds, Review-B validation, coverage-gap generation, or Iterate re-validation through `build-loop:ibr-bridge` unless the user specifically asks for IBR / Interface Built Right / `.ibr-test.json`. The default path is `design-contract-specialist` for direction, `ui-validator` for rendered checks, and this static matrix when rendered evidence is unavailable.
18
+
19
+ ### Design principles (Calm Precision, condensed from global `CLAUDE.md`)
20
+
21
+ - **Intent**: every visible element must help the user act, understand, decide, or recover. Remove controls, nav items, filters, charts, and options that do not work or do not serve the current workflow.
22
+ - **Grouping**: single border around related items; dividers between rows. Never individual borders on list items.
23
+ - **Hierarchy**: Title 14–16px bold → Description 12–14px → Metadata 11–12px muted.
24
+ - **Touch / size**: ≥24px desktop, ≥44px mobile tap targets. Button size reflects intent weight.
25
+ - **Contrast**: ≥4.5:1 for text against background. Use WebAIM checker if uncertain.
26
+ - **Spacing**: 8pt grid. Use 4/8/16/24/32/48/64 px increments.
27
+ - **Signal**: Status = text color only, no background badges. Color + weight for hierarchy, not boxes.
28
+ - **Content ≥ Chrome**: ≥70% content ratio on any page.
29
+ - **Disclosure (Hick's Law)**: show less, reveal on demand. Advanced options behind expand/more.
30
+ - **Nav selected state**: text-gray-900, font-medium, 2px bottom border. Never background pills.
31
+ - **Integrity**: no fake/placeholder buttons. Backend exists before UI.
32
+ - **Primary action**: one core hero/primary action by default. Add multiple primary actions only when users genuinely need parallel choices.
33
+ - **Beauty in the basics**: loading, empty, error, disabled, success, and permission states must be useful and polished.
34
+
35
+ ### UI input/output contract fallback
36
+
37
+ When no specialized UI planning tool is available, require a `## UI Input/Output Contract` section before implementation. For each changed screen/component, fill:
38
+
39
+ | Field | Required answer |
40
+ |---|---|
41
+ | Surface | Screen/component + file path |
42
+ | Inputs | Every user-provided value |
43
+ | Outputs | Every system-returned value users see or decide from |
44
+ | Data taxonomy | Scalar/object/binary/stream; plain text/Markdown/rich text/JSON/chart/audio/etc.; persisted/transient/streaming/computed |
45
+ | Operation | CRUD method and any domain verb such as submit, approve, publish, reorder, export |
46
+ | Component mapping | Exact input control and output renderer |
47
+ | States | Empty, populated, focused, disabled, loading, success, error, empty result, streaming/abort when relevant |
48
+ | Modality | Text, voice, file, image, chart, map, AI/generated, streaming, plus fallback |
49
+ | Validation/security | Presentation, application, domain validation; sanitization; auth/authz denied-state behavior |
50
+ | Traceability | Schema/source, API endpoint/method, design-system component, rationale |
51
+
52
+ Fail Review-B if a changed UI surface lacks this contract, unless the change is copy-only and explicitly states no data surface changed.
53
+
54
+ ### Static grep checks (run these at Review-D Fact-Check when rendered evidence is unavailable)
55
+
56
+ Each check returns matches = potential violation. Not all matches are real violations — some are false positives. Review output manually; flag when confidence is high.
57
+
58
+ ```sh
59
+ # 1. Gestalt — individual borders on items inside a list/map
60
+ # Look for .map() returning elements with border styles
61
+ grep -rn "\.map(" --include="*.tsx" --include="*.jsx" src/ app/ 2>/dev/null | grep -B1 -A5 "border\|rounded-" | head -20
62
+
63
+ # 2. Touch targets — buttons/links narrower than 44px
64
+ # Catches explicit width props. Won't catch Tailwind classes without a second pass.
65
+ grep -rnE "<(button|a)\s[^>]*(width|w-[0-9])" --include="*.tsx" --include="*.jsx" src/ app/ 2>/dev/null | grep -vE "w-(full|auto|screen|[4-9][0-9]|1[0-9]{2,})" | head -20
66
+
67
+ # 3. Interactive elements missing handlers
68
+ # <button> without onClick or type="submit" is suspicious
69
+ grep -rnE "<button[^>]*>" --include="*.tsx" --include="*.jsx" src/ app/ 2>/dev/null | grep -v "onClick\|type=.submit.\|type=.reset." | head -20
70
+
71
+ # 4. <a> without href or onClick
72
+ grep -rnE "<a\s[^>]*>" --include="*.tsx" --include="*.jsx" src/ app/ 2>/dev/null | grep -v "href=\|onClick=" | head -20
73
+
74
+ # 5. Missing aria-label on icon-only buttons
75
+ grep -rnE "<button[^>]*>\s*<(svg|Icon|[A-Z][a-zA-Z]*Icon)" --include="*.tsx" --include="*.jsx" src/ app/ 2>/dev/null | grep -v "aria-label" | head -20
76
+
77
+ # 6. Status rendered as background pill (signal-to-noise violation)
78
+ # Common classes: bg-red-*, bg-green-*, bg-amber-* on small text
79
+ grep -rnE "bg-(red|green|amber|yellow|orange)-[0-9]{3}.*text-[a-z]+-[0-9]{3}" --include="*.tsx" --include="*.jsx" src/ app/ 2>/dev/null | head -20
80
+
81
+ # 7. Hardcoded color hexes (should use tokens)
82
+ grep -rnE "#[0-9a-fA-F]{3,8}\b" --include="*.tsx" --include="*.jsx" --include="*.css" src/ app/ 2>/dev/null | grep -v "^[^:]*:[0-9]*:\s*//\|^[^:]*:[0-9]*:\s*/\*" | head -20
83
+
84
+ # 8. Non-8pt spacing (odd pixel values)
85
+ grep -rnE "(padding|margin|gap|top|right|bottom|left):\s*([0-9]+)px" --include="*.css" --include="*.scss" src/ app/ 2>/dev/null | awk -F'[:p]' '{if($4 && $4!~/^(0|4|8|12|16|20|24|32|40|48|56|64)$/) print $0}' | head -20
86
+
87
+ # 9. Console errors / warnings left in code
88
+ grep -rnE "console\.(log|error|warn|debug)" --include="*.ts" --include="*.tsx" --include="*.js" --include="*.jsx" src/ app/ 2>/dev/null | grep -v "\.test\.\|\.spec\.\|__tests__/" | head -20
89
+
90
+ # 10. Mock data / faker / placeholder in production paths
91
+ grep -rnE "(faker|@faker-js|lorem ipsum|PLACEHOLDER|TODO:.*REAL_DATA|Math\.random\(\))" --include="*.ts" --include="*.tsx" src/ app/ 2>/dev/null | grep -v "\.test\.\|\.spec\.\|__tests__/\|fixtures/" | head -20
92
+
93
+ # 11. Dead or decorative UI promises
94
+ grep -rnE "(coming soon|not implemented|TODO|href=\"#\"|onClick=\\{\\(\\) => \\{\\}\\}|disabled)" --include="*.tsx" --include="*.jsx" src/ app/ 2>/dev/null | grep -v "\.test\.\|\.spec\.\|__tests__/" | head -20
95
+ ```
96
+
97
+ ### File-check matrix
98
+
99
+ After greps, verify these files exist and have the right shape:
100
+
101
+ | Check | File pattern | What it needs |
102
+ |---|---|---|
103
+ | Accessible landmarks | `app/layout.tsx` or `src/App.tsx` | `<main>`, `<nav>`, `<header>`, `<footer>` present |
104
+ | Skip-to-content link | Same | `<a href="#main">Skip</a>` before nav |
105
+ | Focus styles | global CSS | Explicit `:focus-visible` rule, not `outline: none` without replacement |
106
+ | Keyboard shortcuts | Anywhere | `onKeyDown` handlers on non-button interactive elements (divs, spans with roles) |
107
+
108
+ ### Runtime validation
109
+
110
+ If the dev server is running, also do:
111
+
112
+ 1. `curl -s -o /dev/null -w "%{http_code}" <url>` — page loads
113
+ 2. `curl -s <url> | grep -c '<meta name="viewport"'` — must be 1 (viewport tag present, mobile-responsive)
114
+ 3. User explicit manual check: tab through interactive elements, watch console, screenshot
115
+
116
+ Report any failures in Review-D with file path + line number. Flag with `⚠️ static-analysis only — browser/simulator evidence unavailable`.
117
+
118
+ ---
119
+
120
+ ## mobile-ui — Mobile UI build / validation
121
+
122
+ Mobile-specific additions:
123
+
124
+ - **iOS (HIG)**: 44pt tap targets; use SF Symbols; respect safe-area insets (`safeAreaInset`, `UIEdgeInsets`); Dynamic Type support; minimum font 11pt.
125
+ - **Android (Material)**: 48dp tap targets; respect system back; elevation + shadows per Material guidelines; support gesture nav + 3-button nav.
126
+ - **React Native**: use `SafeAreaView` on every screen; test on both notched and non-notched devices.
127
+ - **Expo**: `useSafeAreaInsets()` from `react-native-safe-area-context`.
128
+ - **Keyboard**: inputs scroll into view; dismiss on outside tap; `returnKeyType` matches action.
129
+ - **Offline**: assume it; show cached state with staleness indicator.
130
+ - **Performance**: defer images until in viewport; avoid re-renders during scroll.
131
+
132
+ Validation without rendered tooling:
133
+
134
+ 1. Run on smallest supported device (iPhone SE / small Android).
135
+ 2. Run on largest (iPad Pro / tablet).
136
+ 3. Toggle Dark Mode, Dynamic Type (iOS), font-scale (Android) — layout still works.
137
+ 4. Put airplane mode on — app degrades gracefully.
138
+
139
+ ---
140
+
141
+ ## design-tokens — Design system tokens
142
+
143
+ **Do not hardcode the user's design system.** Tokens are project-specific.
144
+
145
+ Source-of-truth check order:
146
+
147
+ 1. `.build-loop/app-contract/ui.md` — build-loop design direction and hierarchy registry
148
+ 2. `tailwind.config.{ts,js,mjs}` → `theme.extend` → colors/spacing/typography
149
+ 3. `tokens.json` or `design-tokens.json` at project root
150
+ 4. `src/styles/tokens.css` or `globals.css` — `:root { --color-*: ... }`
151
+ 5. iOS: `Assets.xcassets/Colors/*.colorset` + `Assets.xcassets/*.appiconset`
152
+ 6. Figma/design-tool export files, if present and project-approved (`design/tokens.json`, `figma/tokens.json`, etc.)
153
+ 7. `.ibr/design-system.json` only when the user explicitly requested IBR for this build
154
+
155
+ If none exist: ask the user. Do not invent a palette.
156
+
157
+ When adding a new component: reuse existing tokens. Never introduce a new hex literal without confirming with the user.
158
+
159
+ ---
160
+
161
+ ## architecture — Blast-radius and impact analysis
162
+
163
+ **Standalone mode when NavGator is not installed.** Build-loop cannot build a full dependency graph, but it CAN produce a useful approximation from git history, filesystem layout, and import greps. Less accurate than NavGator's AST-aware scan; good enough to scope Plan correctly.
164
+
165
+ ### Assess step (before Plan)
166
+
167
+ Run these in order. Output goes to `.build-loop/state.json.architecture.standalone`.
168
+
169
+ ```sh
170
+ # 1. Changed files (from the goal's scope or current diff)
171
+ CHANGED=$(git diff --name-only origin/main..HEAD 2>/dev/null || git diff --name-only HEAD 2>/dev/null)
172
+ echo "$CHANGED"
173
+
174
+ # 2. Layer classification by conventional directories
175
+ # Map each changed file to a layer heuristic
176
+ echo "$CHANGED" | while read f; do
177
+ case "$f" in
178
+ src/db/*|src/models/*|prisma/*|*migrations*) echo "db: $f" ;;
179
+ src/api/*|app/api/*|pages/api/*|src/routes/*) echo "backend: $f" ;;
180
+ src/components/*|app/*/page.tsx|app/*/layout.tsx|pages/*) echo "frontend: $f" ;;
181
+ src/workers/*|*queue*|*job*) echo "queue: $f" ;;
182
+ src/lib/*|src/utils/*|src/shared/*) echo "shared: $f" ;;
183
+ *.test.*|*.spec.*|__tests__/*) echo "test: $f" ;;
184
+ *) echo "other: $f" ;;
185
+ esac
186
+ done
187
+
188
+ # 3. 1-hop dependents — who imports these files?
189
+ # For each changed file, grep for its module specifier across the repo
190
+ echo "$CHANGED" | while read f; do
191
+ MODULE=$(echo "$f" | sed 's|^src/||; s|\.tsx\?$||; s|\.jsx\?$||; s|/index$||')
192
+ IMPORTERS=$(grep -rlE "from ['\"][@~/]*${MODULE}(/|'|\")" src/ app/ 2>/dev/null | grep -v "^$f$" | head -10)
193
+ echo "$f → imported by: $(echo $IMPORTERS | tr '\n' ' ')"
194
+ done
195
+
196
+ # 4. Hotspot detection — files with high git churn (proxy for high fan-in)
197
+ # Top 10 most-changed files in the last 100 commits
198
+ git log --pretty=format: --name-only -100 2>/dev/null | sort | uniq -c | sort -rn | head -10
199
+
200
+ # 5. Circular-import smell — TypeScript compiler already catches these on `tsc --noEmit`
201
+ # Run the type check and look for "Cannot find module" or "circular" in output
202
+ # (Delegate to Review-B's type check grader; just note this is where cycles surface.)
203
+ ```
204
+
205
+ ### Risk flags
206
+
207
+ Emit a risk flag when:
208
+ - Changed files cross ≥3 layer classifications (e.g. frontend + backend + db in one build) — high blast radius
209
+ - Any changed file appears in the top-5 hotspots from check #4 — concentration risk
210
+ - 1-hop dependent count > 10 for any single changed file — fan-out concern
211
+ - Changed files include both `src/db/` and `src/components/` without going through `src/api/` — possible frontend-direct-db layer violation
212
+
213
+ ### What this fallback cannot do (flag these as gaps)
214
+
215
+ - Transitive (2-hop+) dependency tracing — NavGator's `graph.json` required
216
+ - LLM prompt mapping (`navgator llm-map`) — needs the AST-aware scanner
217
+ - Lessons/recurrence matching (`.navgator/lessons/`) — this is NavGator-specific storage
218
+ - Post-change architectural rule enforcement (`navgator rules`) — requires full component classification
219
+
220
+ When any of the above would materially affect the build (e.g. large refactor touching 20+ files, or a build that edits product LLM prompts), recommend installing NavGator rather than pushing forward with the fallback. Note this in the Review-F report as `⚠️ NavGator would improve confidence here`.
221
+
222
+ ---
223
+
224
+ ## screenshot — Visual evidence
225
+
226
+ Preferred tools (in order of availability):
227
+
228
+ 1. Host browser/screenshot tooling, when the host exposes it
229
+ 2. `showcase:capture` slash command, when available
230
+ 3. `npx playwright screenshot <url> <output.png>` — if Playwright installed
231
+ 4. Native surfaces: `xcrun simctl io booted screenshot <output.png>` for iOS or `screencapture -i <output.png>` for desktop apps
232
+ 5. Explicit IBR screenshot command only when the user requested IBR for this build
233
+ 6. Ask the user to attach a screenshot — never fabricate one
234
+
235
+ Save to `.build-loop/evals/screenshots/YYYY-MM-DD-<label>.png`. Reference paths in the scorecard.
236
+
237
+ ---
238
+
239
+ ## web-fetch — External content fetching
240
+
241
+ Inline minimal fetch for when `scraper-app` SDK is absent. Still cheaper than having the LLM read raw HTML:
242
+
243
+ ```js
244
+ // Strip chrome, keep article content. Zero deps.
245
+ const html = await (await fetch(url)).text();
246
+ const body = html.match(/<body[^>]*>([\s\S]*?)<\/body>/i)?.[1] ?? html;
247
+ const text = body
248
+ .replace(/<script[\s\S]*?<\/script>/gi, "")
249
+ .replace(/<style[\s\S]*?<\/style>/gi, "")
250
+ .replace(/<[^>]+>/g, " ")
251
+ .replace(/\s+/g, " ")
252
+ .trim();
253
+ ```
254
+
255
+ **Always note LLM cost** in the Review-F report when this fallback runs. Flag that installing `scraper-app` would eliminate the token spend.
256
+
257
+ Do not fetch URLs the user did not explicitly provide or that aren't core to the task. Never fetch from private networks.
258
+
259
+ ---
260
+
261
+ ## debug — Root-cause investigation
262
+
263
+ The `build-loop:debug-loop` skill is bundled with build-loop. Use this fallback only if the skill fails to load:
264
+
265
+ 1. **Reproduce** — minimal case that fails every time. Write the command/steps down.
266
+ 2. **Isolate** — binary-search the diff / commits / inputs until you find the smallest change that flips pass ↔ fail.
267
+ 3. **Hypothesize** — one specific claim about cause. Write it as a statement, not a question.
268
+ 4. **Test** — make the smallest possible change that would confirm or refute the hypothesis. Run it. Observe.
269
+ 5. **Record** — append one line to `.build-loop/issues/YYYY-MM-DD-<slug>.md` with: symptom, root cause, fix, prevention.
270
+
271
+ Stop after 3 failed hypotheses and escalate to the user with what was tried.
272
+
273
+ ---
274
+
275
+ ## bug-memory — Prior-bug lookup
276
+
277
+ The `build-loop:debugging-memory` skill is bundled with build-loop. Use this fallback only if the skill cannot provide structured recall. No cross-project training — just a file-grep of this project's prior builds.
278
+
279
+ ### Query procedure
280
+
281
+ Extract key tokens from the current failure (error class, function name, file path, distinctive noun). Then:
282
+
283
+ ```sh
284
+ SYMPTOM="<your symptom string>"
285
+ # Pull the 3-5 most distinctive words from SYMPTOM
286
+ TOKENS=$(echo "$SYMPTOM" | tr ' ' '\n' | grep -E '^[A-Z][a-zA-Z]+$|^[a-z_]+[A-Z][a-zA-Z]+$|Error|Exception|timeout|undefined' | head -5)
287
+
288
+ # Search local project history
289
+ for T in $TOKENS; do
290
+ grep -R -l "$T" .build-loop/issues/ 2>/dev/null
291
+ grep -R -l "$T" .build-loop/feedback.md 2>/dev/null
292
+ grep -R -l "$T" .bookmark/ 2>/dev/null
293
+ done | sort -u
294
+ ```
295
+
296
+ ### Degraded verdict (4 states, same shape as the debugging-memory verdict gate)
297
+
298
+ | State | Match rule | Action |
299
+ |---|---|---|
300
+ | `LOCAL_HIT_EXACT` | At least one file contains the full symptom string (case-insensitive substring match) | Read that file; adapt its recorded fix as the Iterate plan. Not direct-apply. |
301
+ | `LOCAL_HIT_PARTIAL` | ≥2 tokens co-occur in the same file | Reference the file in the Iterate plan; investigate normally |
302
+ | `LOCAL_WEAK` | 1 token match only | Note reference, investigate normally |
303
+ | `LOCAL_NO_MATCH` | No files contain any tokens | Standard Iterate; write a new `.build-loop/issues/<slug>.md` after resolution |
304
+
305
+ No confidence score (no classifier). No cross-project lookup. No automatic training signal back to the source — this is strictly read-only memory for one project.
306
+
307
+ ### Storage (write side)
308
+
309
+ After resolving a failure, append to `.build-loop/issues/YYYY-MM-DD-<slug>.md`:
310
+
311
+ ```
312
+ # <one-line title>
313
+
314
+ **Symptom**: <error string as it appeared>
315
+ **Root cause**: <what was actually wrong>
316
+ **Fix**: <diff summary or description>
317
+ **Files**: <paths touched>
318
+ **Tags**: <layer>, <component>, <pattern>
319
+ ```
320
+
321
+ Future builds will grep this file. The bundled `build-loop:debugging-memory` skill promotes this to native build-loop recall; standalone Coding Debugger can mirror it into cross-project ranked memory when installed separately.
322
+
323
+ ---
324
+
325
+ ## logging-fallback — Observability when logging-tracer skill fails
326
+
327
+ The `build-loop:logging-tracer` skill is bundled with build-loop (v0.6.0+). Use this fallback only if the skill fails to load. Minimum-viable Tier-1 structured logging per language: see `skills/logging-tracer/SKILL.md` and `skills/logging-tracer/references/stack-templates.md` for the 5-8 line helpers (Node, Python, Go, Rust) that write to stderr and respect a `DEBUG_TRACE=1` env gate.
328
+
329
+ ---
330
+
331
+ ## agent-authoring — Writing new agents
332
+
333
+ Checklist when `agent-builder` / `plugin-dev:agent-development` is unavailable:
334
+
335
+ Required frontmatter:
336
+
337
+ ```yaml
338
+ ---
339
+ name: agent-slug # kebab-case, matches filename
340
+ description: |
341
+ One-sentence trigger condition.
342
+ <example>
343
+ Context: ...
344
+ user: "..."
345
+ assistant: "I'll use the <agent-slug> agent to ..."
346
+ </example>
347
+ model: inherit # or sonnet / haiku / opus
348
+ color: blue # used in the UI
349
+ tools: ["Read", "Grep", "Glob"] # least-privilege; don't default to all
350
+ ---
351
+ ```
352
+
353
+ Body: second-person instructions (`You are ...`). Single focused responsibility. No "also handles …" scope creep. ≤150 lines.
354
+
355
+ Invocation from the orchestrator: pass complete context in the prompt — agents do not inherit parent Skill or file-read context.
356
+
357
+ ---
358
+
359
+ ## structured-writing — Reports, summaries, handoffs
360
+
361
+ When `pyramid-principle:*` is unavailable, use the SCQA-to-key-line format:
362
+
363
+ 1. **Situation** — one sentence on the status quo.
364
+ 2. **Complication** — one sentence on what changed or what's at stake.
365
+ 3. **Question** — the implicit question the reader is now asking.
366
+ 4. **Answer (the governing thought)** — one sentence, top of the document.
367
+ 5. **Key lines (3–7)** — MECE arguments that support the governing thought. Each is a claim, not a topic.
368
+ 6. **Support** — evidence under each key line.
369
+
370
+ For the Review-F scorecard: governing thought = did the build meet the goal; key lines = the scoring criteria; support = evidence rows.
371
+
372
+ ---
373
+
374
+ ## migration — Hosted-IDE → production migration
375
+
376
+ When `replit-migrate:*` is unavailable. Applies to Replit, Lovable, Bolt.new, v0, CodeSandbox, StackBlitz exports.
377
+
378
+ Inventory pass — what does the source have?
379
+
380
+ - Routes and endpoints (file + verb + params + response shape)
381
+ - Auth mechanism (session cookie? JWT? OAuth? custom?)
382
+ - Database (SQLite? Postgres? JSON files? LocalStorage?)
383
+ - File storage (local? S3-like? CDN?)
384
+ - Environment variables (list them all with intended values)
385
+ - External API calls (with keys — flag any that need rotation)
386
+ - Assets (images, fonts, icons — source and license)
387
+ - Build scripts (package.json scripts, Makefile, replit.nix)
388
+ - Hosted-IDE lock-in (platform-specific APIs, proprietary secrets store, always-on URLs)
389
+
390
+ Translation guide — pick stacks that fit the target:
391
+
392
+ | Source | Web target | Native target |
393
+ |---|---|---|
394
+ | Express / Koa | Next.js API routes or Hono | N/A |
395
+ | Prisma | Drizzle (Vercel/Cloudflare) or Prisma | SwiftData |
396
+ | Replit DB / Redis | Upstash Redis / Neon / Turso | SwiftData |
397
+ | Replit Auth | Better Auth / NextAuth / Clerk | Sign in with Apple |
398
+ | LocalStorage | cookies or DB | UserDefaults |
399
+ | `.replit` runner | `vercel.json` / `wrangler.toml` | Xcode scheme |
400
+
401
+ Parity verification — every route/feature needs a smoke test against the migrated version before cut-over. Write these tests first.
402
+
403
+ ---
404
+
405
+ ## prompt — Prompt authoring / review / audit
406
+
407
+ When the `prompt-builder:prompt-builder` plugin skill is unavailable. If the personal `prompt-builder` skill is available (same name, loaded via Skill tool), load it first. It covers technique selection (CoT, SoT, few-shot, self-consistency) in more depth than this fallback.
408
+
409
+ Use the **6-Part Stack** for any system prompt or agent prompt:
410
+
411
+ 1. **Role** — who the model is. One sentence, specific. "You are a triage agent for customer support tickets that classifies urgency."
412
+ 2. **Task** — the specific action. Verbs. No hedging. "Classify each ticket as P0/P1/P2."
413
+ 3. **Constraints** — hard limits: length, forbidden behaviors, tools it can/cannot use, response time, data it must not output.
414
+ 4. **Context** — what the model needs to know: schema of inputs, definitions of ambiguous terms, org-specific conventions.
415
+ 5. **Output format** — exact structure: JSON schema, markdown template, or free text with labeled sections. Specify escape behavior for ambiguous inputs.
416
+ 6. **Acceptance criteria** — how success is judged. If deterministic, what makes it wrong. If LLM-judged, what the judge looks for.
417
+
418
+ Calibrate to model tier:
419
+
420
+ - **Frontier (T1 — Opus 4.6, GPT-5)**: can handle longer instructions, implicit reasoning, self-correction. Prefer clarity over verbosity.
421
+ - **Mid (T2 — Sonnet 4.6, GPT-4)**: explicit instructions; show, don't tell; 1-2 few-shot examples help.
422
+ - **Small/fast (T3 — Haiku 4.5, gpt-4-mini)**: keep prompts short; single task only; deterministic output format; more examples (3-5).
423
+
424
+ Review checklist — when auditing an existing prompt:
425
+
426
+ 1. Does it leak system implementation details the user shouldn't see?
427
+ 2. Are there [ASSUMED] values (thresholds, formats, user intent) that should be surfaced as parameters?
428
+ 3. Are there contradictions between constraints and examples?
429
+ 4. Would two reasonable readers interpret the task the same way?
430
+ 5. Is the output format machine-parseable if it's downstream of code?
431
+ 6. What happens on edge inputs — empty string, very long string, non-English, adversarial?
432
+ 7. Is the role specific enough to constrain behavior, or vague enough to be ignored?
433
+
434
+ Temperature hints:
435
+
436
+ - 0.0-0.2 — classification, extraction, deterministic tasks
437
+ - 0.3-0.5 — structured generation (summaries, rewrites)
438
+ - 0.7-1.0 — open-ended creative work
439
+ - Rarely above 1.0 — only for diversification across multiple samples
440
+
441
+ Save iterated prompts to `.build-loop/prompts/` with a version suffix so regressions are detectable.
442
+
443
+ ---
444
+
445
+ ## apple-dev — iOS / watchOS / macOS
446
+
447
+ When the personal `apple-dev` skill is unavailable (new user, no `~/.claude/skills/apple-dev/`):
448
+
449
+ Minimal SwiftUI scaffold:
450
+
451
+ ```swift
452
+ import SwiftUI
453
+ import SwiftData
454
+
455
+ @main
456
+ struct App: App {
457
+ var body: some Scene {
458
+ WindowGroup {
459
+ ContentView()
460
+ }
461
+ .modelContainer(for: [Item.self])
462
+ }
463
+ }
464
+
465
+ @Model
466
+ final class Item {
467
+ var timestamp: Date
468
+ init(timestamp: Date = .now) { self.timestamp = timestamp }
469
+ }
470
+ ```
471
+
472
+ Build via XcodeGen (`project.yml`) rather than hand-editing `.pbxproj`:
473
+
474
+ ```yaml
475
+ name: MyApp
476
+ options:
477
+ bundleIdPrefix: com.example
478
+ targets:
479
+ MyApp:
480
+ type: application
481
+ platform: iOS
482
+ deploymentTarget: "17.0"
483
+ sources: [MyApp]
484
+ settings:
485
+ base:
486
+ DEVELOPMENT_TEAM: ABCDE12345
487
+ ```
488
+
489
+ Deployment to TestFlight — App Store Connect API key:
490
+
491
+ ```sh
492
+ xcrun altool --upload-app \
493
+ -f build/MyApp.ipa \
494
+ -t ios \
495
+ --apiKey $ASC_KEY_ID \
496
+ --apiIssuer $ASC_ISSUER_ID
497
+ ```
498
+
499
+ Notes:
500
+
501
+ - Use API key auth (`--apiKey`), not username/password. Keys in `~/.appstoreconnect/private_keys/AuthKey_<ID>.p8`.
502
+ - 44pt tap targets (HIG). Dynamic Type at every font size. VoiceOver labels on every tappable view.
503
+ - Watch connectivity: use `WCSession` with `transferUserInfo` for background sync, `sendMessage` only when reachable.
504
+ - Do not copy Apple Developer Program credentials into the repo. Read from Keychain or environment.
505
+
506
+ ## web-deploy-verify — Vercel post-deploy verification
507
+
508
+ When `scripts/verify_deploy.py` is unavailable (older plugin checkout) AND the
509
+ Vercel MCP is not configured in `.mcp.json`, run this degraded procedure by hand
510
+ after a deploy/push that triggered a Vercel build.
511
+
512
+ Preconditions: the consumer project is Vercel-linked (`.vercel/project.json` or
513
+ `vercel.json` present) and the `vercel` CLI is authed. If either is missing,
514
+ record `deploy_verify: skipped (<reason>)` and proceed — never block the build
515
+ on infra.
516
+
517
+ Procedure:
518
+
519
+ 1. Resolve the latest production deployment URL:
520
+
521
+ ```sh
522
+ vercel ls --environment production --format json --yes
523
+ ```
524
+
525
+ Take the newest entry's `url` (prefix `https://` if bare).
526
+
527
+ 2. Poll the deployment to a terminal state — `vercel inspect <url> --format json`
528
+ every ~20s, capped at ~10min. Read `readyState` (or `state`/`status`):
529
+ - `READY` → continue to step 3.
530
+ - `ERROR` or `CANCELED` → **Iterate**. Build/function error. Pull logs with
531
+ `vercel inspect <url> --logs`.
532
+
533
+ 3. Probe the production root and each changed endpoint:
534
+ - Prod root (`GET /`) must return **200**. A `READY` deployment whose root is
535
+ not 200 is a render/runtime failure → Iterate.
536
+ - Each changed route is **healthy** when it returns `200`, a `3xx`
537
+ redirect, or **`401` / `403`**.
538
+
539
+ **`401`/`403` on a protected route is a HEALTHY auth gate, NOT a failure.**
540
+ It proves the serverless function deployed and is running; it simply (and
541
+ correctly) refused an unauthenticated probe. Treating it as a failure would
542
+ make every authenticated app fail its own deploy gate.
543
+
544
+ Only a `5xx` (function crash) or an unreachable changed route is a real
545
+ failure → Iterate, using the offending route + status as the rubric.
546
+
547
+ 4. Outcome: deployment `READY` + root `200` + every changed endpoint in
548
+ `{200, 3xx, 401, 403}` ⇒ healthy, proceed. Otherwise Iterate. Infra trouble
549
+ (CLI missing, auth, network) ⇒ `skipped`, proceed.
@@ -0,0 +1,42 @@
1
+ <!-- SPDX-FileCopyrightText: 2025-2026 Tyrone Ross, Jr <46267523+tyroneross@users.noreply.github.com> | SPDX-License-Identifier: Apache-2.0 -->
2
+
3
+ # Phase 7: Fact Check & Mock Scan — Detailed Guidance
4
+
5
+ Loaded on demand when entering Phase 7.
6
+
7
+ ## Gate A: Fact Checker
8
+
9
+ | Check | What to Do |
10
+ |-------|-----------|
11
+ | **Rendered data** | Any %, $, score, count, assessment in UI — trace to data source. If a number appears on screen, where does it come from? |
12
+ | **Claims in code/comments** | Assertions about performance, accuracy, coverage — verified or marked ⚠️ UNVERIFIED |
13
+ | **Plan/spec claims** | What was "achieved" — cross-check against actual eval results from Phase 5 |
14
+ | **Extreme language** | Flag "always", "never", "100%", "guaranteed", "impossible", "all", "none" in code, UI copy, error messages, docs. Replace with accurate qualified language unless genuinely absolute |
15
+ | **Assessment integrity** | App displays quality scores, risk levels, health indicators? Verify scoring logic exists and produces the displayed value. No hardcoded "95%" without backing logic |
16
+ | **Source traceability** | Every rendered metric: data source → transformation → display. Missing link = flag it |
17
+
18
+ ## Gate B: Mock And Privacy Data Scanner
19
+
20
+ Run this as the `mock-scanner` pass in the Review-D parallel dispatch.
21
+
22
+ Scan production code paths for:
23
+ - Hardcoded fake data in display paths (names, emails, addresses, phone numbers, prices)
24
+ - Placeholder text (lorem ipsum, "TODO", "FIXME") in rendered output
25
+ - Fake metrics: hardcoded percentages, scores, or counts not derived from real computation
26
+ - Mock API responses left in production code (not test files)
27
+ - Fake semantic search, recommendation, chart, metric, summary, or comparison responses where users expect real data to make decisions
28
+ - `faker` library or `Math.random()` generating user-facing data
29
+ - Seed/fixture data rendering outside dev/test environments
30
+ - Commented-out real implementations replaced by stubs
31
+ - API keys, private keys, bearer/OAuth tokens, connection strings, passwords, `.env` values, and credential assignments in public surfaces
32
+ - Absolute local path references such as `/Users/<name>/`, `/home/<name>/`, `C:\Users\<name>\`, plugin cache paths, local session paths, private vault/wiki paths, and machine-specific temp/build paths
33
+ - Persona/profile exports, customer/user lists, resumes, calendars, private notes, transcripts, hostnames, session IDs, Rally runtime logs, worktree bundles, and other personal or machine-specific data that should not ship publicly
34
+
35
+ **Scope**: Production code paths and public release/package surfaces. Test files, fixtures, dev-only code, and clearly synthetic documentation examples are excluded.
36
+
37
+ ## Resolution
38
+
39
+ - Blocking issues (fake data rendered to users, data supporting user decisions, or private data shipping in public surfaces) -> route back to Phase 5 (Iterate). Do not halt the run; the orchestrator should invoke the appropriate implementer, auditor, or specialist agent to fix the issue and then re-run validation.
40
+ - Warnings (TODO in comments, minor language issues) → include in Review-F report
41
+
42
+ Prefer `.gitignore` plus untracking for runtime/generated files, archive or private-store relocation over deletion for useful evidence, and redaction/scrubbing over removing useful public documentation.