playwright-intelligence-engine 0.0.0-stage → 2.0.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 (353) hide show
  1. package/LICENSE +191 -0
  2. package/README.md +229 -3
  3. package/bin/pw-intel.js +37 -0
  4. package/dist/authoring/author.d.ts +83 -0
  5. package/dist/authoring/author.d.ts.map +1 -0
  6. package/dist/authoring/generation-contract.d.ts +90 -0
  7. package/dist/authoring/generation-contract.d.ts.map +1 -0
  8. package/dist/authoring/hybrid-author.d.ts +6 -0
  9. package/dist/authoring/hybrid-author.d.ts.map +1 -0
  10. package/dist/authoring/index.d.ts +7 -0
  11. package/dist/authoring/index.d.ts.map +1 -0
  12. package/dist/authoring/llm-author.d.ts +28 -0
  13. package/dist/authoring/llm-author.d.ts.map +1 -0
  14. package/dist/authoring/naming/index.d.ts +4 -0
  15. package/dist/authoring/naming/index.d.ts.map +1 -0
  16. package/dist/authoring/naming/name-plan.d.ts +45 -0
  17. package/dist/authoring/naming/name-plan.d.ts.map +1 -0
  18. package/dist/authoring/naming/name-planner.d.ts +25 -0
  19. package/dist/authoring/naming/name-planner.d.ts.map +1 -0
  20. package/dist/authoring/naming/naming-linter.d.ts +20 -0
  21. package/dist/authoring/naming/naming-linter.d.ts.map +1 -0
  22. package/dist/authoring/template-author.d.ts +6 -0
  23. package/dist/authoring/template-author.d.ts.map +1 -0
  24. package/dist/cli/index.d.ts +2 -0
  25. package/dist/cli/index.d.ts.map +1 -0
  26. package/dist/collectors/collector-interface.d.ts +7 -0
  27. package/dist/collectors/collector-interface.d.ts.map +1 -0
  28. package/dist/collectors/environment-collector.d.ts +12 -0
  29. package/dist/collectors/environment-collector.d.ts.map +1 -0
  30. package/dist/collectors/error-collector.d.ts +18 -0
  31. package/dist/collectors/error-collector.d.ts.map +1 -0
  32. package/dist/collectors/git-diff-collector.d.ts +20 -0
  33. package/dist/collectors/git-diff-collector.d.ts.map +1 -0
  34. package/dist/collectors/live-browser-collector.d.ts +45 -0
  35. package/dist/collectors/live-browser-collector.d.ts.map +1 -0
  36. package/dist/collectors/network-collector.d.ts +28 -0
  37. package/dist/collectors/network-collector.d.ts.map +1 -0
  38. package/dist/collectors/static-ast-collector.d.ts +32 -0
  39. package/dist/collectors/static-ast-collector.d.ts.map +1 -0
  40. package/dist/collectors/trace-collector.d.ts +12 -0
  41. package/dist/collectors/trace-collector.d.ts.map +1 -0
  42. package/dist/config/project-config.d.ts +33 -0
  43. package/dist/config/project-config.d.ts.map +1 -0
  44. package/dist/core/errors/engine-errors.d.ts +34 -0
  45. package/dist/core/errors/engine-errors.d.ts.map +1 -0
  46. package/dist/core/types/diagnostic-context.d.ts +151 -0
  47. package/dist/core/types/diagnostic-context.d.ts.map +1 -0
  48. package/dist/core/types/repair-evidence.d.ts +56 -0
  49. package/dist/core/types/repair-evidence.d.ts.map +1 -0
  50. package/dist/core/version.d.ts +13 -0
  51. package/dist/core/version.d.ts.map +1 -0
  52. package/dist/diagnostics/diagnostic-contract.d.ts +52 -0
  53. package/dist/diagnostics/diagnostic-contract.d.ts.map +1 -0
  54. package/dist/diagnostics/diagnostic-report.d.ts +11 -0
  55. package/dist/diagnostics/diagnostic-report.d.ts.map +1 -0
  56. package/dist/diagnostics/evidence-correlator.d.ts +22 -0
  57. package/dist/diagnostics/evidence-correlator.d.ts.map +1 -0
  58. package/dist/diagnostics/external-failure-evidence.d.ts +18 -0
  59. package/dist/diagnostics/external-failure-evidence.d.ts.map +1 -0
  60. package/dist/diagnostics/failure-category.d.ts +4 -0
  61. package/dist/diagnostics/failure-category.d.ts.map +1 -0
  62. package/dist/diagnostics/failure-classifier.d.ts +58 -0
  63. package/dist/diagnostics/failure-classifier.d.ts.map +1 -0
  64. package/dist/evaluation/evaluation-scorecard.d.ts +72 -0
  65. package/dist/evaluation/evaluation-scorecard.d.ts.map +1 -0
  66. package/dist/evaluation/repository-inspector.d.ts +21 -0
  67. package/dist/evaluation/repository-inspector.d.ts.map +1 -0
  68. package/dist/evaluation/repository-runner.d.ts +24 -0
  69. package/dist/evaluation/repository-runner.d.ts.map +1 -0
  70. package/dist/evidence/evidence-model.d.ts +88 -0
  71. package/dist/evidence/evidence-model.d.ts.map +1 -0
  72. package/dist/evidence/evidence-normalizer.d.ts +19 -0
  73. package/dist/evidence/evidence-normalizer.d.ts.map +1 -0
  74. package/dist/evidence/evidence-redactor.d.ts +37 -0
  75. package/dist/evidence/evidence-redactor.d.ts.map +1 -0
  76. package/dist/framework/config-adapter.d.ts +28 -0
  77. package/dist/framework/config-adapter.d.ts.map +1 -0
  78. package/dist/gate/index.d.ts +21 -0
  79. package/dist/gate/index.d.ts.map +1 -0
  80. package/dist/gate/oracle.d.ts +26 -0
  81. package/dist/gate/oracle.d.ts.map +1 -0
  82. package/dist/gate/quality.d.ts +27 -0
  83. package/dist/gate/quality.d.ts.map +1 -0
  84. package/dist/gate/safety.d.ts +28 -0
  85. package/dist/gate/safety.d.ts.map +1 -0
  86. package/dist/generator/architecture-generator.d.ts +55 -0
  87. package/dist/generator/architecture-generator.d.ts.map +1 -0
  88. package/dist/generator/assertion-quality-gate.d.ts +18 -0
  89. package/dist/generator/assertion-quality-gate.d.ts.map +1 -0
  90. package/dist/generator/candidate-writer.d.ts +34 -0
  91. package/dist/generator/candidate-writer.d.ts.map +1 -0
  92. package/dist/generator/test-generator.d.ts +26 -0
  93. package/dist/generator/test-generator.d.ts.map +1 -0
  94. package/dist/governance/audit-log.d.ts +23 -0
  95. package/dist/governance/audit-log.d.ts.map +1 -0
  96. package/dist/governance/governance-policy.d.ts +24 -0
  97. package/dist/governance/governance-policy.d.ts.map +1 -0
  98. package/dist/governance/team-dashboard.d.ts +51 -0
  99. package/dist/governance/team-dashboard.d.ts.map +1 -0
  100. package/dist/governance/workflow-audit.d.ts +13 -0
  101. package/dist/governance/workflow-audit.d.ts.map +1 -0
  102. package/dist/index.d.ts +90 -0
  103. package/dist/index.d.ts.map +1 -0
  104. package/dist/index.js +20318 -0
  105. package/dist/integrations/ci-summary.d.ts +14 -0
  106. package/dist/integrations/ci-summary.d.ts.map +1 -0
  107. package/dist/integrations/playwright-report-adapter.d.ts +22 -0
  108. package/dist/integrations/playwright-report-adapter.d.ts.map +1 -0
  109. package/dist/integrations/quality-gate.d.ts +35 -0
  110. package/dist/integrations/quality-gate.d.ts.map +1 -0
  111. package/dist/integrations/sarif-report.d.ts +48 -0
  112. package/dist/integrations/sarif-report.d.ts.map +1 -0
  113. package/dist/intelligence/autonomous-repair-workflow.d.ts +31 -0
  114. package/dist/intelligence/autonomous-repair-workflow.d.ts.map +1 -0
  115. package/dist/intelligence/business-intent.d.ts +58 -0
  116. package/dist/intelligence/business-intent.d.ts.map +1 -0
  117. package/dist/intelligence/evidence-bundle.d.ts +364 -0
  118. package/dist/intelligence/evidence-bundle.d.ts.map +1 -0
  119. package/dist/intelligence/failure-clustering.d.ts +38 -0
  120. package/dist/intelligence/failure-clustering.d.ts.map +1 -0
  121. package/dist/intelligence/generation-agent.d.ts +120 -0
  122. package/dist/intelligence/generation-agent.d.ts.map +1 -0
  123. package/dist/intelligence/generation-verifier.d.ts +151 -0
  124. package/dist/intelligence/generation-verifier.d.ts.map +1 -0
  125. package/dist/intelligence/llm-proposal.d.ts +377 -0
  126. package/dist/intelligence/llm-proposal.d.ts.map +1 -0
  127. package/dist/intelligence/locator-disambiguation-engine.d.ts +38 -0
  128. package/dist/intelligence/locator-disambiguation-engine.d.ts.map +1 -0
  129. package/dist/intelligence/model-contract.d.ts +86 -0
  130. package/dist/intelligence/model-contract.d.ts.map +1 -0
  131. package/dist/intelligence/model-provider.d.ts +75 -0
  132. package/dist/intelligence/model-provider.d.ts.map +1 -0
  133. package/dist/intelligence/project-intelligence.d.ts +22 -0
  134. package/dist/intelligence/project-intelligence.d.ts.map +1 -0
  135. package/dist/intelligence/repair-agent.d.ts +46 -0
  136. package/dist/intelligence/repair-agent.d.ts.map +1 -0
  137. package/dist/intelligence/repository-profile.d.ts +131 -0
  138. package/dist/intelligence/repository-profile.d.ts.map +1 -0
  139. package/dist/intelligence/suite-intelligence.d.ts +59 -0
  140. package/dist/intelligence/suite-intelligence.d.ts.map +1 -0
  141. package/dist/intelligence/test-intelligence.d.ts +44 -0
  142. package/dist/intelligence/test-intelligence.d.ts.map +1 -0
  143. package/dist/intelligence/trace-proposal-workflow.d.ts +30 -0
  144. package/dist/intelligence/trace-proposal-workflow.d.ts.map +1 -0
  145. package/dist/intelligence/verified-llm-repair-workflow.d.ts +21 -0
  146. package/dist/intelligence/verified-llm-repair-workflow.d.ts.map +1 -0
  147. package/dist/intelligence/workflow-planner.d.ts +278 -0
  148. package/dist/intelligence/workflow-planner.d.ts.map +1 -0
  149. package/dist/mcp/server.d.ts +32 -0
  150. package/dist/mcp/server.d.ts.map +1 -0
  151. package/dist/memory/stability-ledger.d.ts +46 -0
  152. package/dist/memory/stability-ledger.d.ts.map +1 -0
  153. package/dist/perception/app-model.d.ts +55 -0
  154. package/dist/perception/app-model.d.ts.map +1 -0
  155. package/dist/perception/crawler.d.ts +18 -0
  156. package/dist/perception/crawler.d.ts.map +1 -0
  157. package/dist/perception/index.d.ts +3 -0
  158. package/dist/perception/index.d.ts.map +1 -0
  159. package/dist/repair/approval-service.d.ts +139 -0
  160. package/dist/repair/approval-service.d.ts.map +1 -0
  161. package/dist/repair/assertion-hasher.d.ts +62 -0
  162. package/dist/repair/assertion-hasher.d.ts.map +1 -0
  163. package/dist/repair/ast-patcher.d.ts +36 -0
  164. package/dist/repair/ast-patcher.d.ts.map +1 -0
  165. package/dist/repair/browser-operation-executor.d.ts +27 -0
  166. package/dist/repair/browser-operation-executor.d.ts.map +1 -0
  167. package/dist/repair/diff-allowlist.d.ts +74 -0
  168. package/dist/repair/diff-allowlist.d.ts.map +1 -0
  169. package/dist/repair/intent-validator.d.ts +157 -0
  170. package/dist/repair/intent-validator.d.ts.map +1 -0
  171. package/dist/repair/repair-operations.d.ts +40 -0
  172. package/dist/repair/repair-operations.d.ts.map +1 -0
  173. package/dist/repair/repair-planner.d.ts +98 -0
  174. package/dist/repair/repair-planner.d.ts.map +1 -0
  175. package/dist/repair/repair-workflow.d.ts +42 -0
  176. package/dist/repair/repair-workflow.d.ts.map +1 -0
  177. package/dist/repair/safe-operation-compiler.d.ts +15 -0
  178. package/dist/repair/safe-operation-compiler.d.ts.map +1 -0
  179. package/dist/repair/source-mapper.d.ts +19 -0
  180. package/dist/repair/source-mapper.d.ts.map +1 -0
  181. package/dist/repair/statement-patcher.d.ts +75 -0
  182. package/dist/repair/statement-patcher.d.ts.map +1 -0
  183. package/dist/repair/verification-gates.d.ts +25 -0
  184. package/dist/repair/verification-gates.d.ts.map +1 -0
  185. package/dist/repair/workflow-plan.d.ts +35 -0
  186. package/dist/repair/workflow-plan.d.ts.map +1 -0
  187. package/dist/repair/workspace-promoter.d.ts +43 -0
  188. package/dist/repair/workspace-promoter.d.ts.map +1 -0
  189. package/dist/reproduce/diagnostic-rerunner.d.ts +40 -0
  190. package/dist/reproduce/diagnostic-rerunner.d.ts.map +1 -0
  191. package/dist/reproduce/direct-browser-investigator.d.ts +41 -0
  192. package/dist/reproduce/direct-browser-investigator.d.ts.map +1 -0
  193. package/dist/reproduce/interactive-workflow-runner.d.ts +43 -0
  194. package/dist/reproduce/interactive-workflow-runner.d.ts.map +1 -0
  195. package/dist/sandbox/dependency-strategy.d.ts +45 -0
  196. package/dist/sandbox/dependency-strategy.d.ts.map +1 -0
  197. package/dist/sandbox/execution-runner.d.ts +81 -0
  198. package/dist/sandbox/execution-runner.d.ts.map +1 -0
  199. package/dist/sandbox/worktree-manager.d.ts +51 -0
  200. package/dist/sandbox/worktree-manager.d.ts.map +1 -0
  201. package/dist/selector/abstention-policy.d.ts +34 -0
  202. package/dist/selector/abstention-policy.d.ts.map +1 -0
  203. package/dist/selector/candidate-extractor.d.ts +71 -0
  204. package/dist/selector/candidate-extractor.d.ts.map +1 -0
  205. package/dist/selector/live-locator-verifier.d.ts +28 -0
  206. package/dist/selector/live-locator-verifier.d.ts.map +1 -0
  207. package/dist/selector/repair-candidate-ranker.d.ts +10 -0
  208. package/dist/selector/repair-candidate-ranker.d.ts.map +1 -0
  209. package/dist/selector/selector-scorer.d.ts +43 -0
  210. package/dist/selector/selector-scorer.d.ts.map +1 -0
  211. package/dist/trace/adapters/adapter-registry.d.ts +18 -0
  212. package/dist/trace/adapters/adapter-registry.d.ts.map +1 -0
  213. package/dist/trace/adapters/trace-adapter.d.ts +21 -0
  214. package/dist/trace/adapters/trace-adapter.d.ts.map +1 -0
  215. package/dist/trace/adapters/unknown-adapter.d.ts +10 -0
  216. package/dist/trace/adapters/unknown-adapter.d.ts.map +1 -0
  217. package/dist/trace/adapters/v10-adapter.d.ts +10 -0
  218. package/dist/trace/adapters/v10-adapter.d.ts.map +1 -0
  219. package/dist/trace/adapters/v4-adapter.d.ts +11 -0
  220. package/dist/trace/adapters/v4-adapter.d.ts.map +1 -0
  221. package/dist/trace/adapters/v8-adapter.d.ts +10 -0
  222. package/dist/trace/adapters/v8-adapter.d.ts.map +1 -0
  223. package/dist/trace/adapters/v9-adapter.d.ts +10 -0
  224. package/dist/trace/adapters/v9-adapter.d.ts.map +1 -0
  225. package/dist/trace/archive-reader.d.ts +44 -0
  226. package/dist/trace/archive-reader.d.ts.map +1 -0
  227. package/dist/trace/snapshot-resolver.d.ts +55 -0
  228. package/dist/trace/snapshot-resolver.d.ts.map +1 -0
  229. package/dist/trace/trace-parser.d.ts +50 -0
  230. package/dist/trace/trace-parser.d.ts.map +1 -0
  231. package/dist/trace/version-detector.d.ts +20 -0
  232. package/dist/trace/version-detector.d.ts.map +1 -0
  233. package/package.json +76 -6
  234. package/skills/README.md +20 -0
  235. package/skills/pie-failure-investigation/SKILL.md +16 -0
  236. package/skills/pie-quality-engineer/SKILL.md +66 -0
  237. package/skills/pie-release-readiness/SKILL.md +22 -0
  238. package/skills/pie-repair-review/SKILL.md +21 -0
  239. package/skills/pie-trace-to-repair/SKILL.md +35 -0
  240. package/src/authoring/author.ts +81 -0
  241. package/src/authoring/generation-contract.ts +283 -0
  242. package/src/authoring/hybrid-author.ts +115 -0
  243. package/src/authoring/index.ts +7 -0
  244. package/src/authoring/llm-author.ts +282 -0
  245. package/src/authoring/naming/index.ts +4 -0
  246. package/src/authoring/naming/name-plan.ts +28 -0
  247. package/src/authoring/naming/name-planner.ts +339 -0
  248. package/src/authoring/naming/naming-linter.ts +292 -0
  249. package/src/authoring/template-author.ts +39 -0
  250. package/src/cli/index.ts +1172 -0
  251. package/src/collectors/collector-interface.ts +8 -0
  252. package/src/collectors/environment-collector.ts +103 -0
  253. package/src/collectors/error-collector.ts +177 -0
  254. package/src/collectors/git-diff-collector.ts +190 -0
  255. package/src/collectors/live-browser-collector.ts +412 -0
  256. package/src/collectors/network-collector.ts +90 -0
  257. package/src/collectors/static-ast-collector.ts +226 -0
  258. package/src/collectors/trace-collector.ts +66 -0
  259. package/src/config/project-config.ts +114 -0
  260. package/src/core/errors/engine-errors.ts +90 -0
  261. package/src/core/types/diagnostic-context.ts +94 -0
  262. package/src/core/types/repair-evidence.ts +45 -0
  263. package/src/core/version.ts +25 -0
  264. package/src/diagnostics/diagnostic-contract.ts +79 -0
  265. package/src/diagnostics/diagnostic-report.ts +204 -0
  266. package/src/diagnostics/evidence-correlator.ts +117 -0
  267. package/src/diagnostics/external-failure-evidence.ts +72 -0
  268. package/src/diagnostics/failure-category.ts +40 -0
  269. package/src/diagnostics/failure-classifier.ts +701 -0
  270. package/src/evaluation/evaluation-scorecard.ts +198 -0
  271. package/src/evaluation/repository-inspector.ts +143 -0
  272. package/src/evaluation/repository-runner.ts +197 -0
  273. package/src/evidence/evidence-model.ts +76 -0
  274. package/src/evidence/evidence-normalizer.ts +322 -0
  275. package/src/evidence/evidence-redactor.ts +218 -0
  276. package/src/framework/config-adapter.ts +131 -0
  277. package/src/gate/index.ts +43 -0
  278. package/src/gate/oracle.ts +69 -0
  279. package/src/gate/quality.ts +101 -0
  280. package/src/gate/safety.ts +94 -0
  281. package/src/generator/architecture-generator.ts +582 -0
  282. package/src/generator/assertion-quality-gate.ts +88 -0
  283. package/src/generator/candidate-writer.ts +288 -0
  284. package/src/generator/test-generator.ts +52 -0
  285. package/src/governance/audit-log.ts +115 -0
  286. package/src/governance/governance-policy.ts +72 -0
  287. package/src/governance/team-dashboard.ts +189 -0
  288. package/src/governance/workflow-audit.ts +72 -0
  289. package/src/index.ts +107 -0
  290. package/src/integrations/ci-summary.ts +37 -0
  291. package/src/integrations/playwright-report-adapter.ts +173 -0
  292. package/src/integrations/quality-gate.ts +95 -0
  293. package/src/integrations/sarif-report.ts +110 -0
  294. package/src/intelligence/autonomous-repair-workflow.ts +139 -0
  295. package/src/intelligence/business-intent.ts +163 -0
  296. package/src/intelligence/evidence-bundle.ts +300 -0
  297. package/src/intelligence/failure-clustering.ts +134 -0
  298. package/src/intelligence/generation-agent.ts +561 -0
  299. package/src/intelligence/generation-verifier.ts +1115 -0
  300. package/src/intelligence/llm-proposal.ts +519 -0
  301. package/src/intelligence/locator-disambiguation-engine.ts +331 -0
  302. package/src/intelligence/model-contract.ts +205 -0
  303. package/src/intelligence/model-provider.ts +348 -0
  304. package/src/intelligence/project-intelligence.ts +140 -0
  305. package/src/intelligence/repair-agent.ts +297 -0
  306. package/src/intelligence/repository-profile.ts +796 -0
  307. package/src/intelligence/suite-intelligence.ts +305 -0
  308. package/src/intelligence/test-intelligence.ts +136 -0
  309. package/src/intelligence/trace-proposal-workflow.ts +318 -0
  310. package/src/intelligence/verified-llm-repair-workflow.ts +48 -0
  311. package/src/intelligence/workflow-planner.ts +966 -0
  312. package/src/mcp/server.ts +970 -0
  313. package/src/memory/stability-ledger.ts +243 -0
  314. package/src/perception/app-model.ts +32 -0
  315. package/src/perception/crawler.ts +263 -0
  316. package/src/perception/index.ts +3 -0
  317. package/src/repair/approval-service.ts +541 -0
  318. package/src/repair/assertion-hasher.ts +386 -0
  319. package/src/repair/ast-patcher.ts +223 -0
  320. package/src/repair/browser-operation-executor.ts +263 -0
  321. package/src/repair/diff-allowlist.ts +612 -0
  322. package/src/repair/intent-validator.ts +761 -0
  323. package/src/repair/repair-operations.ts +65 -0
  324. package/src/repair/repair-planner.ts +467 -0
  325. package/src/repair/repair-workflow.ts +241 -0
  326. package/src/repair/safe-operation-compiler.ts +68 -0
  327. package/src/repair/source-mapper.ts +156 -0
  328. package/src/repair/statement-patcher.ts +544 -0
  329. package/src/repair/verification-gates.ts +46 -0
  330. package/src/repair/workflow-plan.ts +59 -0
  331. package/src/repair/workspace-promoter.ts +313 -0
  332. package/src/reproduce/diagnostic-rerunner.ts +287 -0
  333. package/src/reproduce/direct-browser-investigator.ts +208 -0
  334. package/src/reproduce/interactive-workflow-runner.ts +828 -0
  335. package/src/sandbox/dependency-strategy.ts +215 -0
  336. package/src/sandbox/execution-runner.ts +408 -0
  337. package/src/sandbox/worktree-manager.ts +287 -0
  338. package/src/selector/abstention-policy.ts +175 -0
  339. package/src/selector/candidate-extractor.ts +343 -0
  340. package/src/selector/live-locator-verifier.ts +139 -0
  341. package/src/selector/repair-candidate-ranker.ts +92 -0
  342. package/src/selector/selector-scorer.ts +344 -0
  343. package/src/trace/adapters/adapter-registry.ts +49 -0
  344. package/src/trace/adapters/trace-adapter.ts +28 -0
  345. package/src/trace/adapters/unknown-adapter.ts +50 -0
  346. package/src/trace/adapters/v10-adapter.ts +39 -0
  347. package/src/trace/adapters/v4-adapter.ts +31 -0
  348. package/src/trace/adapters/v8-adapter.ts +42 -0
  349. package/src/trace/adapters/v9-adapter.ts +39 -0
  350. package/src/trace/archive-reader.ts +246 -0
  351. package/src/trace/snapshot-resolver.ts +308 -0
  352. package/src/trace/trace-parser.ts +467 -0
  353. package/src/trace/version-detector.ts +81 -0
@@ -0,0 +1,43 @@
1
+ import { SafetyGate, SafetyGateInput, SafetyGateResult } from './safety.js';
2
+ import { QualityGate, CodeQualityGateInput, QualityGateResult } from './quality.js';
3
+ import { OracleGate, OracleGateInput, OracleGateResult } from './oracle.js';
4
+
5
+ export * from './safety.js';
6
+ export { QualityGate, type QualityGateResult, type CodeQualityGateInput };
7
+ export * from './oracle.js';
8
+
9
+ export interface GateInput {
10
+ safety: SafetyGateInput;
11
+ quality?: CodeQualityGateInput | undefined;
12
+ oracle?: OracleGateInput | undefined;
13
+ }
14
+
15
+ export interface GateEvaluationResult {
16
+ passed: boolean;
17
+ verdict: 'APPROVED' | 'REJECTED';
18
+ safety: SafetyGateResult;
19
+ quality: QualityGateResult;
20
+ oracle: OracleGateResult;
21
+ violations: string[];
22
+ }
23
+
24
+ export function runGate(input: GateInput): GateEvaluationResult {
25
+ const safety = SafetyGate.evaluate(input.safety);
26
+ const quality = QualityGate.evaluate(input.quality ?? {});
27
+ const oracle = OracleGate.evaluate(input.oracle ?? {});
28
+
29
+ const violations = [...safety.violations, ...quality.violations];
30
+ if (!oracle.passed) {
31
+ violations.push(`Oracle gate contradicted: ${oracle.reasons.join(', ')}`);
32
+ }
33
+
34
+ const passed = safety.passed && quality.passed && oracle.passed;
35
+ return {
36
+ passed,
37
+ verdict: passed ? 'APPROVED' : 'REJECTED',
38
+ safety,
39
+ quality,
40
+ oracle,
41
+ violations,
42
+ };
43
+ }
@@ -0,0 +1,69 @@
1
+ import { BusinessOracleStatus } from '../core/types/repair-evidence.js';
2
+ import { evaluateBuiltInBusinessOracles, BusinessIntent } from '../intelligence/business-intent.js';
3
+
4
+ export interface OracleGateInput {
5
+ intent?: BusinessIntent | undefined;
6
+ oracles?: Array<{ id: string; name: string; verified: boolean; required?: boolean }> | undefined;
7
+ originalSourceText?: string | undefined;
8
+ currentSourceText?: string | undefined;
9
+ originalAssertions?: string[] | undefined;
10
+ currentAssertions?: string[] | undefined;
11
+ observedStates?: Record<string, unknown> | undefined;
12
+ executionPassed?: boolean | undefined;
13
+ }
14
+
15
+ export interface OracleGateResult {
16
+ passed: boolean;
17
+ status: BusinessOracleStatus;
18
+ reasons: string[];
19
+ }
20
+
21
+ export class OracleGate {
22
+ public static evaluate(input: OracleGateInput): OracleGateResult {
23
+ // 1. Explicit business oracles
24
+ if (input.oracles && input.oracles.length > 0) {
25
+ const reasons: string[] = [];
26
+ let allPassed = true;
27
+ let hasUnavailable = false;
28
+
29
+ for (const o of input.oracles) {
30
+ if (!o.verified) {
31
+ if (o.required !== false) {
32
+ allPassed = false;
33
+ hasUnavailable = true;
34
+ reasons.push(`Required business oracle '${o.name}' is unverified.`);
35
+ }
36
+ }
37
+ }
38
+
39
+ return {
40
+ passed: allPassed,
41
+ status: allPassed ? 'verified' : (hasUnavailable ? 'unavailable' : 'contradicted'),
42
+ reasons,
43
+ };
44
+ }
45
+
46
+ if (!input.intent) {
47
+ // Missing business intent evidence is NEVER marked verified
48
+ return {
49
+ passed: true,
50
+ status: 'unavailable',
51
+ reasons: ['No explicit business intent provided for oracle evaluation.'],
52
+ };
53
+ }
54
+
55
+ const evaluation = evaluateBuiltInBusinessOracles({
56
+ intent: input.intent,
57
+ originalSourceText: input.originalSourceText ?? (input.originalAssertions ? input.originalAssertions.join('\n') : undefined),
58
+ currentSourceText: input.currentSourceText ?? (input.currentAssertions ? input.currentAssertions.join('\n') : undefined),
59
+ executionPassed: input.executionPassed ?? true,
60
+ });
61
+
62
+ const passed = evaluation.status !== 'contradicted';
63
+ return {
64
+ passed,
65
+ status: evaluation.status,
66
+ reasons: evaluation.results.map((r) => `${r.name}: ${r.status} (${r.reason})`),
67
+ };
68
+ }
69
+ }
@@ -0,0 +1,101 @@
1
+ import { NamingLinter, NamingLintReport } from '../authoring/naming/naming-linter.js';
2
+ import type { NamePlan } from '../authoring/naming/name-plan.js';
3
+
4
+ export interface CodeQualityGateInput {
5
+ symbols?: NamePlan | undefined;
6
+ files?: Array<{ relativePath: string; content: string }> | undefined;
7
+ diff?: string | undefined;
8
+ originalSource?: string | undefined;
9
+ patchedSource?: string | undefined;
10
+ locatorPolicy?: string | undefined;
11
+ }
12
+
13
+ export type QualityGateInput = CodeQualityGateInput;
14
+
15
+ export interface QualityGateResult {
16
+ passed: boolean;
17
+ namingReport?: NamingLintReport | undefined;
18
+ duplicateSelectors: string[];
19
+ locatorPolicyViolations: string[];
20
+ assertionStrengthPassed: boolean;
21
+ changedLines: number;
22
+ violations: string[];
23
+ }
24
+
25
+ export class QualityGate {
26
+ public static evaluate(input: QualityGateInput): QualityGateResult {
27
+ const violations: string[] = [];
28
+
29
+ // 1. Naming Conformance
30
+ let namingReport: NamingLintReport | undefined;
31
+ if (input.symbols && input.symbols.symbols.length > 0) {
32
+ namingReport = NamingLinter.lint(input.symbols);
33
+ if (!namingReport.passed) {
34
+ for (const v of namingReport.violations) {
35
+ violations.push(`Naming quality violation [${v.kind}]: ${v.message}`);
36
+ }
37
+ }
38
+ }
39
+
40
+ // 2. Duplicate Selectors Check
41
+ const duplicateSelectors: string[] = [];
42
+ if (input.files) {
43
+ for (const file of input.files) {
44
+ if (file.relativePath.endsWith('Page.ts')) {
45
+ const locatorMatches = [...file.content.matchAll(/this\.page\.(?:getByRole|getByText|getByTestId|locator)\s*\(([^)]+)\)/g)];
46
+ const seen = new Set<string>();
47
+ for (const match of locatorMatches) {
48
+ const locStr = match[1]!.trim();
49
+ if (seen.has(locStr)) {
50
+ duplicateSelectors.push(locStr);
51
+ violations.push(`Duplicate selector in '${file.relativePath}': ${locStr}`);
52
+ }
53
+ seen.add(locStr);
54
+ }
55
+ }
56
+ }
57
+ }
58
+
59
+ // 3. Locator Policy Conformance (e.g. Reject raw CSS when ARIA is required)
60
+ const locatorPolicyViolations: string[] = [];
61
+ if (input.files && input.locatorPolicy === 'prefer-role-over-css') {
62
+ for (const file of input.files) {
63
+ const rawCssMatches = [...file.content.matchAll(/this\.page\.locator\s*\(\s*['"]([#.]|div|button|input)[^'"]*['"]\s*\)/g)];
64
+ for (const match of rawCssMatches) {
65
+ locatorPolicyViolations.push(match[0]);
66
+ violations.push(`Locator policy violation in '${file.relativePath}': raw CSS used instead of role-based locator: ${match[0]}`);
67
+ }
68
+ }
69
+ }
70
+
71
+ // 4. Assertion Strength Non-Downgrade Check
72
+ let assertionStrengthPassed = true;
73
+ if (input.originalSource && input.patchedSource) {
74
+ const origHasExactText = /\b(toHaveText|toHaveValue|toContainText)\b/.test(input.originalSource);
75
+ const patchHasExactText = /\b(toHaveText|toHaveValue|toContainText)\b/.test(input.patchedSource);
76
+ const patchDowngradedToVisible = /\btoBeVisible\b/.test(input.patchedSource) && !/\btoBeVisible\b/.test(input.originalSource);
77
+
78
+ if (origHasExactText && !patchHasExactText && patchDowngradedToVisible) {
79
+ assertionStrengthPassed = false;
80
+ violations.push('Assertion strength regression: exact text assertion was downgraded to toBeVisible');
81
+ }
82
+ }
83
+
84
+ // 5. Diff Minimality (Count changed lines)
85
+ let changedLines = 0;
86
+ if (input.diff) {
87
+ const diffLines = input.diff.split(/\r?\n/);
88
+ changedLines = diffLines.filter((l) => (l.startsWith('+') || l.startsWith('-')) && !l.startsWith('+++') && !l.startsWith('---')).length;
89
+ }
90
+
91
+ return {
92
+ passed: violations.length === 0,
93
+ namingReport,
94
+ duplicateSelectors,
95
+ locatorPolicyViolations,
96
+ assertionStrengthPassed,
97
+ changedLines,
98
+ violations,
99
+ };
100
+ }
101
+ }
@@ -0,0 +1,94 @@
1
+ import { DiffAllowlistValidator } from '../repair/diff-allowlist.js';
2
+
3
+ export interface SafetyGateInput {
4
+ targetFilePath?: string | undefined;
5
+ originalSource?: string | undefined;
6
+ patchedSource?: string | undefined;
7
+ targetClassName?: string | undefined;
8
+ targetMemberName?: string | undefined;
9
+ diff?: string | undefined;
10
+ compilationPassed?: boolean | undefined;
11
+ testsPassed?: boolean | undefined;
12
+ isolatedExecution?: boolean | undefined;
13
+ assertionsPreserved?: boolean | undefined;
14
+ diffMinimal?: boolean | undefined;
15
+ executionPassed?: boolean | undefined;
16
+ executionProof?: unknown | undefined;
17
+ }
18
+
19
+ export interface SafetyGateResult {
20
+ passed: boolean;
21
+ assertionsIntact: boolean;
22
+ diffAllowlistPassed: boolean;
23
+ targetIdentityPreserved: boolean;
24
+ executionPassed: boolean;
25
+ isolatedExecutionPassed: boolean;
26
+ violations: string[];
27
+ }
28
+
29
+ export class SafetyGate {
30
+ public static evaluate(input: SafetyGateInput): SafetyGateResult {
31
+ const violations: string[] = [];
32
+
33
+ // 1. Assertion Integrity (Zero Assertion Weakening: V = A ^ T ^ F ^ I ^ D ^ E)
34
+ let assertionsIntact = true;
35
+ if (input.assertionsPreserved !== undefined) {
36
+ assertionsIntact = input.assertionsPreserved;
37
+ } else if (input.originalSource && input.patchedSource) {
38
+ const origAssertions = [...input.originalSource.matchAll(/expect(?:\.soft|\.poll)?\([^\n]+/g)].map((m) => m[0]!.trim());
39
+ const patchedAssertions = [...input.patchedSource.matchAll(/expect(?:\.soft|\.poll)?\([^\n]+/g)].map((m) => m[0]!.trim());
40
+ assertionsIntact = origAssertions.every((a) => patchedAssertions.includes(a));
41
+ }
42
+ if (!assertionsIntact) {
43
+ violations.push('Assertion integrity violation: assertions were weakened, mutated, or deleted.');
44
+ }
45
+
46
+ // 2. Diff Allowlist (Only target member modified)
47
+ let diffAllowlistPassed = true;
48
+ if (input.diffMinimal !== undefined) {
49
+ diffAllowlistPassed = input.diffMinimal;
50
+ } else if (input.originalSource && input.patchedSource && input.targetClassName && input.targetMemberName) {
51
+ const diffCheck = DiffAllowlistValidator.validate({
52
+ originalSource: input.originalSource,
53
+ patchedSource: input.patchedSource,
54
+ targetClassName: input.targetClassName,
55
+ targetMemberName: input.targetMemberName,
56
+ });
57
+ diffAllowlistPassed = diffCheck.isAllowed;
58
+ if (!diffCheck.isAllowed) {
59
+ violations.push(`Diff allowlist violation: ${diffCheck.reason ?? 'unauthorized AST modification'}`);
60
+ }
61
+ }
62
+ if (!diffAllowlistPassed && !violations.some((v) => v.includes('Diff allowlist'))) {
63
+ violations.push('Diff allowlist violation: modified statements outside authorized target member.');
64
+ }
65
+
66
+ // 3. Compilation Integrity
67
+ if (input.compilationPassed === false) {
68
+ violations.push('Compilation failure: candidate changes do not compile with TypeScript.');
69
+ }
70
+
71
+ // 4. Sandboxed Worktree Isolation
72
+ const isolatedExecutionPassed = input.isolatedExecution ?? true;
73
+ if (!isolatedExecutionPassed) {
74
+ violations.push('Sandbox violation: execution proof was not run in an isolated Git worktree.');
75
+ }
76
+
77
+ // 5. Real Playwright Execution
78
+ const executionPassed = (input.testsPassed ?? input.executionPassed) ?? true;
79
+ if (!executionPassed) {
80
+ violations.push('Execution gate failed: real Playwright test execution exited with non-zero code.');
81
+ }
82
+
83
+ const passed = violations.length === 0;
84
+ return {
85
+ passed,
86
+ assertionsIntact,
87
+ diffAllowlistPassed,
88
+ targetIdentityPreserved: true,
89
+ executionPassed,
90
+ isolatedExecutionPassed,
91
+ violations,
92
+ };
93
+ }
94
+ }