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.
- package/LICENSE +191 -0
- package/README.md +229 -3
- package/bin/pw-intel.js +37 -0
- package/dist/authoring/author.d.ts +83 -0
- package/dist/authoring/author.d.ts.map +1 -0
- package/dist/authoring/generation-contract.d.ts +90 -0
- package/dist/authoring/generation-contract.d.ts.map +1 -0
- package/dist/authoring/hybrid-author.d.ts +6 -0
- package/dist/authoring/hybrid-author.d.ts.map +1 -0
- package/dist/authoring/index.d.ts +7 -0
- package/dist/authoring/index.d.ts.map +1 -0
- package/dist/authoring/llm-author.d.ts +28 -0
- package/dist/authoring/llm-author.d.ts.map +1 -0
- package/dist/authoring/naming/index.d.ts +4 -0
- package/dist/authoring/naming/index.d.ts.map +1 -0
- package/dist/authoring/naming/name-plan.d.ts +45 -0
- package/dist/authoring/naming/name-plan.d.ts.map +1 -0
- package/dist/authoring/naming/name-planner.d.ts +25 -0
- package/dist/authoring/naming/name-planner.d.ts.map +1 -0
- package/dist/authoring/naming/naming-linter.d.ts +20 -0
- package/dist/authoring/naming/naming-linter.d.ts.map +1 -0
- package/dist/authoring/template-author.d.ts +6 -0
- package/dist/authoring/template-author.d.ts.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/collectors/collector-interface.d.ts +7 -0
- package/dist/collectors/collector-interface.d.ts.map +1 -0
- package/dist/collectors/environment-collector.d.ts +12 -0
- package/dist/collectors/environment-collector.d.ts.map +1 -0
- package/dist/collectors/error-collector.d.ts +18 -0
- package/dist/collectors/error-collector.d.ts.map +1 -0
- package/dist/collectors/git-diff-collector.d.ts +20 -0
- package/dist/collectors/git-diff-collector.d.ts.map +1 -0
- package/dist/collectors/live-browser-collector.d.ts +45 -0
- package/dist/collectors/live-browser-collector.d.ts.map +1 -0
- package/dist/collectors/network-collector.d.ts +28 -0
- package/dist/collectors/network-collector.d.ts.map +1 -0
- package/dist/collectors/static-ast-collector.d.ts +32 -0
- package/dist/collectors/static-ast-collector.d.ts.map +1 -0
- package/dist/collectors/trace-collector.d.ts +12 -0
- package/dist/collectors/trace-collector.d.ts.map +1 -0
- package/dist/config/project-config.d.ts +33 -0
- package/dist/config/project-config.d.ts.map +1 -0
- package/dist/core/errors/engine-errors.d.ts +34 -0
- package/dist/core/errors/engine-errors.d.ts.map +1 -0
- package/dist/core/types/diagnostic-context.d.ts +151 -0
- package/dist/core/types/diagnostic-context.d.ts.map +1 -0
- package/dist/core/types/repair-evidence.d.ts +56 -0
- package/dist/core/types/repair-evidence.d.ts.map +1 -0
- package/dist/core/version.d.ts +13 -0
- package/dist/core/version.d.ts.map +1 -0
- package/dist/diagnostics/diagnostic-contract.d.ts +52 -0
- package/dist/diagnostics/diagnostic-contract.d.ts.map +1 -0
- package/dist/diagnostics/diagnostic-report.d.ts +11 -0
- package/dist/diagnostics/diagnostic-report.d.ts.map +1 -0
- package/dist/diagnostics/evidence-correlator.d.ts +22 -0
- package/dist/diagnostics/evidence-correlator.d.ts.map +1 -0
- package/dist/diagnostics/external-failure-evidence.d.ts +18 -0
- package/dist/diagnostics/external-failure-evidence.d.ts.map +1 -0
- package/dist/diagnostics/failure-category.d.ts +4 -0
- package/dist/diagnostics/failure-category.d.ts.map +1 -0
- package/dist/diagnostics/failure-classifier.d.ts +58 -0
- package/dist/diagnostics/failure-classifier.d.ts.map +1 -0
- package/dist/evaluation/evaluation-scorecard.d.ts +72 -0
- package/dist/evaluation/evaluation-scorecard.d.ts.map +1 -0
- package/dist/evaluation/repository-inspector.d.ts +21 -0
- package/dist/evaluation/repository-inspector.d.ts.map +1 -0
- package/dist/evaluation/repository-runner.d.ts +24 -0
- package/dist/evaluation/repository-runner.d.ts.map +1 -0
- package/dist/evidence/evidence-model.d.ts +88 -0
- package/dist/evidence/evidence-model.d.ts.map +1 -0
- package/dist/evidence/evidence-normalizer.d.ts +19 -0
- package/dist/evidence/evidence-normalizer.d.ts.map +1 -0
- package/dist/evidence/evidence-redactor.d.ts +37 -0
- package/dist/evidence/evidence-redactor.d.ts.map +1 -0
- package/dist/framework/config-adapter.d.ts +28 -0
- package/dist/framework/config-adapter.d.ts.map +1 -0
- package/dist/gate/index.d.ts +21 -0
- package/dist/gate/index.d.ts.map +1 -0
- package/dist/gate/oracle.d.ts +26 -0
- package/dist/gate/oracle.d.ts.map +1 -0
- package/dist/gate/quality.d.ts +27 -0
- package/dist/gate/quality.d.ts.map +1 -0
- package/dist/gate/safety.d.ts +28 -0
- package/dist/gate/safety.d.ts.map +1 -0
- package/dist/generator/architecture-generator.d.ts +55 -0
- package/dist/generator/architecture-generator.d.ts.map +1 -0
- package/dist/generator/assertion-quality-gate.d.ts +18 -0
- package/dist/generator/assertion-quality-gate.d.ts.map +1 -0
- package/dist/generator/candidate-writer.d.ts +34 -0
- package/dist/generator/candidate-writer.d.ts.map +1 -0
- package/dist/generator/test-generator.d.ts +26 -0
- package/dist/generator/test-generator.d.ts.map +1 -0
- package/dist/governance/audit-log.d.ts +23 -0
- package/dist/governance/audit-log.d.ts.map +1 -0
- package/dist/governance/governance-policy.d.ts +24 -0
- package/dist/governance/governance-policy.d.ts.map +1 -0
- package/dist/governance/team-dashboard.d.ts +51 -0
- package/dist/governance/team-dashboard.d.ts.map +1 -0
- package/dist/governance/workflow-audit.d.ts +13 -0
- package/dist/governance/workflow-audit.d.ts.map +1 -0
- package/dist/index.d.ts +90 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20318 -0
- package/dist/integrations/ci-summary.d.ts +14 -0
- package/dist/integrations/ci-summary.d.ts.map +1 -0
- package/dist/integrations/playwright-report-adapter.d.ts +22 -0
- package/dist/integrations/playwright-report-adapter.d.ts.map +1 -0
- package/dist/integrations/quality-gate.d.ts +35 -0
- package/dist/integrations/quality-gate.d.ts.map +1 -0
- package/dist/integrations/sarif-report.d.ts +48 -0
- package/dist/integrations/sarif-report.d.ts.map +1 -0
- package/dist/intelligence/autonomous-repair-workflow.d.ts +31 -0
- package/dist/intelligence/autonomous-repair-workflow.d.ts.map +1 -0
- package/dist/intelligence/business-intent.d.ts +58 -0
- package/dist/intelligence/business-intent.d.ts.map +1 -0
- package/dist/intelligence/evidence-bundle.d.ts +364 -0
- package/dist/intelligence/evidence-bundle.d.ts.map +1 -0
- package/dist/intelligence/failure-clustering.d.ts +38 -0
- package/dist/intelligence/failure-clustering.d.ts.map +1 -0
- package/dist/intelligence/generation-agent.d.ts +120 -0
- package/dist/intelligence/generation-agent.d.ts.map +1 -0
- package/dist/intelligence/generation-verifier.d.ts +151 -0
- package/dist/intelligence/generation-verifier.d.ts.map +1 -0
- package/dist/intelligence/llm-proposal.d.ts +377 -0
- package/dist/intelligence/llm-proposal.d.ts.map +1 -0
- package/dist/intelligence/locator-disambiguation-engine.d.ts +38 -0
- package/dist/intelligence/locator-disambiguation-engine.d.ts.map +1 -0
- package/dist/intelligence/model-contract.d.ts +86 -0
- package/dist/intelligence/model-contract.d.ts.map +1 -0
- package/dist/intelligence/model-provider.d.ts +75 -0
- package/dist/intelligence/model-provider.d.ts.map +1 -0
- package/dist/intelligence/project-intelligence.d.ts +22 -0
- package/dist/intelligence/project-intelligence.d.ts.map +1 -0
- package/dist/intelligence/repair-agent.d.ts +46 -0
- package/dist/intelligence/repair-agent.d.ts.map +1 -0
- package/dist/intelligence/repository-profile.d.ts +131 -0
- package/dist/intelligence/repository-profile.d.ts.map +1 -0
- package/dist/intelligence/suite-intelligence.d.ts +59 -0
- package/dist/intelligence/suite-intelligence.d.ts.map +1 -0
- package/dist/intelligence/test-intelligence.d.ts +44 -0
- package/dist/intelligence/test-intelligence.d.ts.map +1 -0
- package/dist/intelligence/trace-proposal-workflow.d.ts +30 -0
- package/dist/intelligence/trace-proposal-workflow.d.ts.map +1 -0
- package/dist/intelligence/verified-llm-repair-workflow.d.ts +21 -0
- package/dist/intelligence/verified-llm-repair-workflow.d.ts.map +1 -0
- package/dist/intelligence/workflow-planner.d.ts +278 -0
- package/dist/intelligence/workflow-planner.d.ts.map +1 -0
- package/dist/mcp/server.d.ts +32 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/memory/stability-ledger.d.ts +46 -0
- package/dist/memory/stability-ledger.d.ts.map +1 -0
- package/dist/perception/app-model.d.ts +55 -0
- package/dist/perception/app-model.d.ts.map +1 -0
- package/dist/perception/crawler.d.ts +18 -0
- package/dist/perception/crawler.d.ts.map +1 -0
- package/dist/perception/index.d.ts +3 -0
- package/dist/perception/index.d.ts.map +1 -0
- package/dist/repair/approval-service.d.ts +139 -0
- package/dist/repair/approval-service.d.ts.map +1 -0
- package/dist/repair/assertion-hasher.d.ts +62 -0
- package/dist/repair/assertion-hasher.d.ts.map +1 -0
- package/dist/repair/ast-patcher.d.ts +36 -0
- package/dist/repair/ast-patcher.d.ts.map +1 -0
- package/dist/repair/browser-operation-executor.d.ts +27 -0
- package/dist/repair/browser-operation-executor.d.ts.map +1 -0
- package/dist/repair/diff-allowlist.d.ts +74 -0
- package/dist/repair/diff-allowlist.d.ts.map +1 -0
- package/dist/repair/intent-validator.d.ts +157 -0
- package/dist/repair/intent-validator.d.ts.map +1 -0
- package/dist/repair/repair-operations.d.ts +40 -0
- package/dist/repair/repair-operations.d.ts.map +1 -0
- package/dist/repair/repair-planner.d.ts +98 -0
- package/dist/repair/repair-planner.d.ts.map +1 -0
- package/dist/repair/repair-workflow.d.ts +42 -0
- package/dist/repair/repair-workflow.d.ts.map +1 -0
- package/dist/repair/safe-operation-compiler.d.ts +15 -0
- package/dist/repair/safe-operation-compiler.d.ts.map +1 -0
- package/dist/repair/source-mapper.d.ts +19 -0
- package/dist/repair/source-mapper.d.ts.map +1 -0
- package/dist/repair/statement-patcher.d.ts +75 -0
- package/dist/repair/statement-patcher.d.ts.map +1 -0
- package/dist/repair/verification-gates.d.ts +25 -0
- package/dist/repair/verification-gates.d.ts.map +1 -0
- package/dist/repair/workflow-plan.d.ts +35 -0
- package/dist/repair/workflow-plan.d.ts.map +1 -0
- package/dist/repair/workspace-promoter.d.ts +43 -0
- package/dist/repair/workspace-promoter.d.ts.map +1 -0
- package/dist/reproduce/diagnostic-rerunner.d.ts +40 -0
- package/dist/reproduce/diagnostic-rerunner.d.ts.map +1 -0
- package/dist/reproduce/direct-browser-investigator.d.ts +41 -0
- package/dist/reproduce/direct-browser-investigator.d.ts.map +1 -0
- package/dist/reproduce/interactive-workflow-runner.d.ts +43 -0
- package/dist/reproduce/interactive-workflow-runner.d.ts.map +1 -0
- package/dist/sandbox/dependency-strategy.d.ts +45 -0
- package/dist/sandbox/dependency-strategy.d.ts.map +1 -0
- package/dist/sandbox/execution-runner.d.ts +81 -0
- package/dist/sandbox/execution-runner.d.ts.map +1 -0
- package/dist/sandbox/worktree-manager.d.ts +51 -0
- package/dist/sandbox/worktree-manager.d.ts.map +1 -0
- package/dist/selector/abstention-policy.d.ts +34 -0
- package/dist/selector/abstention-policy.d.ts.map +1 -0
- package/dist/selector/candidate-extractor.d.ts +71 -0
- package/dist/selector/candidate-extractor.d.ts.map +1 -0
- package/dist/selector/live-locator-verifier.d.ts +28 -0
- package/dist/selector/live-locator-verifier.d.ts.map +1 -0
- package/dist/selector/repair-candidate-ranker.d.ts +10 -0
- package/dist/selector/repair-candidate-ranker.d.ts.map +1 -0
- package/dist/selector/selector-scorer.d.ts +43 -0
- package/dist/selector/selector-scorer.d.ts.map +1 -0
- package/dist/trace/adapters/adapter-registry.d.ts +18 -0
- package/dist/trace/adapters/adapter-registry.d.ts.map +1 -0
- package/dist/trace/adapters/trace-adapter.d.ts +21 -0
- package/dist/trace/adapters/trace-adapter.d.ts.map +1 -0
- package/dist/trace/adapters/unknown-adapter.d.ts +10 -0
- package/dist/trace/adapters/unknown-adapter.d.ts.map +1 -0
- package/dist/trace/adapters/v10-adapter.d.ts +10 -0
- package/dist/trace/adapters/v10-adapter.d.ts.map +1 -0
- package/dist/trace/adapters/v4-adapter.d.ts +11 -0
- package/dist/trace/adapters/v4-adapter.d.ts.map +1 -0
- package/dist/trace/adapters/v8-adapter.d.ts +10 -0
- package/dist/trace/adapters/v8-adapter.d.ts.map +1 -0
- package/dist/trace/adapters/v9-adapter.d.ts +10 -0
- package/dist/trace/adapters/v9-adapter.d.ts.map +1 -0
- package/dist/trace/archive-reader.d.ts +44 -0
- package/dist/trace/archive-reader.d.ts.map +1 -0
- package/dist/trace/snapshot-resolver.d.ts +55 -0
- package/dist/trace/snapshot-resolver.d.ts.map +1 -0
- package/dist/trace/trace-parser.d.ts +50 -0
- package/dist/trace/trace-parser.d.ts.map +1 -0
- package/dist/trace/version-detector.d.ts +20 -0
- package/dist/trace/version-detector.d.ts.map +1 -0
- package/package.json +76 -6
- package/skills/README.md +20 -0
- package/skills/pie-failure-investigation/SKILL.md +16 -0
- package/skills/pie-quality-engineer/SKILL.md +66 -0
- package/skills/pie-release-readiness/SKILL.md +22 -0
- package/skills/pie-repair-review/SKILL.md +21 -0
- package/skills/pie-trace-to-repair/SKILL.md +35 -0
- package/src/authoring/author.ts +81 -0
- package/src/authoring/generation-contract.ts +283 -0
- package/src/authoring/hybrid-author.ts +115 -0
- package/src/authoring/index.ts +7 -0
- package/src/authoring/llm-author.ts +282 -0
- package/src/authoring/naming/index.ts +4 -0
- package/src/authoring/naming/name-plan.ts +28 -0
- package/src/authoring/naming/name-planner.ts +339 -0
- package/src/authoring/naming/naming-linter.ts +292 -0
- package/src/authoring/template-author.ts +39 -0
- package/src/cli/index.ts +1172 -0
- package/src/collectors/collector-interface.ts +8 -0
- package/src/collectors/environment-collector.ts +103 -0
- package/src/collectors/error-collector.ts +177 -0
- package/src/collectors/git-diff-collector.ts +190 -0
- package/src/collectors/live-browser-collector.ts +412 -0
- package/src/collectors/network-collector.ts +90 -0
- package/src/collectors/static-ast-collector.ts +226 -0
- package/src/collectors/trace-collector.ts +66 -0
- package/src/config/project-config.ts +114 -0
- package/src/core/errors/engine-errors.ts +90 -0
- package/src/core/types/diagnostic-context.ts +94 -0
- package/src/core/types/repair-evidence.ts +45 -0
- package/src/core/version.ts +25 -0
- package/src/diagnostics/diagnostic-contract.ts +79 -0
- package/src/diagnostics/diagnostic-report.ts +204 -0
- package/src/diagnostics/evidence-correlator.ts +117 -0
- package/src/diagnostics/external-failure-evidence.ts +72 -0
- package/src/diagnostics/failure-category.ts +40 -0
- package/src/diagnostics/failure-classifier.ts +701 -0
- package/src/evaluation/evaluation-scorecard.ts +198 -0
- package/src/evaluation/repository-inspector.ts +143 -0
- package/src/evaluation/repository-runner.ts +197 -0
- package/src/evidence/evidence-model.ts +76 -0
- package/src/evidence/evidence-normalizer.ts +322 -0
- package/src/evidence/evidence-redactor.ts +218 -0
- package/src/framework/config-adapter.ts +131 -0
- package/src/gate/index.ts +43 -0
- package/src/gate/oracle.ts +69 -0
- package/src/gate/quality.ts +101 -0
- package/src/gate/safety.ts +94 -0
- package/src/generator/architecture-generator.ts +582 -0
- package/src/generator/assertion-quality-gate.ts +88 -0
- package/src/generator/candidate-writer.ts +288 -0
- package/src/generator/test-generator.ts +52 -0
- package/src/governance/audit-log.ts +115 -0
- package/src/governance/governance-policy.ts +72 -0
- package/src/governance/team-dashboard.ts +189 -0
- package/src/governance/workflow-audit.ts +72 -0
- package/src/index.ts +107 -0
- package/src/integrations/ci-summary.ts +37 -0
- package/src/integrations/playwright-report-adapter.ts +173 -0
- package/src/integrations/quality-gate.ts +95 -0
- package/src/integrations/sarif-report.ts +110 -0
- package/src/intelligence/autonomous-repair-workflow.ts +139 -0
- package/src/intelligence/business-intent.ts +163 -0
- package/src/intelligence/evidence-bundle.ts +300 -0
- package/src/intelligence/failure-clustering.ts +134 -0
- package/src/intelligence/generation-agent.ts +561 -0
- package/src/intelligence/generation-verifier.ts +1115 -0
- package/src/intelligence/llm-proposal.ts +519 -0
- package/src/intelligence/locator-disambiguation-engine.ts +331 -0
- package/src/intelligence/model-contract.ts +205 -0
- package/src/intelligence/model-provider.ts +348 -0
- package/src/intelligence/project-intelligence.ts +140 -0
- package/src/intelligence/repair-agent.ts +297 -0
- package/src/intelligence/repository-profile.ts +796 -0
- package/src/intelligence/suite-intelligence.ts +305 -0
- package/src/intelligence/test-intelligence.ts +136 -0
- package/src/intelligence/trace-proposal-workflow.ts +318 -0
- package/src/intelligence/verified-llm-repair-workflow.ts +48 -0
- package/src/intelligence/workflow-planner.ts +966 -0
- package/src/mcp/server.ts +970 -0
- package/src/memory/stability-ledger.ts +243 -0
- package/src/perception/app-model.ts +32 -0
- package/src/perception/crawler.ts +263 -0
- package/src/perception/index.ts +3 -0
- package/src/repair/approval-service.ts +541 -0
- package/src/repair/assertion-hasher.ts +386 -0
- package/src/repair/ast-patcher.ts +223 -0
- package/src/repair/browser-operation-executor.ts +263 -0
- package/src/repair/diff-allowlist.ts +612 -0
- package/src/repair/intent-validator.ts +761 -0
- package/src/repair/repair-operations.ts +65 -0
- package/src/repair/repair-planner.ts +467 -0
- package/src/repair/repair-workflow.ts +241 -0
- package/src/repair/safe-operation-compiler.ts +68 -0
- package/src/repair/source-mapper.ts +156 -0
- package/src/repair/statement-patcher.ts +544 -0
- package/src/repair/verification-gates.ts +46 -0
- package/src/repair/workflow-plan.ts +59 -0
- package/src/repair/workspace-promoter.ts +313 -0
- package/src/reproduce/diagnostic-rerunner.ts +287 -0
- package/src/reproduce/direct-browser-investigator.ts +208 -0
- package/src/reproduce/interactive-workflow-runner.ts +828 -0
- package/src/sandbox/dependency-strategy.ts +215 -0
- package/src/sandbox/execution-runner.ts +408 -0
- package/src/sandbox/worktree-manager.ts +287 -0
- package/src/selector/abstention-policy.ts +175 -0
- package/src/selector/candidate-extractor.ts +343 -0
- package/src/selector/live-locator-verifier.ts +139 -0
- package/src/selector/repair-candidate-ranker.ts +92 -0
- package/src/selector/selector-scorer.ts +344 -0
- package/src/trace/adapters/adapter-registry.ts +49 -0
- package/src/trace/adapters/trace-adapter.ts +28 -0
- package/src/trace/adapters/unknown-adapter.ts +50 -0
- package/src/trace/adapters/v10-adapter.ts +39 -0
- package/src/trace/adapters/v4-adapter.ts +31 -0
- package/src/trace/adapters/v8-adapter.ts +42 -0
- package/src/trace/adapters/v9-adapter.ts +39 -0
- package/src/trace/archive-reader.ts +246 -0
- package/src/trace/snapshot-resolver.ts +308 -0
- package/src/trace/trace-parser.ts +467 -0
- 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
|
+
}
|