@cyanautomation/kaseki-agent 1.4.1

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 (459) hide show
  1. package/.dockerignore +54 -0
  2. package/.eslintignore +11 -0
  3. package/.eslintrc.json +95 -0
  4. package/.github/ISSUE_TEMPLATE/bug_report.md +53 -0
  5. package/.github/ISSUE_TEMPLATE/feature_request.md +53 -0
  6. package/.github/ISSUE_TEMPLATE/security.md +51 -0
  7. package/.github/PULL_REQUEST_TEMPLATE/default.md +71 -0
  8. package/.github/dependabot.yml +38 -0
  9. package/.github/skills/dependency-cache-optimization/SKILL.md +526 -0
  10. package/.github/skills/docker-image-management/SKILL.md +532 -0
  11. package/.github/skills/frontend-design/SKILL.md +782 -0
  12. package/.github/skills/prompt-engineering/SKILL.md +360 -0
  13. package/.github/skills/quality-gate-config/SKILL.md +591 -0
  14. package/.github/skills/result-report-analysis/SKILL.md +576 -0
  15. package/.github/skills/test-automation/SKILL.md +593 -0
  16. package/.github/skills/workflow-diagnosis/SKILL.md +468 -0
  17. package/.github/workflows/build-docker-image.yml +453 -0
  18. package/.github/workflows/release.yml +68 -0
  19. package/.releaserc.json +135 -0
  20. package/CHANGELOG.md +117 -0
  21. package/CLAUDE.md +336 -0
  22. package/CONTRIBUTING.md +339 -0
  23. package/Dockerfile +217 -0
  24. package/README.md +1527 -0
  25. package/STYLE.md +521 -0
  26. package/add-js-extensions.d.ts +9 -0
  27. package/add-js-extensions.d.ts.map +1 -0
  28. package/add-js-extensions.js.map +1 -0
  29. package/dist/add-js-extensions.d.ts +9 -0
  30. package/dist/add-js-extensions.d.ts.map +1 -0
  31. package/dist/add-js-extensions.js +52 -0
  32. package/dist/add-js-extensions.js.map +1 -0
  33. package/dist/ansi-colors.d.ts +26 -0
  34. package/dist/ansi-colors.d.ts.map +1 -0
  35. package/dist/ansi-colors.js +51 -0
  36. package/dist/ansi-colors.js.map +1 -0
  37. package/dist/cli/BaseCommand.d.ts +18 -0
  38. package/dist/cli/BaseCommand.d.ts.map +1 -0
  39. package/dist/cli/BaseCommand.js +31 -0
  40. package/dist/cli/BaseCommand.js.map +1 -0
  41. package/dist/cli/KasekiCLI.d.ts +30 -0
  42. package/dist/cli/KasekiCLI.d.ts.map +1 -0
  43. package/dist/cli/KasekiCLI.js +134 -0
  44. package/dist/cli/KasekiCLI.js.map +1 -0
  45. package/dist/cli/commands/ConfigCommand.d.ts +13 -0
  46. package/dist/cli/commands/ConfigCommand.d.ts.map +1 -0
  47. package/dist/cli/commands/ConfigCommand.js +131 -0
  48. package/dist/cli/commands/ConfigCommand.js.map +1 -0
  49. package/dist/cli/commands/DoctorCommand.d.ts +45 -0
  50. package/dist/cli/commands/DoctorCommand.d.ts.map +1 -0
  51. package/dist/cli/commands/DoctorCommand.js +309 -0
  52. package/dist/cli/commands/DoctorCommand.js.map +1 -0
  53. package/dist/cli/commands/ListCommand.d.ts +9 -0
  54. package/dist/cli/commands/ListCommand.d.ts.map +1 -0
  55. package/dist/cli/commands/ListCommand.js +81 -0
  56. package/dist/cli/commands/ListCommand.js.map +1 -0
  57. package/dist/cli/commands/ReportCommand.d.ts +9 -0
  58. package/dist/cli/commands/ReportCommand.d.ts.map +1 -0
  59. package/dist/cli/commands/ReportCommand.js +98 -0
  60. package/dist/cli/commands/ReportCommand.js.map +1 -0
  61. package/dist/cli/commands/RunCommand.d.ts +13 -0
  62. package/dist/cli/commands/RunCommand.d.ts.map +1 -0
  63. package/dist/cli/commands/RunCommand.js +191 -0
  64. package/dist/cli/commands/RunCommand.js.map +1 -0
  65. package/dist/cli/commands/SecretsCommand.d.ts +9 -0
  66. package/dist/cli/commands/SecretsCommand.d.ts.map +1 -0
  67. package/dist/cli/commands/SecretsCommand.js +109 -0
  68. package/dist/cli/commands/SecretsCommand.js.map +1 -0
  69. package/dist/cli/commands/ServeCommand.d.ts +9 -0
  70. package/dist/cli/commands/ServeCommand.d.ts.map +1 -0
  71. package/dist/cli/commands/ServeCommand.js +50 -0
  72. package/dist/cli/commands/ServeCommand.js.map +1 -0
  73. package/dist/cli/commands/SetupCommand.d.ts +42 -0
  74. package/dist/cli/commands/SetupCommand.d.ts.map +1 -0
  75. package/dist/cli/commands/SetupCommand.js +249 -0
  76. package/dist/cli/commands/SetupCommand.js.map +1 -0
  77. package/dist/cli.d.ts +9 -0
  78. package/dist/cli.d.ts.map +1 -0
  79. package/dist/cli.js +130 -0
  80. package/dist/cli.js.map +1 -0
  81. package/dist/config/ConfigManager.d.ts +395 -0
  82. package/dist/config/ConfigManager.d.ts.map +1 -0
  83. package/dist/config/ConfigManager.js +446 -0
  84. package/dist/config/ConfigManager.js.map +1 -0
  85. package/dist/docker/DockerManager.d.ts +69 -0
  86. package/dist/docker/DockerManager.d.ts.map +1 -0
  87. package/dist/docker/DockerManager.js +266 -0
  88. package/dist/docker/DockerManager.js.map +1 -0
  89. package/dist/event-aggregator.d.ts +71 -0
  90. package/dist/event-aggregator.d.ts.map +1 -0
  91. package/dist/event-aggregator.js +95 -0
  92. package/dist/event-aggregator.js.map +1 -0
  93. package/dist/github-app-token.d.ts +16 -0
  94. package/dist/github-app-token.d.ts.map +1 -0
  95. package/dist/github-app-token.js +148 -0
  96. package/dist/github-app-token.js.map +1 -0
  97. package/dist/idempotency-store.d.ts +61 -0
  98. package/dist/idempotency-store.d.ts.map +1 -0
  99. package/dist/idempotency-store.js +321 -0
  100. package/dist/idempotency-store.js.map +1 -0
  101. package/dist/index.d.ts +25 -0
  102. package/dist/index.d.ts.map +1 -0
  103. package/dist/index.js +31 -0
  104. package/dist/index.js.map +1 -0
  105. package/dist/instance/InstanceManager.d.ts +81 -0
  106. package/dist/instance/InstanceManager.d.ts.map +1 -0
  107. package/dist/instance/InstanceManager.js +220 -0
  108. package/dist/instance/InstanceManager.js.map +1 -0
  109. package/dist/instance-metadata-reader.d.ts +48 -0
  110. package/dist/instance-metadata-reader.d.ts.map +1 -0
  111. package/dist/instance-metadata-reader.js +94 -0
  112. package/dist/instance-metadata-reader.js.map +1 -0
  113. package/dist/instance-state-derivation.d.ts +42 -0
  114. package/dist/instance-state-derivation.d.ts.map +1 -0
  115. package/dist/instance-state-derivation.js +133 -0
  116. package/dist/instance-state-derivation.js.map +1 -0
  117. package/dist/job-scheduler.d.ts +124 -0
  118. package/dist/job-scheduler.d.ts.map +1 -0
  119. package/dist/job-scheduler.js +992 -0
  120. package/dist/job-scheduler.js.map +1 -0
  121. package/dist/kaseki-api-client.d.ts +89 -0
  122. package/dist/kaseki-api-client.d.ts.map +1 -0
  123. package/dist/kaseki-api-client.js +405 -0
  124. package/dist/kaseki-api-client.js.map +1 -0
  125. package/dist/kaseki-api-config.d.ts +34 -0
  126. package/dist/kaseki-api-config.d.ts.map +1 -0
  127. package/dist/kaseki-api-config.js +113 -0
  128. package/dist/kaseki-api-config.js.map +1 -0
  129. package/dist/kaseki-api-routes.d.ts +13 -0
  130. package/dist/kaseki-api-routes.d.ts.map +1 -0
  131. package/dist/kaseki-api-routes.js +559 -0
  132. package/dist/kaseki-api-routes.js.map +1 -0
  133. package/dist/kaseki-api-service-wrapper.d.ts +43 -0
  134. package/dist/kaseki-api-service-wrapper.d.ts.map +1 -0
  135. package/dist/kaseki-api-service-wrapper.js +150 -0
  136. package/dist/kaseki-api-service-wrapper.js.map +1 -0
  137. package/dist/kaseki-api-service.d.ts +16 -0
  138. package/dist/kaseki-api-service.d.ts.map +1 -0
  139. package/dist/kaseki-api-service.js +143 -0
  140. package/dist/kaseki-api-service.js.map +1 -0
  141. package/dist/kaseki-api-types.d.ts +440 -0
  142. package/dist/kaseki-api-types.d.ts.map +1 -0
  143. package/dist/kaseki-api-types.js +64 -0
  144. package/dist/kaseki-api-types.js.map +1 -0
  145. package/dist/kaseki-cli-lib.d.ts +219 -0
  146. package/dist/kaseki-cli-lib.d.ts.map +1 -0
  147. package/dist/kaseki-cli-lib.js +523 -0
  148. package/dist/kaseki-cli-lib.js.map +1 -0
  149. package/dist/kaseki-cli.d.ts +38 -0
  150. package/dist/kaseki-cli.d.ts.map +1 -0
  151. package/dist/kaseki-cli.js +559 -0
  152. package/dist/kaseki-cli.js.map +1 -0
  153. package/dist/kaseki-report.d.ts +3 -0
  154. package/dist/kaseki-report.d.ts.map +1 -0
  155. package/dist/kaseki-report.js +140 -0
  156. package/dist/kaseki-report.js.map +1 -0
  157. package/dist/lib/subprocess-helpers.d.ts +98 -0
  158. package/dist/lib/subprocess-helpers.d.ts.map +1 -0
  159. package/dist/lib/subprocess-helpers.js +136 -0
  160. package/dist/lib/subprocess-helpers.js.map +1 -0
  161. package/dist/logger.d.ts +39 -0
  162. package/dist/logger.d.ts.map +1 -0
  163. package/dist/logger.js +79 -0
  164. package/dist/logger.js.map +1 -0
  165. package/dist/metrics.d.ts +19 -0
  166. package/dist/metrics.d.ts.map +1 -0
  167. package/dist/metrics.js +59 -0
  168. package/dist/metrics.js.map +1 -0
  169. package/dist/middleware/job-lookup.d.ts +27 -0
  170. package/dist/middleware/job-lookup.d.ts.map +1 -0
  171. package/dist/middleware/job-lookup.js +28 -0
  172. package/dist/middleware/job-lookup.js.map +1 -0
  173. package/dist/pi-event-filter.d.ts +3 -0
  174. package/dist/pi-event-filter.d.ts.map +1 -0
  175. package/dist/pi-event-filter.js +126 -0
  176. package/dist/pi-event-filter.js.map +1 -0
  177. package/dist/pi-progress-stream.d.ts +3 -0
  178. package/dist/pi-progress-stream.d.ts.map +1 -0
  179. package/dist/pi-progress-stream.js +205 -0
  180. package/dist/pi-progress-stream.js.map +1 -0
  181. package/dist/pi-progress-summarizer.d.ts +61 -0
  182. package/dist/pi-progress-summarizer.d.ts.map +1 -0
  183. package/dist/pi-progress-summarizer.js +246 -0
  184. package/dist/pi-progress-summarizer.js.map +1 -0
  185. package/dist/pre-flight-validator.d.ts +72 -0
  186. package/dist/pre-flight-validator.d.ts.map +1 -0
  187. package/dist/pre-flight-validator.js +513 -0
  188. package/dist/pre-flight-validator.js.map +1 -0
  189. package/dist/progress-stream-utils.d.ts +3 -0
  190. package/dist/progress-stream-utils.d.ts.map +1 -0
  191. package/dist/progress-stream-utils.js +15 -0
  192. package/dist/progress-stream-utils.js.map +1 -0
  193. package/dist/result-cache.d.ts +52 -0
  194. package/dist/result-cache.d.ts.map +1 -0
  195. package/dist/result-cache.js +134 -0
  196. package/dist/result-cache.js.map +1 -0
  197. package/dist/routes/artifact-routes.d.ts +10 -0
  198. package/dist/routes/artifact-routes.d.ts.map +1 -0
  199. package/dist/routes/artifact-routes.js +126 -0
  200. package/dist/routes/artifact-routes.js.map +1 -0
  201. package/dist/routes/log-routes.d.ts +8 -0
  202. package/dist/routes/log-routes.d.ts.map +1 -0
  203. package/dist/routes/log-routes.js +345 -0
  204. package/dist/routes/log-routes.js.map +1 -0
  205. package/dist/routes/status-routes.d.ts +8 -0
  206. package/dist/routes/status-routes.d.ts.map +1 -0
  207. package/dist/routes/status-routes.js +82 -0
  208. package/dist/routes/status-routes.js.map +1 -0
  209. package/dist/routes/webhook-routes.d.ts +6 -0
  210. package/dist/routes/webhook-routes.d.ts.map +1 -0
  211. package/dist/routes/webhook-routes.js +86 -0
  212. package/dist/routes/webhook-routes.js.map +1 -0
  213. package/dist/run-artifact-metadata-cache.d.ts +42 -0
  214. package/dist/run-artifact-metadata-cache.d.ts.map +1 -0
  215. package/dist/run-artifact-metadata-cache.js +139 -0
  216. package/dist/run-artifact-metadata-cache.js.map +1 -0
  217. package/dist/secret-value-cache.d.ts +13 -0
  218. package/dist/secret-value-cache.d.ts.map +1 -0
  219. package/dist/secret-value-cache.js +44 -0
  220. package/dist/secret-value-cache.js.map +1 -0
  221. package/dist/secrets/SecretsManager.d.ts +80 -0
  222. package/dist/secrets/SecretsManager.d.ts.map +1 -0
  223. package/dist/secrets/SecretsManager.js +306 -0
  224. package/dist/secrets/SecretsManager.js.map +1 -0
  225. package/dist/test-utils.d.ts +55 -0
  226. package/dist/test-utils.d.ts.map +1 -0
  227. package/dist/test-utils.js +48 -0
  228. package/dist/test-utils.js.map +1 -0
  229. package/dist/timestamp-tracker.d.ts +75 -0
  230. package/dist/timestamp-tracker.d.ts.map +1 -0
  231. package/dist/timestamp-tracker.js +121 -0
  232. package/dist/timestamp-tracker.js.map +1 -0
  233. package/dist/utils/failure-artifact-writer.d.ts +29 -0
  234. package/dist/utils/failure-artifact-writer.d.ts.map +1 -0
  235. package/dist/utils/failure-artifact-writer.js +157 -0
  236. package/dist/utils/failure-artifact-writer.js.map +1 -0
  237. package/dist/utils/file-helpers.d.ts +41 -0
  238. package/dist/utils/file-helpers.d.ts.map +1 -0
  239. package/dist/utils/file-helpers.js +143 -0
  240. package/dist/utils/file-helpers.js.map +1 -0
  241. package/dist/utils/http-client-factory.d.ts +46 -0
  242. package/dist/utils/http-client-factory.d.ts.map +1 -0
  243. package/dist/utils/http-client-factory.js +114 -0
  244. package/dist/utils/http-client-factory.js.map +1 -0
  245. package/dist/utils/progress-normalizer.d.ts +13 -0
  246. package/dist/utils/progress-normalizer.d.ts.map +1 -0
  247. package/dist/utils/progress-normalizer.js +57 -0
  248. package/dist/utils/progress-normalizer.js.map +1 -0
  249. package/dist/utils/response-helpers.d.ts +34 -0
  250. package/dist/utils/response-helpers.d.ts.map +1 -0
  251. package/dist/utils/response-helpers.js +78 -0
  252. package/dist/utils/response-helpers.js.map +1 -0
  253. package/dist/utils/route-helpers.d.ts +17 -0
  254. package/dist/utils/route-helpers.d.ts.map +1 -0
  255. package/dist/utils/route-helpers.js +22 -0
  256. package/dist/utils/route-helpers.js.map +1 -0
  257. package/dist/utils/status-response-builder.d.ts +23 -0
  258. package/dist/utils/status-response-builder.d.ts.map +1 -0
  259. package/dist/utils/status-response-builder.js +144 -0
  260. package/dist/utils/status-response-builder.js.map +1 -0
  261. package/dist/utils/type-guards.d.ts +37 -0
  262. package/dist/utils/type-guards.d.ts.map +1 -0
  263. package/dist/utils/type-guards.js +45 -0
  264. package/dist/utils/type-guards.js.map +1 -0
  265. package/dist/utils/utf8-helpers.d.ts +32 -0
  266. package/dist/utils/utf8-helpers.d.ts.map +1 -0
  267. package/dist/utils/utf8-helpers.js +97 -0
  268. package/dist/utils/utf8-helpers.js.map +1 -0
  269. package/dist/utils/webhook-event-builder.d.ts +26 -0
  270. package/dist/utils/webhook-event-builder.d.ts.map +1 -0
  271. package/dist/utils/webhook-event-builder.js +77 -0
  272. package/dist/utils/webhook-event-builder.js.map +1 -0
  273. package/dist/webhook-manager.d.ts +56 -0
  274. package/dist/webhook-manager.d.ts.map +1 -0
  275. package/dist/webhook-manager.js +359 -0
  276. package/dist/webhook-manager.js.map +1 -0
  277. package/docker/workspace-cache/package-lock.json +13 -0
  278. package/docker/workspace-cache/package.json +7 -0
  279. package/docker-compose.yml +53 -0
  280. package/docs/API.md +708 -0
  281. package/docs/BACKLOG.md +19 -0
  282. package/docs/BUILD_STRATEGY.md +404 -0
  283. package/docs/CLI.md +569 -0
  284. package/docs/DEPLOYMENT.md +521 -0
  285. package/docs/DEVELOPMENT.md +459 -0
  286. package/docs/DOCKER_SETUP.md +522 -0
  287. package/docs/ENHANCED_PROGRESS_LOGS.md +264 -0
  288. package/docs/IMPLEMENTATION_SUMMARY.md +549 -0
  289. package/docs/INTEGRATION_EXAMPLE.md +217 -0
  290. package/docs/NPM_SETUP.md +468 -0
  291. package/docs/PHASE1-4_IMPLEMENTATION.md +302 -0
  292. package/docs/PHASE1_COMPLETION.md +192 -0
  293. package/docs/PHASE2_COMPLETION.md +134 -0
  294. package/docs/PHASE6_MIGRATION.md +392 -0
  295. package/docs/PRINTF_SAFETY_FIX.md +282 -0
  296. package/docs/QUALITY_GATES.md +369 -0
  297. package/docs/SETUP_GUIDE.md +482 -0
  298. package/docs/TASK_PROMPT_TEMPLATES.md +533 -0
  299. package/docs/VALIDATION_FIX.md +139 -0
  300. package/docs/VERIFICATION_CHECKLIST.md +335 -0
  301. package/docs/repo-maturity.md +760 -0
  302. package/fix-tests.d.ts +9 -0
  303. package/fix-tests.d.ts.map +1 -0
  304. package/fix-tests.js.map +1 -0
  305. package/fix-tests.ts +53 -0
  306. package/jest.config.ts +31 -0
  307. package/kaseki +183 -0
  308. package/kaseki-agent.sh +1961 -0
  309. package/ops/logrotate/kaseki +10 -0
  310. package/package.json +83 -0
  311. package/perf/README.md +54 -0
  312. package/perf/pi-event-filter.benchmark.test.ts +98 -0
  313. package/run-kaseki-json.test.sh +106 -0
  314. package/run-kaseki.sh +990 -0
  315. package/scripts/allowlist-helper.sh +56 -0
  316. package/scripts/cleanup-kaseki.sh +168 -0
  317. package/scripts/deploy-pi-template.sh +293 -0
  318. package/scripts/docker-entrypoint.sh +71 -0
  319. package/scripts/dry-run-allowlist.sh +161 -0
  320. package/scripts/kaseki-activate.sh +396 -0
  321. package/scripts/kaseki-api.service +62 -0
  322. package/scripts/kaseki-container-entrypoint-wrapper.sh +119 -0
  323. package/scripts/kaseki-container-setup-remote.sh +172 -0
  324. package/scripts/kaseki-container-setup.sh +193 -0
  325. package/scripts/kaseki-healthcheck.sh +95 -0
  326. package/scripts/kaseki-install.sh +50 -0
  327. package/scripts/kaseki-maturity-score.sh +291 -0
  328. package/scripts/kaseki-performance-metrics.sh +122 -0
  329. package/scripts/kaseki-preflight.sh +270 -0
  330. package/scripts/kaseki-setup.sh +265 -0
  331. package/scripts/pi-setup-remote.sh +213 -0
  332. package/scripts/setup-github-labels.sh +42 -0
  333. package/scripts/suggest-allowlist.sh +68 -0
  334. package/scripts/templates/MULTI_HOST_DISTRIBUTED.md +337 -0
  335. package/scripts/templates/REST_API_SERVICE.md +490 -0
  336. package/scripts/templates/SINGLE_HOST_CLI.md +194 -0
  337. package/scripts/test-github-app.sh +248 -0
  338. package/src/add-js-extensions.ts +61 -0
  339. package/src/ansi-colors.test.ts +62 -0
  340. package/src/ansi-colors.ts +67 -0
  341. package/src/cli/BaseCommand.ts +40 -0
  342. package/src/cli/KasekiCLI.ts +154 -0
  343. package/src/cli/commands/ConfigCommand.ts +145 -0
  344. package/src/cli/commands/DoctorCommand.ts +329 -0
  345. package/src/cli/commands/ListCommand.ts +105 -0
  346. package/src/cli/commands/ReportCommand.ts +110 -0
  347. package/src/cli/commands/RunCommand.ts +218 -0
  348. package/src/cli/commands/SecretsCommand.ts +120 -0
  349. package/src/cli/commands/ServeCommand.ts +62 -0
  350. package/src/cli/commands/SetupCommand.ts +301 -0
  351. package/src/cli.ts +138 -0
  352. package/src/config/ConfigManager.ts +476 -0
  353. package/src/docker/DockerManager.ts +319 -0
  354. package/src/docker-entrypoint-packaging.test.ts +33 -0
  355. package/src/event-aggregator.test.ts +117 -0
  356. package/src/event-aggregator.ts +126 -0
  357. package/src/github-app-token.ts +215 -0
  358. package/src/idempotency-store.test.ts +117 -0
  359. package/src/idempotency-store.ts +385 -0
  360. package/src/index.ts +89 -0
  361. package/src/instance/InstanceManager.ts +285 -0
  362. package/src/instance-metadata-reader.test.ts +190 -0
  363. package/src/instance-metadata-reader.ts +129 -0
  364. package/src/instance-state-derivation.test.ts +263 -0
  365. package/src/instance-state-derivation.ts +148 -0
  366. package/src/job-scheduler.test.ts +1236 -0
  367. package/src/job-scheduler.ts +1117 -0
  368. package/src/kaseki-api-client.ts +488 -0
  369. package/src/kaseki-api-config.test.ts +315 -0
  370. package/src/kaseki-api-config.ts +175 -0
  371. package/src/kaseki-api-routes.test.ts +1615 -0
  372. package/src/kaseki-api-routes.ts +643 -0
  373. package/src/kaseki-api-service-wrapper.ts +188 -0
  374. package/src/kaseki-api-service.test.ts +418 -0
  375. package/src/kaseki-api-service.ts +192 -0
  376. package/src/kaseki-api-types.ts +320 -0
  377. package/src/kaseki-cli-lib.test.ts +552 -0
  378. package/src/kaseki-cli-lib.ts +760 -0
  379. package/src/kaseki-cli.ts +682 -0
  380. package/src/kaseki-report.test.ts +118 -0
  381. package/src/kaseki-report.ts +192 -0
  382. package/src/lib/subprocess-helpers.ts +177 -0
  383. package/src/logger.ts +114 -0
  384. package/src/metrics.ts +66 -0
  385. package/src/middleware/job-lookup.test.ts +113 -0
  386. package/src/middleware/job-lookup.ts +45 -0
  387. package/src/pi-event-filter.test.ts +183 -0
  388. package/src/pi-event-filter.ts +183 -0
  389. package/src/pi-progress-stream.ts +287 -0
  390. package/src/pi-progress-summarizer.test.ts +302 -0
  391. package/src/pi-progress-summarizer.ts +287 -0
  392. package/src/pre-flight-validator.test.ts +512 -0
  393. package/src/pre-flight-validator.ts +618 -0
  394. package/src/progress-stream-utils.test.ts +35 -0
  395. package/src/progress-stream-utils.ts +14 -0
  396. package/src/result-cache.test.ts +195 -0
  397. package/src/result-cache.ts +181 -0
  398. package/src/routes/artifact-routes.ts +169 -0
  399. package/src/routes/log-routes.ts +391 -0
  400. package/src/routes/status-routes.ts +92 -0
  401. package/src/routes/webhook-routes.ts +97 -0
  402. package/src/run-artifact-metadata-cache.test.ts +80 -0
  403. package/src/run-artifact-metadata-cache.ts +184 -0
  404. package/src/secret-value-cache.test.ts +66 -0
  405. package/src/secret-value-cache.ts +55 -0
  406. package/src/secrets/SecretsManager.ts +343 -0
  407. package/src/test-utils.ts +81 -0
  408. package/src/timestamp-tracker.test.ts +134 -0
  409. package/src/timestamp-tracker.ts +132 -0
  410. package/src/utils/failure-artifact-writer.ts +187 -0
  411. package/src/utils/file-helpers.test.ts +235 -0
  412. package/src/utils/file-helpers.ts +150 -0
  413. package/src/utils/http-client-factory.test.ts +245 -0
  414. package/src/utils/http-client-factory.ts +157 -0
  415. package/src/utils/progress-normalizer.test.ts +442 -0
  416. package/src/utils/progress-normalizer.ts +68 -0
  417. package/src/utils/response-helpers.test.ts +122 -0
  418. package/src/utils/response-helpers.ts +101 -0
  419. package/src/utils/route-helpers.ts +30 -0
  420. package/src/utils/status-response-builder.ts +159 -0
  421. package/src/utils/type-guards.ts +52 -0
  422. package/src/utils/utf8-helpers.ts +102 -0
  423. package/src/utils/webhook-event-builder.test.ts +143 -0
  424. package/src/utils/webhook-event-builder.ts +87 -0
  425. package/src/webhook-manager.test.ts +152 -0
  426. package/src/webhook-manager.ts +445 -0
  427. package/templates/allowlist-api-route.txt +7 -0
  428. package/templates/allowlist-comprehensive.txt +8 -0
  429. package/templates/allowlist-parser-fix.txt +6 -0
  430. package/templates/allowlist-ui-component.txt +9 -0
  431. package/templates/allowlist-utility.txt +9 -0
  432. package/test/actual-model-metadata.test.sh +102 -0
  433. package/test/dry-run.test.sh +131 -0
  434. package/test/fixtures/kaseki-report-exit-codes/metadata-exit-0.json +1 -0
  435. package/test/fixtures/kaseki-report-exit-codes/metadata-exit-1.json +1 -0
  436. package/test/fixtures/kaseki-report-exit-codes/metadata-exit-invalid.json +1 -0
  437. package/test/fixtures/kaseki-report-exit-codes/metadata-exit-str-0.json +1 -0
  438. package/test/fixtures/kaseki-report-exit-codes/metadata-exit-str-1.json +1 -0
  439. package/test/kaseki-api.integration.test.sh +165 -0
  440. package/test/pi-event-filter-failure.test.sh +83 -0
  441. package/test/printf-safety-focused.test.sh +99 -0
  442. package/test/printf-safety-results/results/restoration.jsonl +10 -0
  443. package/test/printf-safety-results/results/test.jsonl +0 -0
  444. package/test/printf-safety.test.sh +297 -0
  445. package/test/validation-fix.test.sh +79 -0
  446. package/test/validation-integration.test.sh +109 -0
  447. package/tests/allowlist-glob.test.sh +61 -0
  448. package/tests/dependency-cache-key.test.sh +48 -0
  449. package/tests/dependency-restore-mode.test.sh +48 -0
  450. package/tests/doctor-template-parity.test.sh +95 -0
  451. package/tests/github-operations.test.sh +142 -0
  452. package/tests/npm-install-flags.test.sh +58 -0
  453. package/tests/quality-gates.test.sh +178 -0
  454. package/tests/repo-memory.test.sh +103 -0
  455. package/tests/restore-disallowed-changes.test.sh +80 -0
  456. package/tests/validation-missing-npm-scripts.test.sh +93 -0
  457. package/tests/validation-strict-mode.test.sh +118 -0
  458. package/tsconfig.changed.json +7 -0
  459. package/tsconfig.json +39 -0
@@ -0,0 +1,591 @@
1
+ ---
2
+ name: quality-gate-configuration
3
+ description: Defining and validating quality gates for kaseki runs
4
+ tags: [kaseki, quality-gates, validation, constraints, security]
5
+ relatedSkills: [prompt-engineering, workflow-diagnosis]
6
+ ---
7
+
8
+ # Quality Gate Configuration for Kaseki Agent
9
+
10
+ This skill guides designing and validating quality gates for kaseki runs, ensuring changes stay within acceptable bounds.
11
+
12
+ ## Overview
13
+
14
+ **When to Use**:
15
+ - Designing quality gates for a new task
16
+ - Troubleshooting allowlist violations or diff size limits
17
+ - Tuning validation command timeouts
18
+ - Reviewing security constraints
19
+ - Defining gates for a target repository
20
+
21
+ **Key Concepts**:
22
+ - Quality gates enforce boundaries (file scope, diff size, security rules)
23
+ - Gates run after the agent completes, before reporting success
24
+ - Violations can trigger exit codes and halt the pipeline
25
+ - Gates provide both safety (prevent unintended changes) and insight (validate scope)
26
+
27
+ ---
28
+
29
+ ## Core Quality Gates
30
+
31
+ ### 1. **File Allowlist** (KASEKI_CHANGED_FILES_ALLOWLIST)
32
+
33
+ **Purpose**: Restrict changes to specific files or directories
34
+
35
+ **Environment Variable**:
36
+ ```bash
37
+ KASEKI_CHANGED_FILES_ALLOWLIST="src/lib/parser.ts tests/parser.test.ts src/lib/validator.ts"
38
+ ```
39
+
40
+ **Syntax**: Space-separated file paths or glob patterns
41
+
42
+ #### Syntax Examples
43
+
44
+ | Pattern | Matches | Example |
45
+ |---|---|---|
46
+ | `src/file.ts` | Exact file | `src/lib/parser.ts` |
47
+ | `src/**/*.ts` | Recursive glob | `src/lib/parser.ts`, `src/util/index.ts` |
48
+ | `tests/*.test.ts` | Directory glob | `tests/parser.test.ts`, `tests/utils.test.ts` |
49
+ | `*.md` | Root-level glob | `README.md`, `CHANGELOG.md` |
50
+
51
+ **❌ Invalid Patterns**:
52
+ - Wildcards alone: `*` (too broad; be explicit)
53
+ - Relative paths: `../src/file.ts` (stay in repo)
54
+ - Regex: `src/(parser\|validator)\.ts` (use glob syntax)
55
+
56
+ #### Design Allowlist for a Task
57
+
58
+ **Example 1: Bug Fix**
59
+
60
+ ```bash
61
+ # Task: Fix normalizeRole to handle non-string inputs
62
+ TASK_PROMPT="Fix normalizeRole function in src/lib/role.ts..."
63
+
64
+ # Allowlist: Only the bug fix file + tests
65
+ KASEKI_CHANGED_FILES_ALLOWLIST="src/lib/role.ts tests/role.test.ts"
66
+ ```
67
+
68
+ **Example 2: Multi-File Refactor**
69
+
70
+ ```bash
71
+ # Task: Add TypeScript support to config module
72
+ TASK_PROMPT="Add type annotations to src/config/..."
73
+
74
+ # Allowlist: Config directory + related tests
75
+ KASEKI_CHANGED_FILES_ALLOWLIST="src/config/** tests/config/**"
76
+ ```
77
+
78
+ **Example 3: Documentation**
79
+
80
+ ```bash
81
+ # Task: Update docs for new API
82
+ TASK_PROMPT="Update docs/api.md with new endpoint..."
83
+
84
+ # Allowlist: Documentation + changelog
85
+ KASEKI_CHANGED_FILES_ALLOWLIST="docs/api.md CHANGELOG.md"
86
+ ```
87
+
88
+ #### Validating Allowlist
89
+
90
+ ```bash
91
+ # Before running kaseki, check what you expect to change
92
+ git diff --name-only main -- $(your task scope)
93
+
94
+ # Example output:
95
+ # src/lib/role.ts
96
+ # tests/role.test.ts
97
+
98
+ # Set allowlist to match
99
+ export KASEKI_CHANGED_FILES_ALLOWLIST="src/lib/role.ts tests/role.test.ts"
100
+
101
+ # Run kaseki
102
+ ./run-kaseki.sh
103
+ ```
104
+
105
+ #### Allowlist Violations
106
+
107
+ If agent changes files outside the allowlist:
108
+
109
+ ```bash
110
+ # Check what changed
111
+ cat /agents/kaseki-results/kaseki-N/changed-files.txt
112
+ # Output:
113
+ # src/lib/role.ts
114
+ # tests/role.test.ts
115
+ # src/other/config.ts ← NOT in allowlist!
116
+
117
+ # Check quality gate failure
118
+ cat /agents/kaseki-results/kaseki-N/quality.log
119
+ # Output: File 'src/other/config.ts' not in allowlist
120
+ ```
121
+
122
+ **Fix**:
123
+ 1. **Refine the prompt** — be more explicit about constraints
124
+ 2. **Expand the allowlist** — if the change was legitimate
125
+ 3. **Retry** — with updated config
126
+
127
+ ---
128
+
129
+ ### 2. **Maximum Diff Size** (KASEKI_MAX_DIFF_BYTES)
130
+
131
+ **Purpose**: Prevent unexpectedly large changes
132
+
133
+ **Environment Variable**:
134
+ ```bash
135
+ KASEKI_MAX_DIFF_BYTES=200000 # 200 KB default
136
+ ```
137
+
138
+ **Format**: Bytes (integer)
139
+
140
+ #### Choosing an Appropriate Limit
141
+
142
+ | Task Type | Typical Range | Example Limit |
143
+ |---|---|---|
144
+ | Small bug fix | 1–10 KB | 50000 (50 KB) |
145
+ | Single feature | 5–50 KB | 100000 (100 KB) |
146
+ | Module refactor | 20–200 KB | 300000 (300 KB) |
147
+ | Large refactor | 50–500 KB | 500000 (500 KB) |
148
+
149
+ **Heuristic**:
150
+ - Start with 200 KB (default) for typical tasks
151
+ - Increase if legitimate changes exceed limit
152
+ - Decrease if you want strict scope enforcement
153
+
154
+ #### Estimating Diff Size
155
+
156
+ ```bash
157
+ # For a task you've done manually, check the diff size
158
+ git diff HEAD -- <files> | wc -c
159
+ # Output: 12345 bytes
160
+
161
+ # Round up 50% for safety
162
+ # 12345 * 1.5 = 18517 → set limit to 25000 (25 KB)
163
+ ```
164
+
165
+ #### Diff Size Violations
166
+
167
+ ```bash
168
+ # Check the actual diff size
169
+ wc -c < /agents/kaseki-results/kaseki-N/git.diff
170
+ # Output: 250000 bytes
171
+
172
+ # Check the limit that was set
173
+ cat /agents/kaseki-results/kaseki-N/quality.log
174
+ # Output: Diff size 250000 exceeds KASEKI_MAX_DIFF_BYTES (200000)
175
+
176
+ # See what changed
177
+ head -100 /agents/kaseki-results/kaseki-N/git.diff
178
+ ```
179
+
180
+ **Fix**:
181
+ 1. **Simplify the task** — scope it down further
182
+ 2. **Increase the limit** — if the change is legitimate
183
+ 3. **Check for unintended changes** — agent may have refactored more than intended
184
+
185
+ ---
186
+
187
+ ### 3. **Validation Commands** (KASEKI_VALIDATION_COMMANDS)
188
+
189
+ **Purpose**: Run tests, type checks, builds to validate changes
190
+
191
+ **Environment Variable**:
192
+ ```bash
193
+ KASEKI_VALIDATION_COMMANDS="npm run check;npm run test;npm run build"
194
+ ```
195
+
196
+ **Format**: Semicolon-separated commands
197
+
198
+ #### Missing Scripts Behavior
199
+
200
+ If a validation command refers to an npm script that doesn't exist in `package.json`:
201
+ - Kaseki **warns** and **skips** that command (non-fatal)
202
+ - Execution continues to the next command
203
+ - The skipped command is recorded in `validation-timings.tsv` as `skipped`
204
+
205
+ This allows the same default validation sequence to work across repos with varying script definitions.
206
+
207
+ #### Command Chaining
208
+
209
+ Commands run in sequence. If one fails, the pipeline stops.
210
+
211
+ ```bash
212
+ # Runs in order:
213
+ 1. npm run check # Type checking
214
+ 2. npm run test # Unit tests
215
+ 3. npm run build # Build verification
216
+ ```
217
+
218
+ **With Early Exit**:
219
+ ```bash
220
+ # Stop on first failure (default)
221
+ npm run check && npm run test && npm run build
222
+ ```
223
+
224
+ #### Choosing Validation Commands
225
+
226
+ | Repo Type | Recommended Commands |
227
+ |---|---|
228
+ | **TypeScript** | `npm run check;npm run test;npm run build` |
229
+ | **JavaScript (ESM)** | `npm run lint;npm run test` |
230
+ | **Python** | `python -m pytest;mypy src/` |
231
+ | **Rust** | `cargo check;cargo test;cargo build` |
232
+ | **Minimal** | `npm test` (single comprehensive test) |
233
+
234
+ #### Examples
235
+
236
+ **Example 1: Minimal (just tests)**
237
+ ```bash
238
+ KASEKI_VALIDATION_COMMANDS="npm run test"
239
+ ```
240
+
241
+ **Example 2: Comprehensive (types + tests + build)**
242
+ ```bash
243
+ KASEKI_VALIDATION_COMMANDS="npm run check;npm run test;npm run build"
244
+ ```
245
+
246
+ **Example 3: Targeted (specific test file)**
247
+ ```bash
248
+ # If you only care about changes to one module
249
+ KASEKI_VALIDATION_COMMANDS="npm run test -- tests/role.test.ts"
250
+ ```
251
+
252
+ #### Timeout Tuning
253
+
254
+ Commands run with the `KASEKI_AGENT_TIMEOUT_SECONDS` (default 1200s = 20 min).
255
+
256
+ If validation is slow:
257
+
258
+ ```bash
259
+ # Check which command is slow
260
+ cat /agents/kaseki-results/kaseki-N/validation-timings.tsv
261
+ # Output:
262
+ # command duration_seconds
263
+ # npm ci 120 ← long (see Dependency Cache Optimization)
264
+ # npm run check 45
265
+ # npm run test 150 ← very long
266
+ # npm run build 60
267
+ ```
268
+
269
+ **Optimize**:
270
+ 1. **Reduce test scope** — run only relevant tests
271
+ 2. **Increase timeout** — if all commands are slow due to slow repo
272
+ 3. **Improve caching** — see [Dependency Cache Optimization](dependency-cache-optimization.md)
273
+
274
+ ```bash
275
+ # Run only tests for changed files
276
+ KASEKI_VALIDATION_COMMANDS="npm run test -- --changed"
277
+
278
+ # Or increase timeout
279
+ KASEKI_AGENT_TIMEOUT_SECONDS=1800 # 30 minutes
280
+ ```
281
+
282
+ ---
283
+
284
+ ### 4. **Security Gates**
285
+
286
+ **Purpose**: Prevent credential leaks and other security issues
287
+
288
+ **Gates** (built-in, not configurable):
289
+ - Secret scanning (detects `sk-or-*` patterns)
290
+ - No credentials in diffs or logs
291
+ - No `.env` files committed
292
+
293
+ #### Secret Scanning
294
+
295
+ Kaseki automatically scans outputs for credential patterns:
296
+
297
+ ```bash
298
+ # Check if secrets were found
299
+ cat /agents/kaseki-results/kaseki-N/secret-scan.log
300
+ # Output: Found secret pattern sk-or-abc123 in pi-events.jsonl:42
301
+ ```
302
+
303
+ **Patterns Detected**:
304
+ - `sk-or-*` — OpenRouter API keys
305
+ - `sk-ant-*` — Anthropic API keys (if used)
306
+ - `.env` file commits
307
+ - Environment variable dumps
308
+
309
+ **Prevention**:
310
+ - ✓ Never include API keys in examples
311
+ - ✓ Describe credentials without showing them ("API key" not "sk-or-123")
312
+ - ✓ Ensure task prompts don't leak env vars
313
+ - See [Prompt Engineering](prompt-engineering.md) for security checklist
314
+
315
+ ---
316
+
317
+ ## Designing Quality Gates for a New Task
318
+
319
+ ### Step-by-Step Workflow
320
+
321
+ **Step 1: Understand the Task**
322
+ ```bash
323
+ # What files will change?
324
+ # What validation is appropriate?
325
+ # What's the realistic diff size?
326
+ ```
327
+
328
+ **Step 2: Design Allowlist**
329
+ ```bash
330
+ # Manually make the change locally
331
+ git checkout -b feature/task
332
+
333
+ # Manually fix the issue
334
+ # (Make the minimal change the agent should make)
335
+
336
+ # See what changed
337
+ git diff --name-only
338
+ # Output:
339
+ # src/lib/role.ts
340
+ # tests/role.test.ts
341
+
342
+ # Set allowlist
343
+ export KASEKI_CHANGED_FILES_ALLOWLIST="src/lib/role.ts tests/role.test.ts"
344
+ ```
345
+
346
+ **Step 3: Estimate Diff Size**
347
+ ```bash
348
+ # Check the diff size of your manual change
349
+ git diff | wc -c
350
+ # Output: 8234 bytes
351
+
352
+ # Round up to account for agent variations (1.5x safety factor)
353
+ # 8234 * 1.5 = 12351 → set limit to 20000 (20 KB)
354
+
355
+ export KASEKI_MAX_DIFF_BYTES=20000
356
+ ```
357
+
358
+ **Step 4: Verify Validation Commands**
359
+ ```bash
360
+ # Run validation commands locally (without your changes!)
361
+ git checkout main
362
+
363
+ # Install deps
364
+ npm ci
365
+
366
+ # Test validation commands work
367
+ npm run check # No errors?
368
+ npm run test # All pass?
369
+ npm run build # Success?
370
+
371
+ # Now apply your changes and verify again
372
+ git checkout feature/task
373
+ npm run check && npm run test && npm run build
374
+ ```
375
+
376
+ **Step 5: Set Validation Commands**
377
+ ```bash
378
+ export KASEKI_VALIDATION_COMMANDS="npm run check;npm run test;npm run build"
379
+ ```
380
+
381
+ **Step 6: Run a Test Kaseki Instance**
382
+ ```bash
383
+ OPENROUTER_API_KEY=sk-or-... \
384
+ REPO_URL=https://github.com/org/repo \
385
+ TASK_PROMPT="$(cat task.txt)" \
386
+ KASEKI_CHANGED_FILES_ALLOWLIST="src/lib/role.ts tests/role.test.ts" \
387
+ KASEKI_MAX_DIFF_BYTES=20000 \
388
+ KASEKI_VALIDATION_COMMANDS="npm run check;npm run test;npm run build" \
389
+ ./run-kaseki.sh kaseki-test-1
390
+ ```
391
+
392
+ **Step 7: Review Results**
393
+ ```bash
394
+ # Check if gates passed
395
+ cat /agents/kaseki-results/kaseki-test-1/quality.log
396
+
397
+ # If all gates passed, you're ready!
398
+ ```
399
+
400
+ ---
401
+
402
+ ## Common Configuration Examples
403
+
404
+ ### Example 1: Small Bug Fix
405
+
406
+ ```bash
407
+ #!/bin/bash
408
+ # fix-small-bug.sh
409
+
410
+ export TASK_PROMPT="Fix the NullPointerException in User.getUsername()
411
+ when input is null. Should return empty string instead of throwing."
412
+
413
+ export KASEKI_CHANGED_FILES_ALLOWLIST="src/User.java tests/UserTest.java"
414
+ export KASEKI_MAX_DIFF_BYTES=15000 # 15 KB
415
+ export KASEKI_VALIDATION_COMMANDS="mvn test"
416
+
417
+ ./run-kaseki.sh kaseki-bugfix-1
418
+ ```
419
+
420
+ ### Example 2: Feature Addition (Multi-File)
421
+
422
+ ```bash
423
+ #!/bin/bash
424
+ # add-feature.sh
425
+
426
+ export TASK_PROMPT="Add support for JWT authentication tokens.
427
+ Modify src/auth/jwt.ts and update types/auth.ts.
428
+ Update tests/auth.test.ts with JWT test cases.
429
+ Do NOT change other authentication mechanisms."
430
+
431
+ export KASEKI_CHANGED_FILES_ALLOWLIST="src/auth/jwt.ts types/auth.ts tests/auth.test.ts"
432
+ export KASEKI_MAX_DIFF_BYTES=50000 # 50 KB
433
+ export KASEKI_VALIDATION_COMMANDS="npm run check;npm run test -- tests/auth.test.ts"
434
+
435
+ ./run-kaseki.sh kaseki-feature-1
436
+ ```
437
+
438
+ ### Example 3: Documentation Update
439
+
440
+ ```bash
441
+ #!/bin/bash
442
+ # update-docs.sh
443
+
444
+ export TASK_PROMPT="Update docs/API.md to document the new getUserBy endpoint.
445
+ Include request/response examples."
446
+
447
+ export KASEKI_CHANGED_FILES_ALLOWLIST="docs/API.md"
448
+ export KASEKI_MAX_DIFF_BYTES=10000 # 10 KB
449
+ export KASEKI_VALIDATION_COMMANDS="npm run test" # No special validation
450
+
451
+ ./run-kaseki.sh kaseki-docs-1
452
+ ```
453
+
454
+ ### Example 4: Refactor with Safety
455
+
456
+ ```bash
457
+ #!/bin/bash
458
+ # refactor-safely.sh
459
+
460
+ export TASK_PROMPT="Refactor Parser.parseConfig() to use switch statement
461
+ instead of if/else chain. Preserve exact behavior."
462
+
463
+ export KASEKI_CHANGED_FILES_ALLOWLIST="src/Parser.ts tests/ParserTest.ts"
464
+ export KASEKI_MAX_DIFF_BYTES=30000 # 30 KB (refactors are often larger)
465
+ export KASEKI_VALIDATION_COMMANDS="npm run check;npm run test"
466
+
467
+ ./run-kaseki.sh kaseki-refactor-1
468
+ ```
469
+
470
+ ---
471
+
472
+ ## Troubleshooting Quality Gate Violations
473
+
474
+ ### Allowlist Violation
475
+
476
+ **Symptom**: Agent changed files outside the allowlist
477
+
478
+ ```bash
479
+ # Check what the allowlist was
480
+ echo $KASEKI_CHANGED_FILES_ALLOWLIST
481
+
482
+ # Check what actually changed
483
+ cat /agents/kaseki-results/kaseki-N/changed-files.txt
484
+ ```
485
+
486
+ **Solution**:
487
+ 1. **Expand allowlist** if change was legitimate:
488
+ ```bash
489
+ export KASEKI_CHANGED_FILES_ALLOWLIST="src/lib/role.ts tests/role.test.ts src/other/file.ts"
490
+ ./run-kaseki.sh kaseki-retry-1
491
+ ```
492
+
493
+ 2. **Refine prompt** if change was unintended:
494
+ ```bash
495
+ # Be more explicit: "ONLY modify src/lib/role.ts and tests/role.test.ts"
496
+ export TASK_PROMPT="..."
497
+ ./run-kaseki.sh kaseki-retry-2
498
+ ```
499
+
500
+ ### Diff Size Exceeded
501
+
502
+ **Symptom**: Changes are too large
503
+
504
+ ```bash
505
+ # Check actual size
506
+ wc -c < /agents/kaseki-results/kaseki-N/git.diff
507
+
508
+ # Check what changed
509
+ cat /agents/kaseki-results/kaseki-N/changed-files.txt
510
+ ```
511
+
512
+ **Solution**:
513
+ 1. **Increase limit** if legitimate:
514
+ ```bash
515
+ export KASEKI_MAX_DIFF_BYTES=300000 # 300 KB
516
+ ./run-kaseki.sh kaseki-retry-1
517
+ ```
518
+
519
+ 2. **Narrow task scope** if changes are too broad:
520
+ ```bash
521
+ # Focus on just one module, not multiple
522
+ export TASK_PROMPT="Fix parser.ts only, not validator.ts"
523
+ ./run-kaseki.sh kaseki-retry-2
524
+ ```
525
+
526
+ ### Validation Command Failed
527
+
528
+ **Symptom**: Tests or checks failed
529
+
530
+ ```bash
531
+ # Check which command failed
532
+ cat /agents/kaseki-results/kaseki-N/result-summary.md | grep -A 3 "Validation"
533
+
534
+ # See full output
535
+ cat /agents/kaseki-results/kaseki-N/validation.log | tail -50
536
+ ```
537
+
538
+ **Solution**:
539
+ 1. **Check local validation** (reproduce locally):
540
+ ```bash
541
+ git clone <repo>
542
+ cd repo
543
+ npm ci
544
+ npm run check && npm run test
545
+ # Did they pass without any changes?
546
+ ```
547
+
548
+ 2. **Review what agent changed**:
549
+ ```bash
550
+ head -100 /agents/kaseki-results/kaseki-N/git.diff
551
+ # Is the change correct? Did it introduce type errors?
552
+ ```
553
+
554
+ 3. **Adjust commands or prompts** based on what failed
555
+
556
+ ---
557
+
558
+ ## Best Practices
559
+
560
+ 1. **Start Conservative, Expand as Needed**
561
+ - Begin with tight allowlists and small diff limits
562
+ - Only loosen if agent fails legitimately
563
+ - Prevents unexpected changes
564
+
565
+ 2. **Test Locally First**
566
+ - Make the change manually
567
+ - Verify all validation commands pass
568
+ - Use those results to set gates
569
+
570
+ 3. **Document Your Reasoning**
571
+ - Comment why you chose specific limits
572
+ - Link to the original issue/task
573
+ - Makes maintenance easier
574
+
575
+ 4. **Review Gate Violations**
576
+ - Don't automatically increase limits
577
+ - Understand why the violation occurred
578
+ - Update prompt if needed
579
+
580
+ 5. **Keep Gates Reasonable**
581
+ - Gates should be meaningful, not arbitrary
582
+ - Overly strict gates defeat the purpose
583
+ - Overly loose gates provide no protection
584
+
585
+ ---
586
+
587
+ ## Related Skills & Docs
588
+
589
+ - [Prompt Engineering](prompt-engineering.md) — Design prompts to work with quality gates
590
+ - [Workflow Diagnosis](workflow-diagnosis.md) — Troubleshoot gate violations
591
+ - [CLAUDE.md](../../CLAUDE.md) — Architecture and environment variables reference