gentyr 1.3.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 (599) hide show
  1. package/.claude/agents/antipattern-hunter.md +176 -0
  2. package/.claude/agents/code-reviewer.md +205 -0
  3. package/.claude/agents/code-writer.md +154 -0
  4. package/.claude/agents/deputy-cto.md +309 -0
  5. package/.claude/agents/feedback-agent.md +101 -0
  6. package/.claude/agents/investigator.md +136 -0
  7. package/.claude/agents/product-manager.md +97 -0
  8. package/.claude/agents/project-manager.md +116 -0
  9. package/.claude/agents/repo-hygiene-expert.md +626 -0
  10. package/.claude/agents/secret-manager.md +324 -0
  11. package/.claude/agents/test-writer.md +354 -0
  12. package/.claude/commands/configure-personas.md +144 -0
  13. package/.claude/commands/cto-report.md +36 -0
  14. package/.claude/commands/demo.md +89 -0
  15. package/.claude/commands/deputy-cto.md +345 -0
  16. package/.claude/commands/hotfix.md +31 -0
  17. package/.claude/commands/overdrive-gentyr.md +167 -0
  18. package/.claude/commands/product-manager.md +32 -0
  19. package/.claude/commands/push-migrations.md +86 -0
  20. package/.claude/commands/push-secrets.md +97 -0
  21. package/.claude/commands/services.json.example +30 -0
  22. package/.claude/commands/setup-gentyr.md +396 -0
  23. package/.claude/commands/show.md +42 -0
  24. package/.claude/commands/spawn-tasks.md +79 -0
  25. package/.claude/commands/toggle-automation-gentyr.md +75 -0
  26. package/.claude/commands/toggle-product-manager.md +19 -0
  27. package/.claude/commands/triage.md +69 -0
  28. package/.claude/hooks/README.md +686 -0
  29. package/.claude/hooks/__tests__/README.md +129 -0
  30. package/.claude/hooks/agent-tracker.js +434 -0
  31. package/.claude/hooks/antipattern-hunter-hook.js +401 -0
  32. package/.claude/hooks/api-key-watcher.js +289 -0
  33. package/.claude/hooks/block-no-verify.js +301 -0
  34. package/.claude/hooks/bypass-approval-hook.js +313 -0
  35. package/.claude/hooks/compliance-checker.js +1309 -0
  36. package/.claude/hooks/config-reader.js +143 -0
  37. package/.claude/hooks/credential-file-guard.js +1139 -0
  38. package/.claude/hooks/credential-health-check.js +168 -0
  39. package/.claude/hooks/credential-sync-hook.js +79 -0
  40. package/.claude/hooks/cto-notification-hook.js +656 -0
  41. package/.claude/hooks/feedback-launcher.js +424 -0
  42. package/.claude/hooks/feedback-orchestrator.js +367 -0
  43. package/.claude/hooks/gentyr-splash.js +47 -0
  44. package/.claude/hooks/gentyr-sync.js +389 -0
  45. package/.claude/hooks/hourly-automation.js +3340 -0
  46. package/.claude/hooks/key-sync.js +899 -0
  47. package/.claude/hooks/lib/approval-utils.js +731 -0
  48. package/.claude/hooks/lib/feature-branch-helper.js +102 -0
  49. package/.claude/hooks/lib/worktree-manager.js +330 -0
  50. package/.claude/hooks/mapping-validator.js +285 -0
  51. package/.claude/hooks/plan-executor.js +398 -0
  52. package/.claude/hooks/playwright-cli-guard.js +104 -0
  53. package/.claude/hooks/playwright-health-check.js +71 -0
  54. package/.claude/hooks/pre-commit-review.js +725 -0
  55. package/.claude/hooks/prompts/local-spec-enforcement.md +310 -0
  56. package/.claude/hooks/prompts/mapping-fix.md +92 -0
  57. package/.claude/hooks/prompts/mapping-review.md +140 -0
  58. package/.claude/hooks/prompts/schema-mapper.md +185 -0
  59. package/.claude/hooks/prompts/spec-enforcement.md +233 -0
  60. package/.claude/hooks/protected-action-approval-hook.js +336 -0
  61. package/.claude/hooks/protected-action-gate.js +562 -0
  62. package/.claude/hooks/protected-actions.json +208 -0
  63. package/.claude/hooks/protected-actions.json.template +122 -0
  64. package/.claude/hooks/quota-monitor.js +490 -0
  65. package/.claude/hooks/reporters/jest-failure-reporter.js +401 -0
  66. package/.claude/hooks/reporters/playwright-failure-reporter.js +446 -0
  67. package/.claude/hooks/reporters/vitest-failure-reporter.js +443 -0
  68. package/.claude/hooks/schema-mapper-hook.js +544 -0
  69. package/.claude/hooks/secret-leak-detector.js +216 -0
  70. package/.claude/hooks/session-reviver.js +514 -0
  71. package/.claude/hooks/slash-command-prefetch.js +1145 -0
  72. package/.claude/hooks/stale-work-detector.js +205 -0
  73. package/.claude/hooks/stop-continue-hook.js +414 -0
  74. package/.claude/hooks/todo-maintenance.js +522 -0
  75. package/.claude/hooks/todo-processing-prompt.md +75 -0
  76. package/.claude/hooks/usage-optimizer.js +791 -0
  77. package/.claude/mcp/README.md +246 -0
  78. package/.claude/settings.json.template +168 -0
  79. package/.mcp.json.template +207 -0
  80. package/CLAUDE.md +340 -0
  81. package/CLAUDE.md.gentyr-section +89 -0
  82. package/LICENSE +21 -0
  83. package/README.md +297 -0
  84. package/cli/commands/init.js +471 -0
  85. package/cli/commands/migrate.js +132 -0
  86. package/cli/commands/protect.js +271 -0
  87. package/cli/commands/scaffold.js +48 -0
  88. package/cli/commands/status.js +133 -0
  89. package/cli/commands/sync.js +101 -0
  90. package/cli/commands/uninstall.js +207 -0
  91. package/cli/index.js +111 -0
  92. package/cli/lib/config-gen.js +214 -0
  93. package/cli/lib/resolve-framework.js +97 -0
  94. package/cli/lib/state.js +140 -0
  95. package/cli/lib/symlinks.js +260 -0
  96. package/docs/AUTOMATION-SYSTEMS.md +484 -0
  97. package/docs/BINARY-PATCHING.md +212 -0
  98. package/docs/CHANGELOG.md +2830 -0
  99. package/docs/CREDENTIAL-DETECTION.md +151 -0
  100. package/docs/CTO-DASHBOARD.md +476 -0
  101. package/docs/DEPLOYMENT-FLOW.md +477 -0
  102. package/docs/DEVELOPER.md +116 -0
  103. package/docs/Executive.md +372 -0
  104. package/docs/SECRET-PATHS.md +77 -0
  105. package/docs/SETUP-GUIDE.md +419 -0
  106. package/docs/STACK.md +109 -0
  107. package/docs/TESTING.md +440 -0
  108. package/docs/assets/claude-logo.svg +3 -0
  109. package/docs/sessions/2026-01-24-spec-suite-implementation.md +190 -0
  110. package/docs/sessions/2026-02-15-feedback-e2e-audit.md +484 -0
  111. package/docs/sessions/2026-02-20-credential-rotation-experiments.md +340 -0
  112. package/docs/sessions/TEST-COVERAGE-REPORT-2026-02-20.md +168 -0
  113. package/docs/shared/EPHEMERAL-STATE-FILES.md +115 -0
  114. package/docs/shared/PROTECTION-SYSTEM.md +341 -0
  115. package/husky/post-commit +10 -0
  116. package/husky/pre-commit +40 -0
  117. package/husky/pre-push +94 -0
  118. package/package.json +43 -0
  119. package/packages/cto-dashboard/package-lock.json +3510 -0
  120. package/packages/cto-dashboard/package.json +41 -0
  121. package/packages/cto-dashboard/pnpm-lock.yaml +2168 -0
  122. package/packages/mcp-servers/dist/__testUtils__/fixtures.d.ts +220 -0
  123. package/packages/mcp-servers/dist/__testUtils__/fixtures.d.ts.map +1 -0
  124. package/packages/mcp-servers/dist/__testUtils__/fixtures.js +376 -0
  125. package/packages/mcp-servers/dist/__testUtils__/fixtures.js.map +1 -0
  126. package/packages/mcp-servers/dist/__testUtils__/index.d.ts +121 -0
  127. package/packages/mcp-servers/dist/__testUtils__/index.d.ts.map +1 -0
  128. package/packages/mcp-servers/dist/__testUtils__/index.js +180 -0
  129. package/packages/mcp-servers/dist/__testUtils__/index.js.map +1 -0
  130. package/packages/mcp-servers/dist/__testUtils__/schemas.d.ts +84 -0
  131. package/packages/mcp-servers/dist/__testUtils__/schemas.d.ts.map +1 -0
  132. package/packages/mcp-servers/dist/__testUtils__/schemas.js +309 -0
  133. package/packages/mcp-servers/dist/__testUtils__/schemas.js.map +1 -0
  134. package/packages/mcp-servers/dist/agent-reports/index.d.ts +7 -0
  135. package/packages/mcp-servers/dist/agent-reports/index.d.ts.map +1 -0
  136. package/packages/mcp-servers/dist/agent-reports/index.js +8 -0
  137. package/packages/mcp-servers/dist/agent-reports/index.js.map +1 -0
  138. package/packages/mcp-servers/dist/agent-reports/server.d.ts +22 -0
  139. package/packages/mcp-servers/dist/agent-reports/server.d.ts.map +1 -0
  140. package/packages/mcp-servers/dist/agent-reports/server.js +535 -0
  141. package/packages/mcp-servers/dist/agent-reports/server.js.map +1 -0
  142. package/packages/mcp-servers/dist/agent-reports/types.d.ts +258 -0
  143. package/packages/mcp-servers/dist/agent-reports/types.d.ts.map +1 -0
  144. package/packages/mcp-servers/dist/agent-reports/types.js +81 -0
  145. package/packages/mcp-servers/dist/agent-reports/types.js.map +1 -0
  146. package/packages/mcp-servers/dist/agent-tracker/index.d.ts +5 -0
  147. package/packages/mcp-servers/dist/agent-tracker/index.d.ts.map +1 -0
  148. package/packages/mcp-servers/dist/agent-tracker/index.js +5 -0
  149. package/packages/mcp-servers/dist/agent-tracker/index.js.map +1 -0
  150. package/packages/mcp-servers/dist/agent-tracker/server.d.ts +12 -0
  151. package/packages/mcp-servers/dist/agent-tracker/server.d.ts.map +1 -0
  152. package/packages/mcp-servers/dist/agent-tracker/server.js +919 -0
  153. package/packages/mcp-servers/dist/agent-tracker/server.js.map +1 -0
  154. package/packages/mcp-servers/dist/agent-tracker/types.d.ts +328 -0
  155. package/packages/mcp-servers/dist/agent-tracker/types.d.ts.map +1 -0
  156. package/packages/mcp-servers/dist/agent-tracker/types.js +128 -0
  157. package/packages/mcp-servers/dist/agent-tracker/types.js.map +1 -0
  158. package/packages/mcp-servers/dist/chrome-bridge/browser-tips.d.ts +27 -0
  159. package/packages/mcp-servers/dist/chrome-bridge/browser-tips.d.ts.map +1 -0
  160. package/packages/mcp-servers/dist/chrome-bridge/browser-tips.js +167 -0
  161. package/packages/mcp-servers/dist/chrome-bridge/browser-tips.js.map +1 -0
  162. package/packages/mcp-servers/dist/chrome-bridge/index.d.ts +6 -0
  163. package/packages/mcp-servers/dist/chrome-bridge/index.d.ts.map +1 -0
  164. package/packages/mcp-servers/dist/chrome-bridge/index.js +6 -0
  165. package/packages/mcp-servers/dist/chrome-bridge/index.js.map +1 -0
  166. package/packages/mcp-servers/dist/chrome-bridge/server.d.ts +13 -0
  167. package/packages/mcp-servers/dist/chrome-bridge/server.d.ts.map +1 -0
  168. package/packages/mcp-servers/dist/chrome-bridge/server.js +959 -0
  169. package/packages/mcp-servers/dist/chrome-bridge/server.js.map +1 -0
  170. package/packages/mcp-servers/dist/chrome-bridge/types.d.ts +41 -0
  171. package/packages/mcp-servers/dist/chrome-bridge/types.d.ts.map +1 -0
  172. package/packages/mcp-servers/dist/chrome-bridge/types.js +8 -0
  173. package/packages/mcp-servers/dist/chrome-bridge/types.js.map +1 -0
  174. package/packages/mcp-servers/dist/cloudflare/index.d.ts +8 -0
  175. package/packages/mcp-servers/dist/cloudflare/index.d.ts.map +1 -0
  176. package/packages/mcp-servers/dist/cloudflare/index.js +8 -0
  177. package/packages/mcp-servers/dist/cloudflare/index.js.map +1 -0
  178. package/packages/mcp-servers/dist/cloudflare/server.d.ts +16 -0
  179. package/packages/mcp-servers/dist/cloudflare/server.d.ts.map +1 -0
  180. package/packages/mcp-servers/dist/cloudflare/server.js +253 -0
  181. package/packages/mcp-servers/dist/cloudflare/server.js.map +1 -0
  182. package/packages/mcp-servers/dist/cloudflare/types.d.ts +141 -0
  183. package/packages/mcp-servers/dist/cloudflare/types.d.ts.map +1 -0
  184. package/packages/mcp-servers/dist/cloudflare/types.js +53 -0
  185. package/packages/mcp-servers/dist/cloudflare/types.js.map +1 -0
  186. package/packages/mcp-servers/dist/codecov/index.d.ts +7 -0
  187. package/packages/mcp-servers/dist/codecov/index.d.ts.map +1 -0
  188. package/packages/mcp-servers/dist/codecov/index.js +7 -0
  189. package/packages/mcp-servers/dist/codecov/index.js.map +1 -0
  190. package/packages/mcp-servers/dist/codecov/server.d.ts +21 -0
  191. package/packages/mcp-servers/dist/codecov/server.d.ts.map +1 -0
  192. package/packages/mcp-servers/dist/codecov/server.js +376 -0
  193. package/packages/mcp-servers/dist/codecov/server.js.map +1 -0
  194. package/packages/mcp-servers/dist/codecov/types.d.ts +269 -0
  195. package/packages/mcp-servers/dist/codecov/types.d.ts.map +1 -0
  196. package/packages/mcp-servers/dist/codecov/types.js +128 -0
  197. package/packages/mcp-servers/dist/codecov/types.js.map +1 -0
  198. package/packages/mcp-servers/dist/cto-report/index.d.ts +9 -0
  199. package/packages/mcp-servers/dist/cto-report/index.d.ts.map +1 -0
  200. package/packages/mcp-servers/dist/cto-report/index.js +9 -0
  201. package/packages/mcp-servers/dist/cto-report/index.js.map +1 -0
  202. package/packages/mcp-servers/dist/cto-report/server.d.ts +14 -0
  203. package/packages/mcp-servers/dist/cto-report/server.d.ts.map +1 -0
  204. package/packages/mcp-servers/dist/cto-report/server.js +859 -0
  205. package/packages/mcp-servers/dist/cto-report/server.js.map +1 -0
  206. package/packages/mcp-servers/dist/cto-report/types.d.ts +213 -0
  207. package/packages/mcp-servers/dist/cto-report/types.d.ts.map +1 -0
  208. package/packages/mcp-servers/dist/cto-report/types.js +29 -0
  209. package/packages/mcp-servers/dist/cto-report/types.js.map +1 -0
  210. package/packages/mcp-servers/dist/cto-reports/index.d.ts +7 -0
  211. package/packages/mcp-servers/dist/cto-reports/index.d.ts.map +1 -0
  212. package/packages/mcp-servers/dist/cto-reports/index.js +8 -0
  213. package/packages/mcp-servers/dist/cto-reports/index.js.map +1 -0
  214. package/packages/mcp-servers/dist/cto-reports/server.d.ts +20 -0
  215. package/packages/mcp-servers/dist/cto-reports/server.d.ts.map +1 -0
  216. package/packages/mcp-servers/dist/cto-reports/server.js +538 -0
  217. package/packages/mcp-servers/dist/cto-reports/server.js.map +1 -0
  218. package/packages/mcp-servers/dist/cto-reports/types.d.ts +236 -0
  219. package/packages/mcp-servers/dist/cto-reports/types.d.ts.map +1 -0
  220. package/packages/mcp-servers/dist/cto-reports/types.js +77 -0
  221. package/packages/mcp-servers/dist/cto-reports/types.js.map +1 -0
  222. package/packages/mcp-servers/dist/deputy-cto/index.d.ts +7 -0
  223. package/packages/mcp-servers/dist/deputy-cto/index.d.ts.map +1 -0
  224. package/packages/mcp-servers/dist/deputy-cto/index.js +8 -0
  225. package/packages/mcp-servers/dist/deputy-cto/index.js.map +1 -0
  226. package/packages/mcp-servers/dist/deputy-cto/server.d.ts +23 -0
  227. package/packages/mcp-servers/dist/deputy-cto/server.d.ts.map +1 -0
  228. package/packages/mcp-servers/dist/deputy-cto/server.js +1700 -0
  229. package/packages/mcp-servers/dist/deputy-cto/server.js.map +1 -0
  230. package/packages/mcp-servers/dist/deputy-cto/types.d.ts +439 -0
  231. package/packages/mcp-servers/dist/deputy-cto/types.d.ts.map +1 -0
  232. package/packages/mcp-servers/dist/deputy-cto/types.js +102 -0
  233. package/packages/mcp-servers/dist/deputy-cto/types.js.map +1 -0
  234. package/packages/mcp-servers/dist/elastic-logs/index.d.ts +5 -0
  235. package/packages/mcp-servers/dist/elastic-logs/index.d.ts.map +1 -0
  236. package/packages/mcp-servers/dist/elastic-logs/index.js +5 -0
  237. package/packages/mcp-servers/dist/elastic-logs/index.js.map +1 -0
  238. package/packages/mcp-servers/dist/elastic-logs/server.d.ts +18 -0
  239. package/packages/mcp-servers/dist/elastic-logs/server.d.ts.map +1 -0
  240. package/packages/mcp-servers/dist/elastic-logs/server.js +259 -0
  241. package/packages/mcp-servers/dist/elastic-logs/server.js.map +1 -0
  242. package/packages/mcp-servers/dist/elastic-logs/types.d.ts +107 -0
  243. package/packages/mcp-servers/dist/elastic-logs/types.d.ts.map +1 -0
  244. package/packages/mcp-servers/dist/elastic-logs/types.js +31 -0
  245. package/packages/mcp-servers/dist/elastic-logs/types.js.map +1 -0
  246. package/packages/mcp-servers/dist/feedback-explorer/index.d.ts +2 -0
  247. package/packages/mcp-servers/dist/feedback-explorer/index.d.ts.map +1 -0
  248. package/packages/mcp-servers/dist/feedback-explorer/index.js +2 -0
  249. package/packages/mcp-servers/dist/feedback-explorer/index.js.map +1 -0
  250. package/packages/mcp-servers/dist/feedback-explorer/server.d.ts +21 -0
  251. package/packages/mcp-servers/dist/feedback-explorer/server.d.ts.map +1 -0
  252. package/packages/mcp-servers/dist/feedback-explorer/server.js +580 -0
  253. package/packages/mcp-servers/dist/feedback-explorer/server.js.map +1 -0
  254. package/packages/mcp-servers/dist/feedback-explorer/types.d.ts +331 -0
  255. package/packages/mcp-servers/dist/feedback-explorer/types.d.ts.map +1 -0
  256. package/packages/mcp-servers/dist/feedback-explorer/types.js +40 -0
  257. package/packages/mcp-servers/dist/feedback-explorer/types.js.map +1 -0
  258. package/packages/mcp-servers/dist/feedback-reporter/index.d.ts +9 -0
  259. package/packages/mcp-servers/dist/feedback-reporter/index.d.ts.map +1 -0
  260. package/packages/mcp-servers/dist/feedback-reporter/index.js +9 -0
  261. package/packages/mcp-servers/dist/feedback-reporter/index.js.map +1 -0
  262. package/packages/mcp-servers/dist/feedback-reporter/server.d.ts +36 -0
  263. package/packages/mcp-servers/dist/feedback-reporter/server.d.ts.map +1 -0
  264. package/packages/mcp-servers/dist/feedback-reporter/server.js +392 -0
  265. package/packages/mcp-servers/dist/feedback-reporter/server.js.map +1 -0
  266. package/packages/mcp-servers/dist/feedback-reporter/types.d.ts +152 -0
  267. package/packages/mcp-servers/dist/feedback-reporter/types.d.ts.map +1 -0
  268. package/packages/mcp-servers/dist/feedback-reporter/types.js +67 -0
  269. package/packages/mcp-servers/dist/feedback-reporter/types.js.map +1 -0
  270. package/packages/mcp-servers/dist/github/index.d.ts +7 -0
  271. package/packages/mcp-servers/dist/github/index.d.ts.map +1 -0
  272. package/packages/mcp-servers/dist/github/index.js +7 -0
  273. package/packages/mcp-servers/dist/github/index.js.map +1 -0
  274. package/packages/mcp-servers/dist/github/server.d.ts +15 -0
  275. package/packages/mcp-servers/dist/github/server.d.ts.map +1 -0
  276. package/packages/mcp-servers/dist/github/server.js +686 -0
  277. package/packages/mcp-servers/dist/github/server.js.map +1 -0
  278. package/packages/mcp-servers/dist/github/types.d.ts +660 -0
  279. package/packages/mcp-servers/dist/github/types.d.ts.map +1 -0
  280. package/packages/mcp-servers/dist/github/types.js +209 -0
  281. package/packages/mcp-servers/dist/github/types.js.map +1 -0
  282. package/packages/mcp-servers/dist/index.d.ts +30 -0
  283. package/packages/mcp-servers/dist/index.d.ts.map +1 -0
  284. package/packages/mcp-servers/dist/index.js +32 -0
  285. package/packages/mcp-servers/dist/index.js.map +1 -0
  286. package/packages/mcp-servers/dist/makerkit-docs/index.d.ts +5 -0
  287. package/packages/mcp-servers/dist/makerkit-docs/index.d.ts.map +1 -0
  288. package/packages/mcp-servers/dist/makerkit-docs/index.js +5 -0
  289. package/packages/mcp-servers/dist/makerkit-docs/index.js.map +1 -0
  290. package/packages/mcp-servers/dist/makerkit-docs/server.d.ts +15 -0
  291. package/packages/mcp-servers/dist/makerkit-docs/server.d.ts.map +1 -0
  292. package/packages/mcp-servers/dist/makerkit-docs/server.js +252 -0
  293. package/packages/mcp-servers/dist/makerkit-docs/server.js.map +1 -0
  294. package/packages/mcp-servers/dist/makerkit-docs/types.d.ts +74 -0
  295. package/packages/mcp-servers/dist/makerkit-docs/types.d.ts.map +1 -0
  296. package/packages/mcp-servers/dist/makerkit-docs/types.js +20 -0
  297. package/packages/mcp-servers/dist/makerkit-docs/types.js.map +1 -0
  298. package/packages/mcp-servers/dist/onepassword/index.d.ts +2 -0
  299. package/packages/mcp-servers/dist/onepassword/index.d.ts.map +1 -0
  300. package/packages/mcp-servers/dist/onepassword/index.js +2 -0
  301. package/packages/mcp-servers/dist/onepassword/index.js.map +1 -0
  302. package/packages/mcp-servers/dist/onepassword/server.d.ts +2 -0
  303. package/packages/mcp-servers/dist/onepassword/server.d.ts.map +1 -0
  304. package/packages/mcp-servers/dist/onepassword/server.js +159 -0
  305. package/packages/mcp-servers/dist/onepassword/server.js.map +1 -0
  306. package/packages/mcp-servers/dist/onepassword/types.d.ts +55 -0
  307. package/packages/mcp-servers/dist/onepassword/types.d.ts.map +1 -0
  308. package/packages/mcp-servers/dist/onepassword/types.js +22 -0
  309. package/packages/mcp-servers/dist/onepassword/types.js.map +1 -0
  310. package/packages/mcp-servers/dist/playwright/helpers.d.ts +20 -0
  311. package/packages/mcp-servers/dist/playwright/helpers.d.ts.map +1 -0
  312. package/packages/mcp-servers/dist/playwright/helpers.js +31 -0
  313. package/packages/mcp-servers/dist/playwright/helpers.js.map +1 -0
  314. package/packages/mcp-servers/dist/playwright/index.d.ts +5 -0
  315. package/packages/mcp-servers/dist/playwright/index.d.ts.map +1 -0
  316. package/packages/mcp-servers/dist/playwright/index.js +5 -0
  317. package/packages/mcp-servers/dist/playwright/index.js.map +1 -0
  318. package/packages/mcp-servers/dist/playwright/server.d.ts +13 -0
  319. package/packages/mcp-servers/dist/playwright/server.d.ts.map +1 -0
  320. package/packages/mcp-servers/dist/playwright/server.js +1201 -0
  321. package/packages/mcp-servers/dist/playwright/server.js.map +1 -0
  322. package/packages/mcp-servers/dist/playwright/types.d.ts +216 -0
  323. package/packages/mcp-servers/dist/playwright/types.d.ts.map +1 -0
  324. package/packages/mcp-servers/dist/playwright/types.js +172 -0
  325. package/packages/mcp-servers/dist/playwright/types.js.map +1 -0
  326. package/packages/mcp-servers/dist/playwright-feedback/browser-manager.d.ts +39 -0
  327. package/packages/mcp-servers/dist/playwright-feedback/browser-manager.d.ts.map +1 -0
  328. package/packages/mcp-servers/dist/playwright-feedback/browser-manager.js +71 -0
  329. package/packages/mcp-servers/dist/playwright-feedback/browser-manager.js.map +1 -0
  330. package/packages/mcp-servers/dist/playwright-feedback/index.d.ts +5 -0
  331. package/packages/mcp-servers/dist/playwright-feedback/index.d.ts.map +1 -0
  332. package/packages/mcp-servers/dist/playwright-feedback/index.js +5 -0
  333. package/packages/mcp-servers/dist/playwright-feedback/index.js.map +1 -0
  334. package/packages/mcp-servers/dist/playwright-feedback/server.d.ts +34 -0
  335. package/packages/mcp-servers/dist/playwright-feedback/server.d.ts.map +1 -0
  336. package/packages/mcp-servers/dist/playwright-feedback/server.js +538 -0
  337. package/packages/mcp-servers/dist/playwright-feedback/server.js.map +1 -0
  338. package/packages/mcp-servers/dist/playwright-feedback/types.d.ts +305 -0
  339. package/packages/mcp-servers/dist/playwright-feedback/types.d.ts.map +1 -0
  340. package/packages/mcp-servers/dist/playwright-feedback/types.js +123 -0
  341. package/packages/mcp-servers/dist/playwright-feedback/types.js.map +1 -0
  342. package/packages/mcp-servers/dist/product-manager/server.d.ts +17 -0
  343. package/packages/mcp-servers/dist/product-manager/server.d.ts.map +1 -0
  344. package/packages/mcp-servers/dist/product-manager/server.js +690 -0
  345. package/packages/mcp-servers/dist/product-manager/server.js.map +1 -0
  346. package/packages/mcp-servers/dist/product-manager/types.d.ts +286 -0
  347. package/packages/mcp-servers/dist/product-manager/types.d.ts.map +1 -0
  348. package/packages/mcp-servers/dist/product-manager/types.js +99 -0
  349. package/packages/mcp-servers/dist/product-manager/types.js.map +1 -0
  350. package/packages/mcp-servers/dist/programmatic-feedback/index.d.ts +7 -0
  351. package/packages/mcp-servers/dist/programmatic-feedback/index.d.ts.map +1 -0
  352. package/packages/mcp-servers/dist/programmatic-feedback/index.js +7 -0
  353. package/packages/mcp-servers/dist/programmatic-feedback/index.js.map +1 -0
  354. package/packages/mcp-servers/dist/programmatic-feedback/sandbox.d.ts +19 -0
  355. package/packages/mcp-servers/dist/programmatic-feedback/sandbox.d.ts.map +1 -0
  356. package/packages/mcp-servers/dist/programmatic-feedback/sandbox.js +174 -0
  357. package/packages/mcp-servers/dist/programmatic-feedback/sandbox.js.map +1 -0
  358. package/packages/mcp-servers/dist/programmatic-feedback/server.d.ts +35 -0
  359. package/packages/mcp-servers/dist/programmatic-feedback/server.d.ts.map +1 -0
  360. package/packages/mcp-servers/dist/programmatic-feedback/server.js +465 -0
  361. package/packages/mcp-servers/dist/programmatic-feedback/server.js.map +1 -0
  362. package/packages/mcp-servers/dist/programmatic-feedback/types.d.ts +127 -0
  363. package/packages/mcp-servers/dist/programmatic-feedback/types.d.ts.map +1 -0
  364. package/packages/mcp-servers/dist/programmatic-feedback/types.js +80 -0
  365. package/packages/mcp-servers/dist/programmatic-feedback/types.js.map +1 -0
  366. package/packages/mcp-servers/dist/render/index.d.ts +8 -0
  367. package/packages/mcp-servers/dist/render/index.d.ts.map +1 -0
  368. package/packages/mcp-servers/dist/render/index.js +8 -0
  369. package/packages/mcp-servers/dist/render/index.js.map +1 -0
  370. package/packages/mcp-servers/dist/render/server.d.ts +15 -0
  371. package/packages/mcp-servers/dist/render/server.d.ts.map +1 -0
  372. package/packages/mcp-servers/dist/render/server.js +428 -0
  373. package/packages/mcp-servers/dist/render/server.js.map +1 -0
  374. package/packages/mcp-servers/dist/render/types.d.ts +273 -0
  375. package/packages/mcp-servers/dist/render/types.d.ts.map +1 -0
  376. package/packages/mcp-servers/dist/render/types.js +102 -0
  377. package/packages/mcp-servers/dist/render/types.js.map +1 -0
  378. package/packages/mcp-servers/dist/resend/index.d.ts +7 -0
  379. package/packages/mcp-servers/dist/resend/index.d.ts.map +1 -0
  380. package/packages/mcp-servers/dist/resend/index.js +7 -0
  381. package/packages/mcp-servers/dist/resend/index.js.map +1 -0
  382. package/packages/mcp-servers/dist/resend/server.d.ts +15 -0
  383. package/packages/mcp-servers/dist/resend/server.d.ts.map +1 -0
  384. package/packages/mcp-servers/dist/resend/server.js +298 -0
  385. package/packages/mcp-servers/dist/resend/server.js.map +1 -0
  386. package/packages/mcp-servers/dist/resend/types.d.ts +222 -0
  387. package/packages/mcp-servers/dist/resend/types.d.ts.map +1 -0
  388. package/packages/mcp-servers/dist/resend/types.js +58 -0
  389. package/packages/mcp-servers/dist/resend/types.js.map +1 -0
  390. package/packages/mcp-servers/dist/review-queue/index.d.ts +6 -0
  391. package/packages/mcp-servers/dist/review-queue/index.d.ts.map +1 -0
  392. package/packages/mcp-servers/dist/review-queue/index.js +6 -0
  393. package/packages/mcp-servers/dist/review-queue/index.js.map +1 -0
  394. package/packages/mcp-servers/dist/review-queue/server.d.ts +17 -0
  395. package/packages/mcp-servers/dist/review-queue/server.d.ts.map +1 -0
  396. package/packages/mcp-servers/dist/review-queue/server.js +348 -0
  397. package/packages/mcp-servers/dist/review-queue/server.js.map +1 -0
  398. package/packages/mcp-servers/dist/review-queue/types.d.ts +162 -0
  399. package/packages/mcp-servers/dist/review-queue/types.d.ts.map +1 -0
  400. package/packages/mcp-servers/dist/review-queue/types.js +56 -0
  401. package/packages/mcp-servers/dist/review-queue/types.js.map +1 -0
  402. package/packages/mcp-servers/dist/secret-sync/server.d.ts +19 -0
  403. package/packages/mcp-servers/dist/secret-sync/server.d.ts.map +1 -0
  404. package/packages/mcp-servers/dist/secret-sync/server.js +1139 -0
  405. package/packages/mcp-servers/dist/secret-sync/server.js.map +1 -0
  406. package/packages/mcp-servers/dist/secret-sync/types.d.ts +442 -0
  407. package/packages/mcp-servers/dist/secret-sync/types.d.ts.map +1 -0
  408. package/packages/mcp-servers/dist/secret-sync/types.js +113 -0
  409. package/packages/mcp-servers/dist/secret-sync/types.js.map +1 -0
  410. package/packages/mcp-servers/dist/session-events/index.d.ts +5 -0
  411. package/packages/mcp-servers/dist/session-events/index.d.ts.map +1 -0
  412. package/packages/mcp-servers/dist/session-events/index.js +5 -0
  413. package/packages/mcp-servers/dist/session-events/index.js.map +1 -0
  414. package/packages/mcp-servers/dist/session-events/server.d.ts +11 -0
  415. package/packages/mcp-servers/dist/session-events/server.d.ts.map +1 -0
  416. package/packages/mcp-servers/dist/session-events/server.js +290 -0
  417. package/packages/mcp-servers/dist/session-events/server.js.map +1 -0
  418. package/packages/mcp-servers/dist/session-events/types.d.ts +213 -0
  419. package/packages/mcp-servers/dist/session-events/types.d.ts.map +1 -0
  420. package/packages/mcp-servers/dist/session-events/types.js +69 -0
  421. package/packages/mcp-servers/dist/session-events/types.js.map +1 -0
  422. package/packages/mcp-servers/dist/session-restart/index.d.ts +9 -0
  423. package/packages/mcp-servers/dist/session-restart/index.d.ts.map +1 -0
  424. package/packages/mcp-servers/dist/session-restart/index.js +9 -0
  425. package/packages/mcp-servers/dist/session-restart/index.js.map +1 -0
  426. package/packages/mcp-servers/dist/session-restart/server.d.ts +20 -0
  427. package/packages/mcp-servers/dist/session-restart/server.d.ts.map +1 -0
  428. package/packages/mcp-servers/dist/session-restart/server.js +411 -0
  429. package/packages/mcp-servers/dist/session-restart/server.js.map +1 -0
  430. package/packages/mcp-servers/dist/session-restart/types.d.ts +26 -0
  431. package/packages/mcp-servers/dist/session-restart/types.d.ts.map +1 -0
  432. package/packages/mcp-servers/dist/session-restart/types.js +16 -0
  433. package/packages/mcp-servers/dist/session-restart/types.js.map +1 -0
  434. package/packages/mcp-servers/dist/setup-helper/index.d.ts +5 -0
  435. package/packages/mcp-servers/dist/setup-helper/index.d.ts.map +1 -0
  436. package/packages/mcp-servers/dist/setup-helper/index.js +5 -0
  437. package/packages/mcp-servers/dist/setup-helper/index.js.map +1 -0
  438. package/packages/mcp-servers/dist/setup-helper/server.d.ts +14 -0
  439. package/packages/mcp-servers/dist/setup-helper/server.d.ts.map +1 -0
  440. package/packages/mcp-servers/dist/setup-helper/server.js +454 -0
  441. package/packages/mcp-servers/dist/setup-helper/server.js.map +1 -0
  442. package/packages/mcp-servers/dist/setup-helper/types.d.ts +81 -0
  443. package/packages/mcp-servers/dist/setup-helper/types.d.ts.map +1 -0
  444. package/packages/mcp-servers/dist/setup-helper/types.js +41 -0
  445. package/packages/mcp-servers/dist/setup-helper/types.js.map +1 -0
  446. package/packages/mcp-servers/dist/shared/audited-server.d.ts +31 -0
  447. package/packages/mcp-servers/dist/shared/audited-server.d.ts.map +1 -0
  448. package/packages/mcp-servers/dist/shared/audited-server.js +126 -0
  449. package/packages/mcp-servers/dist/shared/audited-server.js.map +1 -0
  450. package/packages/mcp-servers/dist/shared/constants.d.ts +26 -0
  451. package/packages/mcp-servers/dist/shared/constants.d.ts.map +1 -0
  452. package/packages/mcp-servers/dist/shared/constants.js +41 -0
  453. package/packages/mcp-servers/dist/shared/constants.js.map +1 -0
  454. package/packages/mcp-servers/dist/shared/index.d.ts +6 -0
  455. package/packages/mcp-servers/dist/shared/index.d.ts.map +1 -0
  456. package/packages/mcp-servers/dist/shared/index.js +6 -0
  457. package/packages/mcp-servers/dist/shared/index.js.map +1 -0
  458. package/packages/mcp-servers/dist/shared/readonly-db.d.ts +11 -0
  459. package/packages/mcp-servers/dist/shared/readonly-db.d.ts.map +1 -0
  460. package/packages/mcp-servers/dist/shared/readonly-db.js +47 -0
  461. package/packages/mcp-servers/dist/shared/readonly-db.js.map +1 -0
  462. package/packages/mcp-servers/dist/shared/resolve-framework.d.ts +20 -0
  463. package/packages/mcp-servers/dist/shared/resolve-framework.d.ts.map +1 -0
  464. package/packages/mcp-servers/dist/shared/resolve-framework.js +65 -0
  465. package/packages/mcp-servers/dist/shared/resolve-framework.js.map +1 -0
  466. package/packages/mcp-servers/dist/shared/server.d.ts +86 -0
  467. package/packages/mcp-servers/dist/shared/server.d.ts.map +1 -0
  468. package/packages/mcp-servers/dist/shared/server.js +291 -0
  469. package/packages/mcp-servers/dist/shared/server.js.map +1 -0
  470. package/packages/mcp-servers/dist/shared/types.d.ts +113 -0
  471. package/packages/mcp-servers/dist/shared/types.d.ts.map +1 -0
  472. package/packages/mcp-servers/dist/shared/types.js +36 -0
  473. package/packages/mcp-servers/dist/shared/types.js.map +1 -0
  474. package/packages/mcp-servers/dist/show/server.d.ts +12 -0
  475. package/packages/mcp-servers/dist/show/server.d.ts.map +1 -0
  476. package/packages/mcp-servers/dist/show/server.js +97 -0
  477. package/packages/mcp-servers/dist/show/server.js.map +1 -0
  478. package/packages/mcp-servers/dist/show/types.d.ts +19 -0
  479. package/packages/mcp-servers/dist/show/types.d.ts.map +1 -0
  480. package/packages/mcp-servers/dist/show/types.js +32 -0
  481. package/packages/mcp-servers/dist/show/types.js.map +1 -0
  482. package/packages/mcp-servers/dist/specs-browser/index.d.ts +5 -0
  483. package/packages/mcp-servers/dist/specs-browser/index.d.ts.map +1 -0
  484. package/packages/mcp-servers/dist/specs-browser/index.js +5 -0
  485. package/packages/mcp-servers/dist/specs-browser/index.js.map +1 -0
  486. package/packages/mcp-servers/dist/specs-browser/server.d.ts +13 -0
  487. package/packages/mcp-servers/dist/specs-browser/server.d.ts.map +1 -0
  488. package/packages/mcp-servers/dist/specs-browser/server.js +692 -0
  489. package/packages/mcp-servers/dist/specs-browser/server.js.map +1 -0
  490. package/packages/mcp-servers/dist/specs-browser/types.d.ts +337 -0
  491. package/packages/mcp-servers/dist/specs-browser/types.d.ts.map +1 -0
  492. package/packages/mcp-servers/dist/specs-browser/types.js +134 -0
  493. package/packages/mcp-servers/dist/specs-browser/types.js.map +1 -0
  494. package/packages/mcp-servers/dist/supabase/index.d.ts +10 -0
  495. package/packages/mcp-servers/dist/supabase/index.d.ts.map +1 -0
  496. package/packages/mcp-servers/dist/supabase/index.js +10 -0
  497. package/packages/mcp-servers/dist/supabase/index.js.map +1 -0
  498. package/packages/mcp-servers/dist/supabase/server.d.ts +20 -0
  499. package/packages/mcp-servers/dist/supabase/server.d.ts.map +1 -0
  500. package/packages/mcp-servers/dist/supabase/server.js +451 -0
  501. package/packages/mcp-servers/dist/supabase/server.js.map +1 -0
  502. package/packages/mcp-servers/dist/supabase/types.d.ts +196 -0
  503. package/packages/mcp-servers/dist/supabase/types.d.ts.map +1 -0
  504. package/packages/mcp-servers/dist/supabase/types.js +76 -0
  505. package/packages/mcp-servers/dist/supabase/types.js.map +1 -0
  506. package/packages/mcp-servers/dist/todo-db/index.d.ts +5 -0
  507. package/packages/mcp-servers/dist/todo-db/index.d.ts.map +1 -0
  508. package/packages/mcp-servers/dist/todo-db/index.js +5 -0
  509. package/packages/mcp-servers/dist/todo-db/index.js.map +1 -0
  510. package/packages/mcp-servers/dist/todo-db/server.d.ts +13 -0
  511. package/packages/mcp-servers/dist/todo-db/server.d.ts.map +1 -0
  512. package/packages/mcp-servers/dist/todo-db/server.js +649 -0
  513. package/packages/mcp-servers/dist/todo-db/server.js.map +1 -0
  514. package/packages/mcp-servers/dist/todo-db/types.d.ts +225 -0
  515. package/packages/mcp-servers/dist/todo-db/types.d.ts.map +1 -0
  516. package/packages/mcp-servers/dist/todo-db/types.js +69 -0
  517. package/packages/mcp-servers/dist/todo-db/types.js.map +1 -0
  518. package/packages/mcp-servers/dist/user-feedback/index.d.ts +7 -0
  519. package/packages/mcp-servers/dist/user-feedback/index.d.ts.map +1 -0
  520. package/packages/mcp-servers/dist/user-feedback/index.js +8 -0
  521. package/packages/mcp-servers/dist/user-feedback/index.js.map +1 -0
  522. package/packages/mcp-servers/dist/user-feedback/server.d.ts +25 -0
  523. package/packages/mcp-servers/dist/user-feedback/server.d.ts.map +1 -0
  524. package/packages/mcp-servers/dist/user-feedback/server.js +914 -0
  525. package/packages/mcp-servers/dist/user-feedback/server.js.map +1 -0
  526. package/packages/mcp-servers/dist/user-feedback/types.d.ts +415 -0
  527. package/packages/mcp-servers/dist/user-feedback/types.d.ts.map +1 -0
  528. package/packages/mcp-servers/dist/user-feedback/types.js +132 -0
  529. package/packages/mcp-servers/dist/user-feedback/types.js.map +1 -0
  530. package/packages/mcp-servers/dist/vercel/index.d.ts +9 -0
  531. package/packages/mcp-servers/dist/vercel/index.d.ts.map +1 -0
  532. package/packages/mcp-servers/dist/vercel/index.js +9 -0
  533. package/packages/mcp-servers/dist/vercel/index.js.map +1 -0
  534. package/packages/mcp-servers/dist/vercel/server.d.ts +17 -0
  535. package/packages/mcp-servers/dist/vercel/server.d.ts.map +1 -0
  536. package/packages/mcp-servers/dist/vercel/server.js +265 -0
  537. package/packages/mcp-servers/dist/vercel/server.js.map +1 -0
  538. package/packages/mcp-servers/dist/vercel/types.d.ts +189 -0
  539. package/packages/mcp-servers/dist/vercel/types.d.ts.map +1 -0
  540. package/packages/mcp-servers/dist/vercel/types.js +65 -0
  541. package/packages/mcp-servers/dist/vercel/types.js.map +1 -0
  542. package/packages/mcp-servers/package-lock.json +3765 -0
  543. package/packages/mcp-servers/package.json +64 -0
  544. package/packages/mcp-servers/test/reporters/test-failure-reporter.ts +372 -0
  545. package/packages/mcp-servers/vitest.config.ts +27 -0
  546. package/scripts/__tests__/README.md +163 -0
  547. package/scripts/apply-credential-hardening.sh +271 -0
  548. package/scripts/credential-providers/manual.js +56 -0
  549. package/scripts/credential-providers/onepassword.js +85 -0
  550. package/scripts/credential-providers/provider-interface.js +104 -0
  551. package/scripts/encrypt-credential.js +337 -0
  552. package/scripts/feedback-launcher.js +338 -0
  553. package/scripts/feedback-orchestrator.js +373 -0
  554. package/scripts/fix-mcp-launcher-issues.sh +97 -0
  555. package/scripts/force-spawn-tasks.js +651 -0
  556. package/scripts/force-triage-reports.js +560 -0
  557. package/scripts/generate-protected-actions-spec.js +142 -0
  558. package/scripts/generate-proxy-certs.sh +158 -0
  559. package/scripts/grant-chrome-ext-permissions.sh +242 -0
  560. package/scripts/mcp-launcher.js +125 -0
  561. package/scripts/merge-settings.cjs +167 -0
  562. package/scripts/patch-clawd.py +844 -0
  563. package/scripts/patch-credential-cache.py +313 -0
  564. package/scripts/patches/credential-file-guard-patched.mjs +573 -0
  565. package/scripts/patches/credential-file-guard.js.patched +573 -0
  566. package/scripts/patches/verify-tokenizer.mjs +132 -0
  567. package/scripts/protect-framework.sh +478 -0
  568. package/scripts/readme-chrome.template +12 -0
  569. package/scripts/reap-completed-agents.js +439 -0
  570. package/scripts/reinstall.sh +86 -0
  571. package/scripts/resign-node.sh +185 -0
  572. package/scripts/rotation-proxy.js +656 -0
  573. package/scripts/rotation-stress-monitor.mjs +862 -0
  574. package/scripts/setup-automation-service.sh +648 -0
  575. package/scripts/setup-check.js +251 -0
  576. package/scripts/watch-claude-version.js +142 -0
  577. package/specs/framework/CORE-INVARIANTS.md +161 -0
  578. package/specs/patterns/AGENT-PATTERNS.md +223 -0
  579. package/specs/patterns/HOOK-PATTERNS.md +242 -0
  580. package/specs/patterns/MCP-SERVER-PATTERNS.md +144 -0
  581. package/templates/config/gitignore.template +14 -0
  582. package/templates/config/merge-chain-check.yml.template +51 -0
  583. package/templates/config/package.json.template +18 -0
  584. package/templates/config/pnpm-workspace.yaml +5 -0
  585. package/templates/config/services.json.template +18 -0
  586. package/templates/config/tsconfig.base.json +17 -0
  587. package/templates/scaffold/integrations/_template/.gitkeep +0 -0
  588. package/templates/scaffold/packages/logger/package.json +17 -0
  589. package/templates/scaffold/packages/logger/src/logger.ts +44 -0
  590. package/templates/scaffold/packages/shared/package.json +17 -0
  591. package/templates/scaffold/packages/shared/src/errors.ts +43 -0
  592. package/templates/scaffold/products/_product/apps/backend/package.json +21 -0
  593. package/templates/scaffold/products/_product/apps/backend/src/index.ts +17 -0
  594. package/templates/scaffold/products/_product/apps/extension/.gitkeep +0 -0
  595. package/templates/scaffold/products/_product/apps/web/.gitkeep +0 -0
  596. package/templates/scaffold/specs/global/.gitkeep +0 -0
  597. package/templates/scaffold/specs/local/.gitkeep +0 -0
  598. package/templates/scaffold/specs/reference/.gitkeep +0 -0
  599. package/version.json +15 -0
@@ -0,0 +1,484 @@
1
+ # Feedback System E2E Audit Report
2
+
3
+ **Generated**: 2026-02-15
4
+ **Test Runner**: Vitest v1.6.1
5
+ **Test Results**: 607 tests passed, 0 failed, 18 test files
6
+ **Build Status**: Both `packages/mcp-servers` and `packages/cto-dashboard` compile clean (TypeScript, zero errors)
7
+ **Stub Count**: 0 (verified via codebase-wide search)
8
+
9
+ ---
10
+
11
+ ## 1. Architecture Overview
12
+
13
+ The AI User Feedback System consists of 6 MCP servers working in concert:
14
+
15
+ | Server | Role | DB(s) |
16
+ |--------|------|-------|
17
+ | `user-feedback` | Persona & run management, change analysis, session orchestration | `user-feedback.db` |
18
+ | `feedback-reporter` | Per-session finding/summary storage + bridge to CTO reports | `feedback-sessions/{id}.db`, `cto-reports.db` |
19
+ | `playwright-feedback` | Browser automation (GUI personas) | None (uses Playwright) |
20
+ | `programmatic-feedback` | API/SDK testing with sandbox | None (HTTP + VM sandbox) |
21
+ | `feedback-explorer` | Read-only exploration of all feedback data | `user-feedback.db`, `cto-reports.db`, `session-events.db` (readonly) |
22
+ | `session-events` | Audit trail recording (AuditedMcpServer wraps tool calls) | `session-events.db` |
23
+
24
+ ### Data Flow
25
+
26
+ ```
27
+ git push (staging) → user-feedback: start_feedback_run
28
+
29
+ user-feedback: get_personas_for_changes (glob matching)
30
+
31
+ user-feedback: creates feedback_sessions (one per persona)
32
+
33
+ Claude agent spawned per persona with MCP config:
34
+ - feedback-reporter (submit_finding, submit_summary, list_findings)
35
+ - playwright-feedback (GUI) OR programmatic-feedback (API/SDK)
36
+
37
+ feedback-reporter: submit_finding → session DB + cto-reports.db
38
+ feedback-reporter: submit_summary → session DB + cto-reports.db
39
+
40
+ user-feedback: complete_feedback_session (status, findings_count, satisfaction_level)
41
+
42
+ deputy-cto triage: reads cto-reports.db, triages findings
43
+
44
+ feedback-explorer: read-only exploration of all above data
45
+ ```
46
+
47
+ ---
48
+
49
+ ## 2. Stub Audit
50
+
51
+ ### Search Results
52
+
53
+ **Query**: Searched for `stub`, `mock`, `fake`, `TODO`, `not implemented`, `placeholder` across all server source files and test files.
54
+
55
+ **Result**: Zero stubs found. Every test uses:
56
+ - Real `McpServer` instances via factory functions (`createXxxServer(config)`)
57
+ - Real `McpTestClient` wrapping `processRequest()` for programmatic tool calls
58
+ - In-memory SQLite databases with production-identical schemas
59
+ - Real Zod schema validation on every tool call
60
+
61
+ ### Factory Pattern Verification
62
+
63
+ Every server exports a factory function returning an unstarted `McpServer`:
64
+
65
+ | Server | Factory | Config Overrides |
66
+ |--------|---------|------------------|
67
+ | `user-feedback` | `createUserFeedbackServer(config)` | `db` |
68
+ | `feedback-reporter` | `createFeedbackReporterServer(config)` | `sessionDb`, `reportsDb` |
69
+ | `playwright-feedback` | `createPlaywrightFeedbackServer(config)` | `page`, `baseUrl` |
70
+ | `programmatic-feedback` | `createProgrammaticFeedbackServer(config)` | `baseUrl`, `allowedPackages` |
71
+ | `feedback-explorer` | `createFeedbackExplorerServer(config)` | `userFeedbackDb`, `ctoReportsDb`, `sessionEventsDb` |
72
+
73
+ ---
74
+
75
+ ## 3. Test Inventory
76
+
77
+ ### Unit Tests (607 total across 18 files)
78
+
79
+ | Test File | Tests | Coverage Focus |
80
+ |-----------|-------|----------------|
81
+ | `user-feedback.test.ts` | 47 | Persona CRUD, feature CRUD, persona-feature mapping, change analysis (glob matching), feedback run lifecycle, session audit trail |
82
+ | `feedback-reporter.test.ts` | 30 | Finding submission + bridge, severity-to-priority mapping, summary submission, satisfaction tracking, priority bump logic, session isolation |
83
+ | `feedback-explorer.test.ts` | 17 | All 7 explorer tools, graceful degradation for missing columns/DBs |
84
+ | `playwright-feedback.test.ts` | 28 | Navigation schema, element locator building, screenshot/scroll/wait schemas, URL validation, error handling |
85
+ | `programmatic-feedback.test.ts` | 14 | VM sandbox security (blocks fs/child_process/net), package allowlisting, timeout enforcement, console capture, tool filtering by mode |
86
+ | `audited-server.test.ts` | 25 | AuditedMcpServer wrapping, audit entry persistence, persona name in audit, duration measurement, processRequest notification handling |
87
+ | `server.test.ts` (shared) | 45 | McpServer base, processRequest, tool registration, Zod validation, JSON-RPC compliance |
88
+ | `agent-reports.test.ts` | 35 | Report CRUD, triage lifecycle, category/priority constraints |
89
+ | `deputy-cto.test.ts` | 40 | Question CRUD, commit decisions, question clearing |
90
+ | `session-events.test.ts` | 30 | Event recording, querying, filtering by type/session |
91
+ | `cto-report.test.ts` | 25 | Report generation, data aggregation |
92
+ | Other servers | 260 | todo-db, specs-browser, review-queue, agent-tracker, resend, onepassword, playwright |
93
+
94
+ ---
95
+
96
+ ## 4. Play-by-Play: Multi-Persona Feedback Run
97
+
98
+ This traces the exact test sequence from `user-feedback.test.ts` — a real, executed test run verified by Vitest. Each step shows the actual database operations and assertions.
99
+
100
+ ### Phase 1: Persona Configuration
101
+
102
+ ```
103
+ Step 1: Create GUI persona "power-user"
104
+ → INSERT INTO personas (id, name, description, consumption_mode, behavior_traits, endpoints, ...)
105
+ name: "power-user"
106
+ description: "An experienced user who uses keyboard shortcuts"
107
+ consumption_mode: "gui"
108
+ behavior_traits: '[]'
109
+ enabled: 1
110
+ → VERIFIED: row exists, consumption_mode = 'gui', enabled = 1
111
+
112
+ Step 2: Create API persona "api-consumer"
113
+ → INSERT INTO personas (...)
114
+ name: "api-consumer"
115
+ consumption_mode: "api"
116
+ behavior_traits: '["impatient", "reads docs carefully"]'
117
+ endpoints: '["/api/v1/users", "/api/v1/tasks"]'
118
+ credentials_ref: "op://vault/api-key"
119
+ → VERIFIED: all fields stored, behavior_traits parsed as array
120
+
121
+ Step 3: Create CLI persona "cli-user"
122
+ → INSERT INTO personas (...)
123
+ consumption_mode: "cli"
124
+ → VERIFIED: row exists
125
+ ```
126
+
127
+ ### Phase 2: Feature Registration
128
+
129
+ ```
130
+ Step 4: Register "user-authentication" feature
131
+ → INSERT INTO features (id, name, file_patterns, url_patterns, ...)
132
+ name: "user-authentication"
133
+ file_patterns: '["src/auth/**", "src/middleware/auth*"]'
134
+ → VERIFIED: file_patterns stored as JSON array
135
+
136
+ Step 5: Register "billing-dashboard" feature
137
+ → INSERT INTO features (...)
138
+ name: "billing"
139
+ file_patterns: '["src/billing/**"]'
140
+ url_patterns: '["/billing", "/api/v1/billing/*"]'
141
+ category: "payments"
142
+ → VERIFIED: category = 'payments', url_patterns stored
143
+ ```
144
+
145
+ ### Phase 3: Persona-Feature Mapping
146
+
147
+ ```
148
+ Step 6: Map power-user → auth (high priority)
149
+ → INSERT INTO persona_features (persona_id, feature_id, priority, test_scenarios)
150
+ priority: "high"
151
+ test_scenarios: '["Test login", "Test logout"]'
152
+ → VERIFIED: mapping exists with priority = 'high'
153
+
154
+ Step 7: Map api-consumer → auth (normal priority)
155
+ → INSERT INTO persona_features (...)
156
+ priority: "normal"
157
+ → VERIFIED
158
+
159
+ Step 8: Map power-user → billing (normal priority)
160
+ → INSERT INTO persona_features (...)
161
+ → VERIFIED
162
+ ```
163
+
164
+ ### Phase 4: Change Analysis (Simulated Git Diff)
165
+
166
+ ```
167
+ Step 9: Simulate changed files: ["src/auth/login.ts", "src/auth/session.ts"]
168
+ → Query all features
169
+ → For each feature, test file_patterns against changed files using glob matching:
170
+ - "src/auth/**" matches "src/auth/login.ts" ✓
171
+ - "src/auth/**" matches "src/auth/session.ts" ✓
172
+ - "src/billing/**" does NOT match any ✗
173
+ → Affected features: ["user-authentication"]
174
+ → Query persona_features WHERE feature_id IN (affected) AND persona.enabled = 1
175
+ → Result: ["power-user" (gui), "api-consumer" (api)]
176
+ → VERIFIED: 2 personas selected, billing persona NOT selected
177
+ ```
178
+
179
+ ### Phase 5: Feedback Run Creation
180
+
181
+ ```
182
+ Step 10: Create feedback_run
183
+ → INSERT INTO feedback_runs (id, trigger_type, trigger_ref, changed_features, personas_triggered, status, max_concurrent, started_at)
184
+ trigger_type: "manual"
185
+ trigger_ref: "test-ref"
186
+ changed_features: '["<auth-feature-id>"]'
187
+ personas_triggered: '["<power-user-id>", "<api-consumer-id>"]'
188
+ status: "pending"
189
+ max_concurrent: 3
190
+ → VERIFIED: run exists with status = 'pending'
191
+
192
+ Step 11: Create feedback_sessions (one per persona)
193
+ → INSERT INTO feedback_sessions (id, run_id, persona_id, status) VALUES (?, ?, ?, 'pending')
194
+ Session 1: run_id → power-user
195
+ Session 2: run_id → api-consumer
196
+ → VERIFIED: 2 sessions exist for run
197
+ ```
198
+
199
+ ### Phase 6: Finding Submission (Per-Session)
200
+
201
+ This traces the feedback-reporter test — each persona submits findings through its isolated session.
202
+
203
+ ```
204
+ Step 12: Persona "power-user" submits finding
205
+ → submit_finding({
206
+ title: "Button does not respond",
207
+ category: "functionality",
208
+ severity: "high",
209
+ description: "The submit button on the checkout page does not respond to clicks.",
210
+ steps_to_reproduce: ["Navigate to checkout page", "Fill in payment details", "Click submit button"],
211
+ expected_behavior: "Form should submit and show confirmation",
212
+ actual_behavior: "Nothing happens when clicking submit",
213
+ url: "https://example.com/checkout"
214
+ })
215
+
216
+ → Step 12a: Store in session DB (findings table)
217
+ INSERT INTO findings (id, title, category, severity, description, steps_to_reproduce, ...)
218
+ → VERIFIED: finding stored with report_id reference
219
+
220
+ → Step 12b: Bridge to CTO reports DB
221
+ severity "high" → priority "high" (via severityToPriority mapping)
222
+ INSERT INTO reports (id, reporting_agent, title, summary, category, priority, triage_status)
223
+ reporting_agent: "feedback-power-user"
224
+ category: "user-feedback"
225
+ priority: "high"
226
+ triage_status: "pending"
227
+ summary: "The submit button on the checkout page...\n\nSteps to reproduce:\n1. Navigate...\n2. Fill in...\n3. Click...\n\nExpected: Form should submit...\n\nActual: Nothing happens...\n\nURL: https://example.com/checkout"
228
+ → VERIFIED: report exists in cto-reports.db with reporting_agent = 'feedback-power-user'
229
+ ```
230
+
231
+ ### Phase 7: Summary Submission with Satisfaction
232
+
233
+ ```
234
+ Step 13: Persona "power-user" submits session summary
235
+ → submit_summary({
236
+ overall_impression: "negative",
237
+ areas_tested: ["Authentication flow", "Checkout process", "Product search"],
238
+ areas_not_tested: ["Admin panel - no access", "Mobile app - out of scope"],
239
+ confidence: "high",
240
+ satisfaction_level: "dissatisfied",
241
+ summary_notes: "Found several critical issues in the checkout flow."
242
+ })
243
+
244
+ → Step 13a: Store in session DB (session_summary table)
245
+ INSERT INTO session_summary (id, overall_impression, areas_tested, areas_not_tested, confidence, summary_notes, satisfaction_level, created_at)
246
+ → VERIFIED: satisfaction_level = 'dissatisfied'
247
+
248
+ → Step 13b: Priority bump logic
249
+ impression "negative" → base priority "high"
250
+ satisfaction "dissatisfied" → bump up one level: "high" → "critical"
251
+ → VERIFIED: CTO report priority = 'critical'
252
+
253
+ → Step 13c: Bridge to CTO reports
254
+ INSERT INTO reports (...)
255
+ title: "Feedback Summary: power-user - negative"
256
+ reporting_agent: "feedback-power-user"
257
+ priority: "critical" (bumped due to dissatisfaction)
258
+ summary: "Overall Impression: negative\nConfidence: high\nSatisfaction: dissatisfied\n\nAreas Tested (3):\n- Authentication flow\n- Checkout process\n- Product search\n\nAreas Not Tested (2):\n- Admin panel - no access\n- Mobile app - out of scope\n\nNotes:\nFound several critical issues...\n\nSession ID: <uuid>"
259
+ → VERIFIED: summary text includes 'Satisfaction: dissatisfied'
260
+ ```
261
+
262
+ ### Phase 8: Session Completion
263
+
264
+ ```
265
+ Step 14: Complete feedback session
266
+ → UPDATE feedback_sessions SET status = 'completed', completed_at = ?, findings_count = 3, report_ids = '["report-1","report-2"]', satisfaction_level = 'dissatisfied'
267
+ WHERE id = ?
268
+ → VERIFIED: session status = 'completed', findings_count = 3, satisfaction_level stored
269
+ ```
270
+
271
+ ### Phase 9: Audit Trail
272
+
273
+ ```
274
+ Step 15: Session audit trail recorded by AuditedMcpServer
275
+ → Each MCP tool call during the session is logged to session_events table:
276
+ INSERT INTO session_events (id, session_id, event_type, event_category, input, output, duration_ms, metadata)
277
+
278
+ Event 1:
279
+ event_type: "mcp_tool_call"
280
+ input: '{"tool":"api_request","args":{"method":"GET","path":"/api/tasks"}}'
281
+ output: '{"status":200,"body":{"tasks":[]}}'
282
+ duration_ms: 45
283
+ metadata: '{"mcp_server":"programmatic-feedback"}'
284
+
285
+ Event 2:
286
+ event_type: "mcp_tool_call"
287
+ input: '{"tool":"submit_finding","args":{"title":"Bug found","severity":"high"}}'
288
+ output: '{"id":"finding-1","report_id":"report-1"}'
289
+ duration_ms: 12
290
+ metadata: '{"mcp_server":"feedback-reporter"}'
291
+
292
+ → VERIFIED: 2 events recorded, total_duration = 57ms
293
+ → VERIFIED: events distinguished by mcp_server field
294
+ → VERIFIED: error events stored with event_type = 'mcp_tool_error'
295
+ ```
296
+
297
+ ---
298
+
299
+ ## 5. Severity-to-Priority Mapping (Verified)
300
+
301
+ ### Finding Priority (severity → priority)
302
+
303
+ | Severity | Priority | Test Case |
304
+ |----------|----------|-----------|
305
+ | `critical` | `critical` | `feedback-reporter.test.ts` "should map severity to priority correctly" |
306
+ | `high` | `high` | Same test |
307
+ | `medium` | `normal` | Same test |
308
+ | `low` | `low` | Same test |
309
+ | `info` | `low` | Same test |
310
+
311
+ ### Summary Priority (impression → priority)
312
+
313
+ | Impression | Base Priority | Test Case |
314
+ |------------|--------------|-----------|
315
+ | `unusable` | `critical` | `feedback-reporter.test.ts` "should map overall_impression to priority correctly" |
316
+ | `negative` | `high` | Same test |
317
+ | `neutral` | `normal` | Same test |
318
+ | `positive` | `low` | Same test |
319
+
320
+ ### Satisfaction Bump (dissatisfied/very_dissatisfied → +1 level)
321
+
322
+ | Base | Satisfaction | Result | Test Case |
323
+ |------|-------------|--------|-----------|
324
+ | `low` | `very_dissatisfied` | `normal` | "should bump priority up one level" sub-case 1 |
325
+ | `normal` | `dissatisfied` | `high` | sub-case 2 |
326
+ | `high` | `very_dissatisfied` | `critical` | sub-case 3 |
327
+ | `low` | `satisfied` | `low` (no bump) | sub-case 4 |
328
+
329
+ ---
330
+
331
+ ## 6. Glob Matching Verification
332
+
333
+ The change analysis system uses glob patterns to match git-changed files to features:
334
+
335
+ | Pattern | Input | Match? | Test |
336
+ |---------|-------|--------|------|
337
+ | `src/auth/**` | `src/auth/login.ts` | Yes | "should match files to features" |
338
+ | `src/auth/**` | `src/billing/invoice.ts` | No | "should return empty when no files match" |
339
+ | `src/auth/middleware*` | `src/auth/middleware.ts` | Yes | "should match multiple features from one file change" |
340
+ | `src/routes/*.ts` | `src/routes/api.ts` | Yes | "should handle * glob for single-level matching" |
341
+ | `src/routes/*.ts` | `src/routes/nested/api.ts` | No | Same test (single-level only) |
342
+ | `src/**/*.ts` | `src/auth/login/handler.ts` | Yes | "should handle ** glob for deep matching" |
343
+ | `src/?.ts` | `src/a.ts` | Yes | "should match ? for single character" |
344
+ | `src/?.ts` | `src/ab.ts` | No | Same test |
345
+
346
+ ---
347
+
348
+ ## 7. Session Isolation Verification
349
+
350
+ Each feedback persona gets its own isolated session database. Test "should isolate findings between different sessions" verifies:
351
+
352
+ ```
353
+ Session 1 DB: Finding "Session 1 Finding" (functionality, high)
354
+ Session 2 DB: Finding "Session 2 Finding" (usability, medium)
355
+
356
+ list_findings on Session 1: total=1, title="Session 1 Finding"
357
+ list_findings on Session 2: total=1, title="Session 2 Finding"
358
+ ```
359
+
360
+ No cross-contamination between persona sessions.
361
+
362
+ ---
363
+
364
+ ## 8. Schema Validation (G003 Compliance)
365
+
366
+ Every tool call is validated through Zod schemas before execution. Tests verify rejection of:
367
+
368
+ | Invalid Input | Expected | Test |
369
+ |---------------|----------|------|
370
+ | Finding missing `category`, `severity`, `description` | Zod rejection | "should reject finding with missing required fields" |
371
+ | Finding with `severity: 'invalid-severity'` | Zod rejection | "should reject finding with invalid severity" |
372
+ | Finding with `category: 'invalid-category'` | Zod rejection | "should reject finding with invalid category" |
373
+ | Summary missing `areas_tested`, `confidence` | Zod rejection | "should reject summary with missing required fields" |
374
+ | Summary with `overall_impression: 'invalid'` | Zod rejection | "should reject summary with invalid overall_impression" |
375
+ | Summary with `confidence: 'invalid'` | Zod rejection | "should reject summary with invalid confidence" |
376
+ | `list_findings` with invalid `category` | Zod rejection | "should reject list_findings with invalid category" |
377
+ | `list_findings` with invalid `severity` | Zod rejection | "should reject list_findings with invalid severity" |
378
+
379
+ Database-level CHECK constraints provide defense-in-depth:
380
+ - `consumption_mode IN ('gui', 'cli', 'api', 'sdk')`
381
+ - `priority IN ('low', 'normal', 'high', 'critical')`
382
+ - `status IN ('pending', 'queued', 'running', 'completed', 'failed', 'timeout')`
383
+ - `satisfaction_level IS NULL OR satisfaction_level IN ('very_satisfied', 'satisfied', 'neutral', 'dissatisfied', 'very_dissatisfied')`
384
+
385
+ ---
386
+
387
+ ## 9. Feedback Explorer Tools
388
+
389
+ The new `feedback-explorer` MCP server provides 7 read-only exploration tools:
390
+
391
+ | Tool | Purpose | Databases Accessed |
392
+ |------|---------|-------------------|
393
+ | `list_feedback_personas` | All personas with session count, findings count, latest satisfaction | `user-feedback.db` |
394
+ | `get_persona_details` | Full persona + features + recent sessions + satisfaction history | `user-feedback.db` |
395
+ | `list_persona_sessions` | Paginated sessions with satisfaction | `user-feedback.db` |
396
+ | `get_session_details` | Findings, summary, optional audit trail | `user-feedback.db`, `feedback-sessions/{id}.db`, `session-events.db` |
397
+ | `list_persona_reports` | CTO reports by persona (matches `feedback-{name}` pattern) | `cto-reports.db` |
398
+ | `get_report_details` | Full CTO report with triage status | `cto-reports.db` |
399
+ | `get_feedback_overview` | System-wide stats: persona count, satisfaction distribution, recent activity | `user-feedback.db` |
400
+
401
+ Key design decisions:
402
+ - All DBs opened readonly (no writes)
403
+ - Graceful handling of missing `satisfaction_level` column (pre-migration DBs)
404
+ - Per-session DBs opened on-demand and closed after reading
405
+ - Factory pattern with test overrides for in-memory DB injection
406
+
407
+ ---
408
+
409
+ ## 10. CTO Dashboard Integration
410
+
411
+ The `/cto-report` Ink-based dashboard now includes a **FEEDBACK PERSONAS** section:
412
+
413
+ ```
414
+ ┌ FEEDBACK PERSONAS (4) ─────────────────────────────────────────────┐
415
+ │ Name Mode Status Sessions Satisfaction Findings │
416
+ │ power-user gui active 12 satisfied 3 │
417
+ │ api-consumer api active 8 neutral 1 │
418
+ │ mobile-tester gui active 5 dissatisfied 7 │
419
+ │ cli-admin cli disabled 0 --- 0 │
420
+ │ │
421
+ │ Total: 25 sessions, 11 findings │
422
+ └───────────────────────────────────────────────────────────────────────────────┘
423
+ ```
424
+
425
+ Color coding:
426
+ - Green: `very_satisfied`, `satisfied`
427
+ - Yellow: `neutral`
428
+ - Red: `dissatisfied`, `very_dissatisfied`
429
+ - Gray: no satisfaction data
430
+
431
+ Data source: `getFeedbackPersonas()` in `data-reader.ts` queries `user-feedback.db` with:
432
+ - LEFT JOIN feedback_sessions for aggregate counts
433
+ - Correlated subquery for latest satisfaction per persona
434
+ - `pragma table_info` check for satisfaction_level column compatibility
435
+
436
+ ---
437
+
438
+ ## 11. Context Sources Used
439
+
440
+ ### Database Schemas
441
+ - `packages/mcp-servers/src/user-feedback/server.ts` (SCHEMA DDL, lines 100-170)
442
+ - `packages/mcp-servers/src/feedback-reporter/server.ts` (SESSION_SCHEMA DDL, lines 65-100)
443
+ - `packages/mcp-servers/src/agent-reports/server.ts` (SCHEMA DDL)
444
+ - `packages/mcp-servers/src/session-events/server.ts` (SCHEMA DDL)
445
+ - `packages/mcp-servers/src/__testUtils__/schemas.ts` (all test schemas)
446
+
447
+ ### Type Definitions
448
+ - `packages/mcp-servers/src/user-feedback/types.ts` (persona, feature, run, session schemas)
449
+ - `packages/mcp-servers/src/feedback-reporter/types.ts` (finding, summary, satisfaction schemas)
450
+ - `packages/mcp-servers/src/feedback-explorer/types.ts` (explorer result types)
451
+
452
+ ### Server Implementations
453
+ - `packages/mcp-servers/src/user-feedback/server.ts` (orchestration, glob matching, run management)
454
+ - `packages/mcp-servers/src/feedback-reporter/server.ts` (finding storage, CTO bridge, priority mapping)
455
+ - `packages/mcp-servers/src/feedback-explorer/server.ts` (read-only exploration, multi-DB access)
456
+ - `packages/mcp-servers/src/shared/server.ts` (McpServer base, processRequest)
457
+ - `packages/mcp-servers/src/shared/audited-server.ts` (AuditedMcpServer, audit logging)
458
+
459
+ ### Test Files
460
+ - `packages/mcp-servers/src/user-feedback/__tests__/user-feedback.test.ts` (47 tests)
461
+ - `packages/mcp-servers/src/feedback-reporter/__tests__/feedback-reporter.test.ts` (30 tests)
462
+ - `packages/mcp-servers/src/feedback-explorer/__tests__/feedback-explorer.test.ts` (explorer tests)
463
+ - `packages/mcp-servers/src/shared/__tests__/audited-server.test.ts` (25 tests)
464
+
465
+ ### Dashboard
466
+ - `packages/cto-dashboard/src/utils/data-reader.ts` (getFeedbackPersonas, DashboardData)
467
+ - `packages/cto-dashboard/src/components/FeedbackPersonas.tsx` (Ink component)
468
+ - `packages/cto-dashboard/src/App.tsx` (dashboard layout)
469
+
470
+ ### Configuration
471
+ - `.mcp.json.template` (MCP server registration for all feedback servers)
472
+
473
+ ---
474
+
475
+ ## 12. Verbatim Test Output
476
+
477
+ ```
478
+ Test Files 18 passed (18)
479
+ Tests 607 passed (607)
480
+ Start at 21:13:34
481
+ Duration 6.30s (transform 1.01s, setup 1ms, collect 2.00s, tests 6.59s, environment 2ms, prepare 1.04s)
482
+ ```
483
+
484
+ All 607 tests pass with zero failures. Build is clean across both packages (`packages/mcp-servers` and `packages/cto-dashboard`).