@jterrats/open-orchestra 1.0.8 → 1.0.10
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/AGENTS.md +15 -2
- package/CLAUDE.md +16 -2
- package/dist/acceptance-criteria-quality.d.ts +12 -0
- package/dist/acceptance-criteria-quality.js +137 -0
- package/dist/acceptance-criteria-quality.js.map +1 -0
- package/dist/architecture-debt-inventory.d.ts +31 -0
- package/dist/architecture-debt-inventory.js +200 -0
- package/dist/architecture-debt-inventory.js.map +1 -0
- package/dist/architecture-debt-report.d.ts +2 -0
- package/dist/architecture-debt-report.js +28 -0
- package/dist/architecture-debt-report.js.map +1 -0
- package/dist/autonomous-phase-lifecycle.d.ts +5 -1
- package/dist/autonomous-phase-lifecycle.js +87 -17
- package/dist/autonomous-phase-lifecycle.js.map +1 -1
- package/dist/autonomous-run-store.js +2 -2
- package/dist/autonomous-run-store.js.map +1 -1
- package/dist/benchmark.js +2 -1
- package/dist/benchmark.js.map +1 -1
- package/dist/clarification.js +2 -1
- package/dist/clarification.js.map +1 -1
- package/dist/cli-payloads.d.ts +4 -0
- package/dist/cli-payloads.js +24 -0
- package/dist/cli-payloads.js.map +1 -0
- package/dist/collaboration-flows.d.ts +1 -2
- package/dist/command-manifest.js +18 -5
- package/dist/command-manifest.js.map +1 -1
- package/dist/command-routes-integrations.js +2 -1
- package/dist/command-routes-integrations.js.map +1 -1
- package/dist/command-routes.js +3 -1
- package/dist/command-routes.js.map +1 -1
- package/dist/command-utils.d.ts +1 -2
- package/dist/command-utils.js.map +1 -1
- package/dist/commands.d.ts +2 -2
- package/dist/commands.js +17 -4
- package/dist/commands.js.map +1 -1
- package/dist/constants.js +1 -0
- package/dist/constants.js.map +1 -1
- package/dist/cursor-canvas.js +21 -1
- package/dist/cursor-canvas.js.map +1 -1
- package/dist/cursor-mdc.d.ts +10 -0
- package/dist/cursor-mdc.js +37 -0
- package/dist/cursor-mdc.js.map +1 -0
- package/dist/fs-utils.js +2 -1
- package/dist/fs-utils.js.map +1 -1
- package/dist/generated-guidance-health.d.ts +33 -0
- package/dist/generated-guidance-health.js +125 -0
- package/dist/generated-guidance-health.js.map +1 -0
- package/dist/github.js +22 -7
- package/dist/github.js.map +1 -1
- package/dist/health-checks.js +2 -51
- package/dist/health-checks.js.map +1 -1
- package/dist/id-utils.d.ts +3 -0
- package/dist/id-utils.js +11 -0
- package/dist/id-utils.js.map +1 -0
- package/dist/instruction-blocks.js +20 -5
- package/dist/instruction-blocks.js.map +1 -1
- package/dist/mcp-oauth-proxy.js +5 -5
- package/dist/mcp-oauth-proxy.js.map +1 -1
- package/dist/memory-status.js +31 -5
- package/dist/memory-status.js.map +1 -1
- package/dist/memory.js +31 -7
- package/dist/memory.js.map +1 -1
- package/dist/metrics-commands.js +69 -17
- package/dist/metrics-commands.js.map +1 -1
- package/dist/notifications.js +12 -2
- package/dist/notifications.js.map +1 -1
- package/dist/phase-deterministic-output.d.ts +4 -0
- package/dist/phase-deterministic-output.js +62 -0
- package/dist/phase-deterministic-output.js.map +1 -0
- package/dist/phase-executor.js +9 -172
- package/dist/phase-executor.js.map +1 -1
- package/dist/phase-playbooks.js +17 -0
- package/dist/phase-playbooks.js.map +1 -1
- package/dist/provider-utils.js +11 -1
- package/dist/provider-utils.js.map +1 -1
- package/dist/qa-e2e-artifacts.d.ts +7 -0
- package/dist/qa-e2e-artifacts.js +225 -0
- package/dist/qa-e2e-artifacts.js.map +1 -0
- package/dist/quality-contracts.d.ts +83 -0
- package/dist/quality-contracts.js +463 -0
- package/dist/quality-contracts.js.map +1 -0
- package/dist/refresh-generated.js +81 -28
- package/dist/refresh-generated.js.map +1 -1
- package/dist/runtime-bootstrap.js +26 -2
- package/dist/runtime-bootstrap.js.map +1 -1
- package/dist/runtime-commands.d.ts +2 -0
- package/dist/runtime-commands.js +190 -1
- package/dist/runtime-commands.js.map +1 -1
- package/dist/runtime-context-manifest.d.ts +27 -0
- package/dist/runtime-context-manifest.js +151 -0
- package/dist/runtime-context-manifest.js.map +1 -0
- package/dist/runtime-execution-renderer.d.ts +3 -1
- package/dist/runtime-execution-renderer.js +7 -1
- package/dist/runtime-execution-renderer.js.map +1 -1
- package/dist/runtime-execution.d.ts +2 -1
- package/dist/runtime-execution.js +191 -2
- package/dist/runtime-execution.js.map +1 -1
- package/dist/runtime-guardrails.js +5 -1
- package/dist/runtime-guardrails.js.map +1 -1
- package/dist/runtime-lifecycle-watch-adapters.d.ts +4 -0
- package/dist/runtime-lifecycle-watch-adapters.js +87 -0
- package/dist/runtime-lifecycle-watch-adapters.js.map +1 -0
- package/dist/runtime-lifecycle-watch.d.ts +85 -0
- package/dist/runtime-lifecycle-watch.js +312 -0
- package/dist/runtime-lifecycle-watch.js.map +1 -0
- package/dist/runtime-parent-action-dispatch.d.ts +30 -0
- package/dist/runtime-parent-action-dispatch.js +114 -0
- package/dist/runtime-parent-action-dispatch.js.map +1 -0
- package/dist/runtime-parent-action-eligibility.d.ts +12 -0
- package/dist/runtime-parent-action-eligibility.js +131 -0
- package/dist/runtime-parent-action-eligibility.js.map +1 -0
- package/dist/runtime-parent-actions.d.ts +7 -2
- package/dist/runtime-parent-actions.js +145 -1
- package/dist/runtime-parent-actions.js.map +1 -1
- package/dist/runtime-spawn-bridge.js +21 -1
- package/dist/runtime-spawn-bridge.js.map +1 -1
- package/dist/skills-validation.js +1 -2
- package/dist/skills-validation.js.map +1 -1
- package/dist/sonar-commands.d.ts +1 -0
- package/dist/sonar-commands.js +36 -0
- package/dist/sonar-commands.js.map +1 -1
- package/dist/sonar-insights.d.ts +13 -0
- package/dist/sonar-insights.js +32 -53
- package/dist/sonar-insights.js.map +1 -1
- package/dist/sonar-payload-normalizers.d.ts +16 -0
- package/dist/sonar-payload-normalizers.js +67 -0
- package/dist/sonar-payload-normalizers.js.map +1 -0
- package/dist/sonar-preflight.d.ts +26 -0
- package/dist/sonar-preflight.js +111 -0
- package/dist/sonar-preflight.js.map +1 -0
- package/dist/sonar-redaction.d.ts +1 -0
- package/dist/sonar-redaction.js +13 -0
- package/dist/sonar-redaction.js.map +1 -0
- package/dist/subagent-protocol.js.map +1 -1
- package/dist/task-graph-commands.js +8 -1
- package/dist/task-graph-commands.js.map +1 -1
- package/dist/telemetry-redaction.js +31 -2
- package/dist/telemetry-redaction.js.map +1 -1
- package/dist/types/model-config.d.ts +6 -0
- package/dist/types/runtime.d.ts +49 -2
- package/dist/types/tasks.d.ts +12 -0
- package/dist/types.d.ts +1 -1
- package/dist/types.js.map +1 -1
- package/dist/web-api.js +8 -0
- package/dist/web-api.js.map +1 -1
- package/dist/web-artifacts.js +8 -3
- package/dist/web-artifacts.js.map +1 -1
- package/dist/web-console/assets/index-DA8Fs4r7.js +11 -0
- package/dist/web-console/index.html +1 -1
- package/dist/workflow-background-subagents.js +8 -4
- package/dist/workflow-background-subagents.js.map +1 -1
- package/dist/workflow-handoff-assessment.d.ts +3 -0
- package/dist/workflow-handoff-assessment.js +246 -0
- package/dist/workflow-handoff-assessment.js.map +1 -0
- package/dist/workflow-handoff-contract.d.ts +32 -0
- package/dist/workflow-handoff-contract.js +123 -0
- package/dist/workflow-handoff-contract.js.map +1 -0
- package/dist/workflow-phase-transition.d.ts +16 -0
- package/dist/workflow-phase-transition.js +76 -0
- package/dist/workflow-phase-transition.js.map +1 -0
- package/dist/workflow-run-commands.js +79 -18
- package/dist/workflow-run-commands.js.map +1 -1
- package/dist/workflow-services.js +62 -28
- package/dist/workflow-services.js.map +1 -1
- package/dist/workspace-init-artifacts.d.ts +9 -0
- package/dist/workspace-init-artifacts.js +28 -0
- package/dist/workspace-init-artifacts.js.map +1 -1
- package/dist/workspace-runtime-bootstrap.d.ts +3 -1
- package/dist/workspace-runtime-bootstrap.js +8 -3
- package/dist/workspace-runtime-bootstrap.js.map +1 -1
- package/dist/workspace.d.ts +5 -2
- package/dist/workspace.js +46 -16
- package/dist/workspace.js.map +1 -1
- package/docs/adoption-guide.md +12 -0
- package/docs/architecture-debt-inventory.md +25 -0
- package/docs/autonomous-workflow.md +10 -2
- package/docs/claude-adapter-qa-matrix.md +56 -0
- package/docs/e2e-test-batteries.md +34 -23
- package/docs/orchestra-mvp.md +21 -0
- package/docs/release-test-matrix.md +22 -0
- package/docs/runtime-adapters.md +155 -15
- package/docs/sonar-quality-gates.md +240 -11
- package/package.json +5 -1
- package/rules/delivery-quality-gates.mdc +8 -0
- package/rules/devops-tooling.mdc +1 -0
- package/rules/security-guardrails.mdc +3 -0
- package/rules/testing-discipline.mdc +9 -0
- package/dist/web-console/assets/index-CgSKcay8.js +0 -11
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
import { chmod } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { ensureDir, resolveWorkflowPath } from "./fs-utils.js";
|
|
4
|
+
import { readPackageScriptNames } from "./package-info.js";
|
|
5
|
+
import { markdownListOrNone, playwrightScenarioMarkdown, } from "./workflow-markdown.js";
|
|
6
|
+
import { assessAcceptanceCriteriaQuality } from "./acceptance-criteria-quality.js";
|
|
7
|
+
import { appendEvent, writeArtifact } from "./workspace.js";
|
|
8
|
+
import { getTaskContext } from "./workflow-services.js";
|
|
9
|
+
import { generatePlaywrightTestPlan } from "./workflow-summary-service.js";
|
|
10
|
+
export async function generateQaE2eArtifactsIfApplicable({ root, run, phase, output, }) {
|
|
11
|
+
if (phase.phase !== "qa") {
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
const context = await getTaskContext(run.taskId, root);
|
|
15
|
+
if (!needsExecutableE2eArtifacts(context)) {
|
|
16
|
+
await recordSkippedQaE2e({
|
|
17
|
+
root,
|
|
18
|
+
run,
|
|
19
|
+
phase,
|
|
20
|
+
output,
|
|
21
|
+
reason: "Task scope does not reference browser, CLI, shell, workflow, runtime, UI, site, or E2E validation.",
|
|
22
|
+
});
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
const selection = await e2eSelectionForTask(root, context.task);
|
|
26
|
+
if (selection.style === "skipped") {
|
|
27
|
+
await recordSkippedQaE2e({
|
|
28
|
+
root,
|
|
29
|
+
run,
|
|
30
|
+
phase,
|
|
31
|
+
output,
|
|
32
|
+
reason: selection.reason,
|
|
33
|
+
});
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
const directory = path.join("runs", run.taskId, phase.phase);
|
|
37
|
+
await ensureDir(resolveWorkflowPath(root, directory));
|
|
38
|
+
const plan = await generatePlaywrightTestPlan(run.taskId, root);
|
|
39
|
+
const acceptanceQuality = assessAcceptanceCriteriaQuality(context.task);
|
|
40
|
+
const planArtifact = await writeArtifact(root, directory, `${run.id}-${phase.phase}-e2e-plan.md`, renderGeneratedE2ePlan(plan, selection, acceptanceQuality));
|
|
41
|
+
const runnerArtifact = await writeArtifact(root, directory, `${run.id}-${phase.phase}-e2e.sh`, renderGeneratedE2eRunner(selection.commands));
|
|
42
|
+
await chmod(path.join(root, runnerArtifact), 0o755);
|
|
43
|
+
output.evidence.push(`Generated ${selection.style} E2E plan: ${planArtifact}`, `Generated executable E2E runner: ${runnerArtifact}`);
|
|
44
|
+
await appendEvent(root, {
|
|
45
|
+
type: "EVIDENCE_ADDED",
|
|
46
|
+
taskId: run.taskId,
|
|
47
|
+
actor: phase.role,
|
|
48
|
+
summary: "QA generated executable E2E artifacts",
|
|
49
|
+
artifacts: [planArtifact, runnerArtifact],
|
|
50
|
+
metadata: {
|
|
51
|
+
runId: run.id,
|
|
52
|
+
phase: phase.phase,
|
|
53
|
+
style: selection.style,
|
|
54
|
+
commands: selection.commands,
|
|
55
|
+
reason: selection.reason,
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
async function recordSkippedQaE2e({ root, run, phase, output, reason, }) {
|
|
60
|
+
output.evidence.push(`E2E generation skipped: ${reason}`);
|
|
61
|
+
await appendEvent(root, {
|
|
62
|
+
type: "EVIDENCE_ADDED",
|
|
63
|
+
taskId: run.taskId,
|
|
64
|
+
actor: phase.role,
|
|
65
|
+
summary: "QA skipped E2E artifact generation",
|
|
66
|
+
artifacts: [],
|
|
67
|
+
metadata: {
|
|
68
|
+
runId: run.id,
|
|
69
|
+
phase: phase.phase,
|
|
70
|
+
style: "skipped",
|
|
71
|
+
reason,
|
|
72
|
+
},
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
function needsExecutableE2eArtifacts(context) {
|
|
76
|
+
return /\b(e2e|end-to-end|playwright|browser|web|ui|site|cli|workflow|handoff|gate|phase|runtime|automata|transition|resume)\b/.test(taskText(context.task));
|
|
77
|
+
}
|
|
78
|
+
async function e2eSelectionForTask(root, task) {
|
|
79
|
+
const scripts = await readPackageScriptNames(root);
|
|
80
|
+
const text = taskText(task);
|
|
81
|
+
const commands = [];
|
|
82
|
+
const styles = new Set();
|
|
83
|
+
const workflowRisk = /\b(workflow|handoff|gate|phase|runtime|automata|transition|resume|failback|queue|subagent)\b/.test(text);
|
|
84
|
+
if (workflowRisk) {
|
|
85
|
+
for (const script of ["test:e2e:runtime", "test:e2e:init", "test:cli"]) {
|
|
86
|
+
if (scripts.has(script)) {
|
|
87
|
+
commands.push(`npm run ${script}`);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
if (commands.length === 0) {
|
|
91
|
+
commands.push("node --test test/autonomous-workflow-cli.test.js");
|
|
92
|
+
}
|
|
93
|
+
styles.add("workflow");
|
|
94
|
+
}
|
|
95
|
+
if (scripts.has("test:e2e:init") &&
|
|
96
|
+
/\b(cli|init|onboarding)\b/.test(text) &&
|
|
97
|
+
!commands.includes("npm run test:e2e:init")) {
|
|
98
|
+
commands.push("npm run test:e2e:init");
|
|
99
|
+
styles.add("cli");
|
|
100
|
+
}
|
|
101
|
+
if (scripts.has("test:cli") &&
|
|
102
|
+
/\b(cli|command|terminal)\b/.test(text) &&
|
|
103
|
+
!commands.includes("npm run test:cli")) {
|
|
104
|
+
commands.push("npm run test:cli");
|
|
105
|
+
styles.add("cli");
|
|
106
|
+
}
|
|
107
|
+
if (scripts.has("test:e2e") &&
|
|
108
|
+
/\b(playwright|browser|web|ui|site)\b/.test(text)) {
|
|
109
|
+
commands.push("npm run test:e2e");
|
|
110
|
+
styles.add("browser");
|
|
111
|
+
}
|
|
112
|
+
if (scripts.has("test:shell") &&
|
|
113
|
+
/\b(shell|sh|bash|script|deployment|deploy)\b/.test(text)) {
|
|
114
|
+
commands.push("npm run test:shell");
|
|
115
|
+
styles.add("shell");
|
|
116
|
+
}
|
|
117
|
+
if (scripts.has("test:smoke") &&
|
|
118
|
+
/\b(shell|sh|bash|script|deployment|deploy|smoke)\b/.test(text)) {
|
|
119
|
+
commands.push("npm run test:smoke");
|
|
120
|
+
styles.add("shell");
|
|
121
|
+
}
|
|
122
|
+
const uniqueCommands = [...new Set(commands)];
|
|
123
|
+
if (uniqueCommands.length === 0) {
|
|
124
|
+
return {
|
|
125
|
+
style: "skipped",
|
|
126
|
+
commands: [],
|
|
127
|
+
reason: "Task appears to need E2E validation, but no matching E2E, CLI, shell, smoke, or workflow test command was found.",
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
return {
|
|
131
|
+
style: styles.size === 1 ? [...styles][0] : "mixed",
|
|
132
|
+
commands: uniqueCommands,
|
|
133
|
+
reason: workflowRisk
|
|
134
|
+
? "Matched workflow risk signals; QA must exercise isolated /tmp workflow fixtures, transitions, blocked states, return loops, resume, and generated artifacts."
|
|
135
|
+
: "Matched QA E2E scripts from task scope and package scripts.",
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
function renderGeneratedE2ePlan(plan, selection, acceptanceQuality) {
|
|
139
|
+
return [
|
|
140
|
+
`# Generated E2E Plan: ${plan.taskId}`,
|
|
141
|
+
"",
|
|
142
|
+
`- Title: ${plan.title}`,
|
|
143
|
+
`- Target user: ${plan.targetUser}`,
|
|
144
|
+
`- Style: ${selection.style}`,
|
|
145
|
+
`- Reason: ${selection.reason}`,
|
|
146
|
+
`- Executable runner: ./${plan.taskId}-qa-e2e.sh`,
|
|
147
|
+
"",
|
|
148
|
+
"## Commands",
|
|
149
|
+
...selection.commands.map((command) => `- ${command}`),
|
|
150
|
+
"",
|
|
151
|
+
"## Scenarios",
|
|
152
|
+
...scenarioMarkdown(plan, selection, acceptanceQuality),
|
|
153
|
+
...acceptanceCriteriaIssueMarkdown(acceptanceQuality),
|
|
154
|
+
"## QA Standard Checks",
|
|
155
|
+
...qaStandardChecks(selection),
|
|
156
|
+
"",
|
|
157
|
+
"## Fixtures",
|
|
158
|
+
...markdownListOrNone(plan.fixtures),
|
|
159
|
+
"",
|
|
160
|
+
"## Notes",
|
|
161
|
+
...markdownListOrNone(plan.notes),
|
|
162
|
+
"",
|
|
163
|
+
].join("\n");
|
|
164
|
+
}
|
|
165
|
+
function scenarioMarkdown(plan, selection, acceptanceQuality) {
|
|
166
|
+
const scenarios = plan.scenarios.filter((scenario) => acceptanceQuality.valid.includes(scenario.source));
|
|
167
|
+
if (selection.style === "workflow") {
|
|
168
|
+
return workflowScenarioMarkdown({ ...plan, scenarios });
|
|
169
|
+
}
|
|
170
|
+
return playwrightScenarioMarkdown(scenarios);
|
|
171
|
+
}
|
|
172
|
+
function workflowScenarioMarkdown(plan) {
|
|
173
|
+
return plan.scenarios.flatMap((scenario, index) => [
|
|
174
|
+
`### Scenario ${index + 1}: ${scenario.source}`,
|
|
175
|
+
`- Source: ${scenario.source}`,
|
|
176
|
+
"- Fixture: isolated temporary Orchestra project under `/tmp` with task-specific acceptance criteria, paths, roles, workflow run state, expected handoffs, and generated artifacts.",
|
|
177
|
+
"- Assertions: verify command exit code, workflow run state, phase transitions, blocked/return/resume behavior when applicable, handoff contents, evidence artifacts, stdout/stderr, and final release readiness state.",
|
|
178
|
+
"- Evidence: command transcript, generated handoff files, workflow run JSONL records, evidence records, and defect report when expected behavior is not proven.",
|
|
179
|
+
"",
|
|
180
|
+
]);
|
|
181
|
+
}
|
|
182
|
+
function qaStandardChecks(selection) {
|
|
183
|
+
const checks = [
|
|
184
|
+
"- Build an AC-to-evidence matrix that maps every acceptance criterion to command/artifact, expected result, actual result, and pass/fail/deferred status.",
|
|
185
|
+
"- Use isolated deterministic fixtures; use the configured test environment when provided, otherwise default local disposable project fixtures to `/tmp`.",
|
|
186
|
+
"- Assert resulting product state, not only that a command or browser action executed.",
|
|
187
|
+
"- Block release when evidence is missing, too generic, or not tied to acceptance criteria.",
|
|
188
|
+
];
|
|
189
|
+
if (selection.style === "workflow" || selection.style === "mixed") {
|
|
190
|
+
checks.push("- For workflow/state-machine behavior, cover allowed transition, blocked transition, return loop, resume, and final handoff/release artifact content.");
|
|
191
|
+
}
|
|
192
|
+
if (selection.style === "browser" || selection.style === "mixed") {
|
|
193
|
+
checks.push("- For browser/UI behavior, capture responsive evidence and annotate visual defects with screenshots, traces, or video.");
|
|
194
|
+
}
|
|
195
|
+
return checks;
|
|
196
|
+
}
|
|
197
|
+
function acceptanceCriteriaIssueMarkdown(quality) {
|
|
198
|
+
if (quality.issues.length === 0)
|
|
199
|
+
return [];
|
|
200
|
+
return [
|
|
201
|
+
"## Acceptance Criteria Quality Issues",
|
|
202
|
+
...quality.issues.map((issue) => `- AC${issue.index + 1}: "${issue.criterion}" is not executable evidence (${issue.reason}). QA must block release until PO/BA rewrites it as an observable outcome.`),
|
|
203
|
+
"",
|
|
204
|
+
];
|
|
205
|
+
}
|
|
206
|
+
function renderGeneratedE2eRunner(commands) {
|
|
207
|
+
return [
|
|
208
|
+
"#!/usr/bin/env sh",
|
|
209
|
+
"set -eu",
|
|
210
|
+
"",
|
|
211
|
+
...commands.flatMap((command) => [`echo "+ ${command}"`, command, ""]),
|
|
212
|
+
].join("\n");
|
|
213
|
+
}
|
|
214
|
+
function taskText(task) {
|
|
215
|
+
return [
|
|
216
|
+
task.title,
|
|
217
|
+
task.goal,
|
|
218
|
+
...(task.acceptanceCriteria ?? []),
|
|
219
|
+
...(task.risks ?? []),
|
|
220
|
+
...(task.paths ?? []),
|
|
221
|
+
]
|
|
222
|
+
.join(" ")
|
|
223
|
+
.toLowerCase();
|
|
224
|
+
}
|
|
225
|
+
//# sourceMappingURL=qa-e2e-artifacts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qa-e2e-artifacts.js","sourceRoot":"","sources":["../src/qa-e2e-artifacts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EACL,kBAAkB,EAClB,0BAA0B,GAC3B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,+BAA+B,EAAE,MAAM,kCAAkC,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAqB3E,MAAM,CAAC,KAAK,UAAU,kCAAkC,CAAC,EACvD,IAAI,EACJ,GAAG,EACH,KAAK,EACL,MAAM,GAMP;IACC,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;QACzB,OAAO;IACT,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACvD,IAAI,CAAC,2BAA2B,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1C,MAAM,kBAAkB,CAAC;YACvB,IAAI;YACJ,GAAG;YACH,KAAK;YACL,MAAM;YACN,MAAM,EACJ,oGAAoG;SACvG,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IACD,MAAM,SAAS,GAAG,MAAM,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAChE,IAAI,SAAS,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAClC,MAAM,kBAAkB,CAAC;YACvB,IAAI;YACJ,GAAG;YACH,KAAK;YACL,MAAM;YACN,MAAM,EAAE,SAAS,CAAC,MAAM;SACzB,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAC7D,MAAM,SAAS,CAAC,mBAAmB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;IACtD,MAAM,IAAI,GAAG,MAAM,0BAA0B,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAChE,MAAM,iBAAiB,GAAG,+BAA+B,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACxE,MAAM,YAAY,GAAG,MAAM,aAAa,CACtC,IAAI,EACJ,SAAS,EACT,GAAG,GAAG,CAAC,EAAE,IAAI,KAAK,CAAC,KAAK,cAAc,EACtC,sBAAsB,CAAC,IAAI,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAC3D,CAAC;IACF,MAAM,cAAc,GAAG,MAAM,aAAa,CACxC,IAAI,EACJ,SAAS,EACT,GAAG,GAAG,CAAC,EAAE,IAAI,KAAK,CAAC,KAAK,SAAS,EACjC,wBAAwB,CAAC,SAAS,CAAC,QAAQ,CAAC,CAC7C,CAAC;IACF,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,KAAK,CAAC,CAAC;IACpD,MAAM,CAAC,QAAQ,CAAC,IAAI,CAClB,aAAa,SAAS,CAAC,KAAK,cAAc,YAAY,EAAE,EACxD,oCAAoC,cAAc,EAAE,CACrD,CAAC;IACF,MAAM,WAAW,CAAC,IAAI,EAAE;QACtB,IAAI,EAAE,gBAAgB;QACtB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,KAAK,EAAE,KAAK,CAAC,IAAI;QACjB,OAAO,EAAE,uCAAuC;QAChD,SAAS,EAAE,CAAC,YAAY,EAAE,cAAc,CAAC;QACzC,QAAQ,EAAE;YACR,KAAK,EAAE,GAAG,CAAC,EAAE;YACb,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,KAAK,EAAE,SAAS,CAAC,KAAK;YACtB,QAAQ,EAAE,SAAS,CAAC,QAAQ;YAC5B,MAAM,EAAE,SAAS,CAAC,MAAM;SACzB;KACF,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,EAChC,IAAI,EACJ,GAAG,EACH,KAAK,EACL,MAAM,EACN,MAAM,GAOP;IACC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,2BAA2B,MAAM,EAAE,CAAC,CAAC;IAC1D,MAAM,WAAW,CAAC,IAAI,EAAE;QACtB,IAAI,EAAE,gBAAgB;QACtB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,KAAK,EAAE,KAAK,CAAC,IAAI;QACjB,OAAO,EAAE,oCAAoC;QAC7C,SAAS,EAAE,EAAE;QACb,QAAQ,EAAE;YACR,KAAK,EAAE,GAAG,CAAC,EAAE;YACb,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,KAAK,EAAE,SAAS;YAChB,MAAM;SACP;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,2BAA2B,CAClC,OAAmD;IAEnD,OAAO,wHAAwH,CAAC,IAAI,CAClI,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CACvB,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,IAAY,EACZ,IAAwD;IAExD,MAAM,OAAO,GAAG,MAAM,sBAAsB,CAAC,IAAI,CAAC,CAAC;IACnD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC5B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,MAAM,GAAG,IAAI,GAAG,EAA4C,CAAC;IACnE,MAAM,YAAY,GAChB,8FAA8F,CAAC,IAAI,CACjG,IAAI,CACL,CAAC;IAEJ,IAAI,YAAY,EAAE,CAAC;QACjB,KAAK,MAAM,MAAM,IAAI,CAAC,kBAAkB,EAAE,eAAe,EAAE,UAAU,CAAC,EAAE,CAAC;YACvE,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBACxB,QAAQ,CAAC,IAAI,CAAC,WAAW,MAAM,EAAE,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,QAAQ,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;QACpE,CAAC;QACD,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACzB,CAAC;IACD,IACE,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;QAC5B,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC;QACtC,CAAC,QAAQ,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAC3C,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACvC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;IACD,IACE,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;QACvB,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC;QACvC,CAAC,QAAQ,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EACtC,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAClC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;IACD,IACE,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;QACvB,sCAAsC,CAAC,IAAI,CAAC,IAAI,CAAC,EACjD,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAClC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACxB,CAAC;IACD,IACE,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;QACzB,8CAA8C,CAAC,IAAI,CAAC,IAAI,CAAC,EACzD,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACpC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACtB,CAAC;IACD,IACE,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;QACzB,oDAAoD,CAAC,IAAI,CAAC,IAAI,CAAC,EAC/D,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACpC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACtB,CAAC;IAED,MAAM,cAAc,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC9C,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO;YACL,KAAK,EAAE,SAAS;YAChB,QAAQ,EAAE,EAAE;YACZ,MAAM,EACJ,kHAAkH;SACrH,CAAC;IACJ,CAAC;IACD,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,OAAO;QACpD,QAAQ,EAAE,cAAc;QACxB,MAAM,EAAE,YAAY;YAClB,CAAC,CAAC,8JAA8J;YAChK,CAAC,CAAC,6DAA6D;KAClE,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAC7B,IAA4D,EAC5D,SAAyB,EACzB,iBAAqE;IAErE,OAAO;QACL,yBAAyB,IAAI,CAAC,MAAM,EAAE;QACtC,EAAE;QACF,YAAY,IAAI,CAAC,KAAK,EAAE;QACxB,kBAAkB,IAAI,CAAC,UAAU,EAAE;QACnC,YAAY,SAAS,CAAC,KAAK,EAAE;QAC7B,aAAa,SAAS,CAAC,MAAM,EAAE;QAC/B,0BAA0B,IAAI,CAAC,MAAM,YAAY;QACjD,EAAE;QACF,aAAa;QACb,GAAG,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,OAAO,EAAE,CAAC;QACtD,EAAE;QACF,cAAc;QACd,GAAG,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,iBAAiB,CAAC;QACvD,GAAG,+BAA+B,CAAC,iBAAiB,CAAC;QACrD,uBAAuB;QACvB,GAAG,gBAAgB,CAAC,SAAS,CAAC;QAC9B,EAAE;QACF,aAAa;QACb,GAAG,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC;QACpC,EAAE;QACF,UAAU;QACV,GAAG,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC;QACjC,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,SAAS,gBAAgB,CACvB,IAA4D,EAC5D,SAAyB,EACzB,iBAAqE;IAErE,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CACnD,iBAAiB,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAClD,CAAC;IACF,IAAI,SAAS,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;QACnC,OAAO,wBAAwB,CAAC,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,0BAA0B,CAAC,SAAS,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,wBAAwB,CAC/B,IAA4D;IAE5D,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC;QACjD,gBAAgB,KAAK,GAAG,CAAC,KAAK,QAAQ,CAAC,MAAM,EAAE;QAC/C,aAAa,QAAQ,CAAC,MAAM,EAAE;QAC9B,oLAAoL;QACpL,wNAAwN;QACxN,gKAAgK;QAChK,EAAE;KACH,CAAC,CAAC;AACL,CAAC;AAED,SAAS,gBAAgB,CAAC,SAAyB;IACjD,MAAM,MAAM,GAAG;QACb,2JAA2J;QAC3J,0JAA0J;QAC1J,uFAAuF;QACvF,4FAA4F;KAC7F,CAAC;IACF,IAAI,SAAS,CAAC,KAAK,KAAK,UAAU,IAAI,SAAS,CAAC,KAAK,KAAK,OAAO,EAAE,CAAC;QAClE,MAAM,CAAC,IAAI,CACT,uJAAuJ,CACxJ,CAAC;IACJ,CAAC;IACD,IAAI,SAAS,CAAC,KAAK,KAAK,SAAS,IAAI,SAAS,CAAC,KAAK,KAAK,OAAO,EAAE,CAAC;QACjE,MAAM,CAAC,IAAI,CACT,wHAAwH,CACzH,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,+BAA+B,CACtC,OAA2D;IAE3D,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAC3C,OAAO;QACL,uCAAuC;QACvC,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CACnB,CAAC,KAAK,EAAE,EAAE,CACR,OAAO,KAAK,CAAC,KAAK,GAAG,CAAC,MAAM,KAAK,CAAC,SAAS,iCAAiC,KAAK,CAAC,MAAM,4EAA4E,CACvK;QACD,EAAE;KACH,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAAC,QAAkB;IAClD,OAAO;QACL,mBAAmB;QACnB,SAAS;QACT,EAAE;QACF,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,WAAW,OAAO,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;KACvE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,SAAS,QAAQ,CACf,IAAwD;IAExD,OAAO;QACL,IAAI,CAAC,KAAK;QACV,IAAI,CAAC,IAAI;QACT,GAAG,CAAC,IAAI,CAAC,kBAAkB,IAAI,EAAE,CAAC;QAClC,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QACrB,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;KACtB;SACE,IAAI,CAAC,GAAG,CAAC;SACT,WAAW,EAAE,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import type { HandoffInput, PhaseStructuredOutput, Role, Task } from "./types.js";
|
|
2
|
+
export type QualityContractValidationMode = "advisory" | "warn" | "block" | "human_approval";
|
|
3
|
+
export interface QualityContractRequirement {
|
|
4
|
+
id: string;
|
|
5
|
+
label: string;
|
|
6
|
+
match: string[];
|
|
7
|
+
severity: "warn" | "block";
|
|
8
|
+
}
|
|
9
|
+
export interface QualityContractDomainOverride {
|
|
10
|
+
signals: string[];
|
|
11
|
+
validationMode: QualityContractValidationMode;
|
|
12
|
+
requiresHumanApproval?: boolean;
|
|
13
|
+
}
|
|
14
|
+
export interface QualityContractOverride {
|
|
15
|
+
validationMode?: QualityContractValidationMode;
|
|
16
|
+
allowedTransitions?: string[];
|
|
17
|
+
returnToPhase?: string;
|
|
18
|
+
}
|
|
19
|
+
export interface QualityContractTransitionOverride extends QualityContractOverride {
|
|
20
|
+
allowed?: boolean;
|
|
21
|
+
}
|
|
22
|
+
export interface QualityContractPolicyConfig {
|
|
23
|
+
validationMode?: QualityContractValidationMode;
|
|
24
|
+
unknownRoleMode?: QualityContractValidationMode;
|
|
25
|
+
roleOverrides?: Record<string, QualityContractOverride>;
|
|
26
|
+
phaseOverrides?: Record<string, QualityContractOverride>;
|
|
27
|
+
capabilityOverrides?: Record<string, QualityContractOverride>;
|
|
28
|
+
transitionOverrides?: Record<string, QualityContractTransitionOverride>;
|
|
29
|
+
domainOverrides?: QualityContractDomainOverride[];
|
|
30
|
+
}
|
|
31
|
+
export interface QualityContract {
|
|
32
|
+
id: string;
|
|
33
|
+
appliesToRoles: string[];
|
|
34
|
+
capabilities: string[];
|
|
35
|
+
requiredInputs: string[];
|
|
36
|
+
requiredContextFiles: string[];
|
|
37
|
+
requiredOutputs: QualityContractRequirement[];
|
|
38
|
+
requiredEvidence: QualityContractRequirement[];
|
|
39
|
+
blockingConditions: string[];
|
|
40
|
+
allowedTransitions: string[];
|
|
41
|
+
returnToPhase?: string;
|
|
42
|
+
validationMode: QualityContractValidationMode;
|
|
43
|
+
domainOverrides: QualityContractDomainOverride[];
|
|
44
|
+
}
|
|
45
|
+
export interface QualityContractResolutionInput {
|
|
46
|
+
role: Role | string;
|
|
47
|
+
phase?: string;
|
|
48
|
+
nextPhase?: string;
|
|
49
|
+
task?: Task;
|
|
50
|
+
qualityMode?: QualityContractValidationMode;
|
|
51
|
+
qualityContracts?: QualityContractPolicyConfig;
|
|
52
|
+
}
|
|
53
|
+
export interface QualityContractEvaluationInput extends QualityContractResolutionInput {
|
|
54
|
+
nextPhase?: string;
|
|
55
|
+
output?: PhaseStructuredOutput;
|
|
56
|
+
handoff?: Pick<HandoffInput, "changed" | "behavior" | "tests" | "commands">;
|
|
57
|
+
handoffContent?: string;
|
|
58
|
+
contextAcknowledgement?: {
|
|
59
|
+
status?: "pass" | "missing" | "not_checked" | string;
|
|
60
|
+
missingRequired?: string[];
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
export interface QualityContractRequirementAssessment {
|
|
64
|
+
id: string;
|
|
65
|
+
label: string;
|
|
66
|
+
status: "covered" | "gap";
|
|
67
|
+
severity: "warn" | "block";
|
|
68
|
+
detail: string;
|
|
69
|
+
}
|
|
70
|
+
export interface QualityContractEvaluation {
|
|
71
|
+
contract: QualityContract;
|
|
72
|
+
status: "pass" | "warn" | "block";
|
|
73
|
+
mode: QualityContractValidationMode;
|
|
74
|
+
requiresHumanApproval: boolean;
|
|
75
|
+
transitionAllowed: boolean;
|
|
76
|
+
allowedTransitions: string[];
|
|
77
|
+
returnToPhase?: string;
|
|
78
|
+
assessments: QualityContractRequirementAssessment[];
|
|
79
|
+
missingRequirements: string[];
|
|
80
|
+
}
|
|
81
|
+
export declare const QUALITY_CONTRACT_REGISTRY: QualityContract[];
|
|
82
|
+
export declare function resolveQualityContract(input: QualityContractResolutionInput): QualityContract;
|
|
83
|
+
export declare function evaluateQualityContract(input: QualityContractEvaluationInput): QualityContractEvaluation;
|