@jterrats/open-orchestra 1.0.10 → 1.0.12

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 (70) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/dist/automation-evidence.d.ts +1 -1
  3. package/dist/automation-evidence.js +133 -11
  4. package/dist/automation-evidence.js.map +1 -1
  5. package/dist/command-manifest.js +4 -4
  6. package/dist/command-manifest.js.map +1 -1
  7. package/dist/phase-playbooks.js +2 -0
  8. package/dist/phase-playbooks.js.map +1 -1
  9. package/dist/qa-coverage-evidence.d.ts +3 -0
  10. package/dist/qa-coverage-evidence.js +92 -0
  11. package/dist/qa-coverage-evidence.js.map +1 -0
  12. package/dist/qa-coverage-guidance.d.ts +6 -0
  13. package/dist/qa-coverage-guidance.js +141 -0
  14. package/dist/qa-coverage-guidance.js.map +1 -0
  15. package/dist/qa-coverage-rules.d.ts +7 -0
  16. package/dist/qa-coverage-rules.js +127 -0
  17. package/dist/qa-coverage-rules.js.map +1 -0
  18. package/dist/qa-coverage-types.d.ts +47 -0
  19. package/dist/qa-coverage-types.js +2 -0
  20. package/dist/qa-coverage-types.js.map +1 -0
  21. package/dist/qa-coverage.d.ts +2 -20
  22. package/dist/qa-coverage.js +42 -132
  23. package/dist/qa-coverage.js.map +1 -1
  24. package/dist/recoverable-failure-lessons.d.ts +2 -0
  25. package/dist/recoverable-failure-lessons.js +55 -0
  26. package/dist/recoverable-failure-lessons.js.map +1 -0
  27. package/dist/release-readiness.js +3 -1
  28. package/dist/release-readiness.js.map +1 -1
  29. package/dist/roles/qa-ux-roles.js +5 -0
  30. package/dist/roles/qa-ux-roles.js.map +1 -1
  31. package/dist/runtime-adapters.js +1 -1
  32. package/dist/runtime-adapters.js.map +1 -1
  33. package/dist/runtime-completion-validation.d.ts +16 -0
  34. package/dist/runtime-completion-validation.js +206 -0
  35. package/dist/runtime-completion-validation.js.map +1 -0
  36. package/dist/runtime-execution.js +3 -0
  37. package/dist/runtime-execution.js.map +1 -1
  38. package/dist/runtime-lifecycle-watch.js +43 -37
  39. package/dist/runtime-lifecycle-watch.js.map +1 -1
  40. package/dist/runtime-parent-action-dispatch.d.ts +2 -1
  41. package/dist/runtime-parent-action-dispatch.js +94 -12
  42. package/dist/runtime-parent-action-dispatch.js.map +1 -1
  43. package/dist/runtime-spawn-bridge.js +6 -0
  44. package/dist/runtime-spawn-bridge.js.map +1 -1
  45. package/dist/skills-catalog.js +2 -0
  46. package/dist/skills-catalog.js.map +1 -1
  47. package/dist/task-graph-commands.js +21 -14
  48. package/dist/task-graph-commands.js.map +1 -1
  49. package/dist/types/runtime.d.ts +23 -0
  50. package/dist/types/tasks.d.ts +3 -0
  51. package/dist/types.d.ts +1 -1
  52. package/dist/types.js.map +1 -1
  53. package/dist/workflow-evidence-service.js +2 -0
  54. package/dist/workflow-evidence-service.js.map +1 -1
  55. package/dist/workflow-gates.js +6 -0
  56. package/dist/workflow-gates.js.map +1 -1
  57. package/dist/workflow-run-commands.js +104 -12
  58. package/dist/workflow-run-commands.js.map +1 -1
  59. package/dist/workflow-task-service.js +30 -1
  60. package/dist/workflow-task-service.js.map +1 -1
  61. package/docs/audio-video-transcription-skill.md +441 -45
  62. package/docs/autonomous-workflow.md +38 -0
  63. package/docs/backlog/web-code-editor-lsp-spike.md +289 -0
  64. package/docs/claude-adapter-qa-matrix.md +31 -19
  65. package/docs/context-vault.md +80 -0
  66. package/docs/e2e-test-batteries.md +3 -3
  67. package/docs/runtime-adapters.md +28 -18
  68. package/docs/site-manifest.json +1 -0
  69. package/docs/traceability-flow.md +14 -4
  70. package/package.json +2 -2
@@ -0,0 +1,141 @@
1
+ export function requiredSetupForStyle(style) {
2
+ if (style === "generated_artifact") {
3
+ return "Isolated temporary project with explicit runtime markers, task acceptance criteria, and expected generated files.";
4
+ }
5
+ if (style === "workflow") {
6
+ return "Isolated workflow state with task, roles, acceptance criteria, gates, events, and expected handoff artifacts.";
7
+ }
8
+ if (style === "integration") {
9
+ return "Sandbox, mock, contract server, webhook receiver, event log, or documented deferral with owner and rationale.";
10
+ }
11
+ if (style === "browser")
12
+ return "Browser fixture with deterministic data and responsive viewport coverage.";
13
+ if (style === "cli")
14
+ return "Temporary project or fixture with deterministic command inputs and expected files/events.";
15
+ if (style === "api")
16
+ return "API test fixture with request, response, auth, and persisted side-effect checks.";
17
+ if (style === "mobile")
18
+ return "Device, emulator, or mobile viewport fixture with deterministic state.";
19
+ if (style === "desktop")
20
+ return "Desktop app fixture with local filesystem/event assertions.";
21
+ if (style === "data")
22
+ return "Seeded dataset with query, lineage, metric, or quality-check expectations.";
23
+ if (style === "shell")
24
+ return "Disposable shell fixture with strict error handling and captured logs.";
25
+ return "No specialized setup required.";
26
+ }
27
+ export function requiredAssertionsForStyle(style) {
28
+ if (style === "generated_artifact") {
29
+ return [
30
+ "generated path exists",
31
+ "managed metadata matches target",
32
+ "target-specific content exists",
33
+ "wrong-target content is absent",
34
+ "refresh and drift behavior are asserted",
35
+ "user content is preserved",
36
+ ];
37
+ }
38
+ if (style === "workflow") {
39
+ return [
40
+ "allowed transition occurs",
41
+ "blocked transition stays blocked",
42
+ "return loop reaches responsible role",
43
+ "resume behavior is asserted",
44
+ "final handoff or release artifact exists",
45
+ ];
46
+ }
47
+ if (style === "cli")
48
+ return [
49
+ "exit code",
50
+ "stdout",
51
+ "stderr",
52
+ "generated files or events",
53
+ "final state",
54
+ ];
55
+ if (style === "api")
56
+ return [
57
+ "request contract",
58
+ "response body",
59
+ "error shape",
60
+ "permissions",
61
+ "side effect",
62
+ ];
63
+ if (style === "integration")
64
+ return [
65
+ "local trigger",
66
+ "receiver-side state",
67
+ "sandbox/mock/contract/webhook/event/log or deferral",
68
+ ];
69
+ if (style === "browser")
70
+ return [
71
+ "visible state",
72
+ "user flow",
73
+ "responsive behavior",
74
+ "accessibility where applicable",
75
+ ];
76
+ if (style === "mobile")
77
+ return [
78
+ "device visible state",
79
+ "platform behavior",
80
+ "responsive or accessibility evidence",
81
+ ];
82
+ if (style === "desktop")
83
+ return ["desktop visible state", "local files/events", "platform behavior"];
84
+ if (style === "data")
85
+ return [
86
+ "query result",
87
+ "persisted data",
88
+ "lineage or metric correctness",
89
+ "quality check",
90
+ ];
91
+ if (style === "shell")
92
+ return ["exit code", "logs", "side effects", "cleanup"];
93
+ return [];
94
+ }
95
+ export function expectedObservableResultForStyle(style) {
96
+ if (style === "generated_artifact") {
97
+ return "Generated artifacts prove the requested runtime context and remain safe across refresh/drift scenarios.";
98
+ }
99
+ if (style === "workflow") {
100
+ return "Workflow state machine reaches the expected phase or blocks with the expected reason.";
101
+ }
102
+ if (style === "integration") {
103
+ return "Triggered integration produces receiver-side evidence or an explicitly accepted deferral.";
104
+ }
105
+ if (style === "not_applicable")
106
+ return "Criterion does not require automation from current task scope.";
107
+ return "Observable product state proves the acceptance criterion.";
108
+ }
109
+ export function recommendationForStyle(task, style, commands) {
110
+ if (style === "browser")
111
+ return `Add Playwright coverage using ${toPascalCase(task.id)}Page with role and label locators, visible-state assertions, screenshots for visual behavior, and evidence that names the covered acceptance criterion.`;
112
+ if (style === "cli")
113
+ return "Add executable CLI regression coverage that asserts exit code, stdout, stderr, generated files, workflow events, final state, and evidence that names the covered acceptance criterion.";
114
+ if (style === "shell")
115
+ return "Add shell regression coverage with deterministic setup, strict error handling, captured logs, and evidence that names the covered acceptance criterion.";
116
+ if (style === "api")
117
+ return "Add API regression coverage for request, response body, error shape, idempotency, permissions, observable side effects, and evidence that names the covered acceptance criterion.";
118
+ if (style === "generated_artifact")
119
+ return "Add generated-artifact coverage that asserts expected paths, managed metadata, target-specific content, refresh/drift behavior, user-content preservation, wrong-target absence, and evidence that names the covered acceptance criterion.";
120
+ if (style === "workflow")
121
+ return "Add workflow coverage that asserts valid transitions, blocked transitions, return loops, resume behavior, final handoff/release artifacts, and evidence that names the covered acceptance criterion.";
122
+ if (style === "integration")
123
+ return "Add integration coverage that asserts local trigger plus receiver-side sandbox/mock/contract/webhook/event/log evidence, or records deferred owner and rationale.";
124
+ if (style === "mobile")
125
+ return "Add mobile coverage that asserts device-visible state, responsive or platform behavior, accessibility where applicable, and evidence that names the covered acceptance criterion.";
126
+ if (style === "desktop")
127
+ return "Add desktop coverage that asserts visible app state, local files/events, platform behavior, and evidence that names the covered acceptance criterion.";
128
+ if (style === "data")
129
+ return "Add data coverage that asserts persisted data, query results, lineage, metric correctness, or data quality checks.";
130
+ if (style === "mixed")
131
+ return `Run the mixed automation plan: ${commands.join(", ") || "no executable commands configured"}.`;
132
+ return "No automation required from current task scope.";
133
+ }
134
+ function toPascalCase(value) {
135
+ return value
136
+ .split(/[^a-zA-Z0-9]+/)
137
+ .filter(Boolean)
138
+ .map((part) => part.charAt(0).toUpperCase() + part.slice(1))
139
+ .join("");
140
+ }
141
+ //# sourceMappingURL=qa-coverage-guidance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qa-coverage-guidance.js","sourceRoot":"","sources":["../src/qa-coverage-guidance.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { Task } from "./types.js";
2
+ import type { QaAutomationStyle, QaCriterionCoverage, QaCriterionCoverageStatus } from "./qa-coverage-types.js";
3
+ export declare function classifyCriterion(criterion: string, defaultStyle: QaAutomationStyle): QaAutomationStyle;
4
+ export declare function classifyChangedSurfaces(task: Task): Set<QaAutomationStyle>;
5
+ export declare function styleFromSet(styles: Set<QaAutomationStyle>): QaAutomationStyle;
6
+ export declare function commandsForStyle(style: QaAutomationStyle, scripts: Set<string>): string[];
7
+ export declare function summarizeCoverage(coverage: QaCriterionCoverage[]): Record<QaCriterionCoverageStatus, number>;
@@ -0,0 +1,127 @@
1
+ const STYLE_PATTERNS = {
2
+ browser: /\b(browser|ui|web|site|page|screen|click|form|responsive|playwright|accessibility)\b/i,
3
+ cli: /\b(cli|command|terminal|stdout|stderr|flag|option|manifest)\b/i,
4
+ shell: /\b(shell|bash|sh|script|deploy|deployment|smoke)\b/i,
5
+ api: /\b(api|endpoint|http|request|response|contract|webhook|json schema)\b/i,
6
+ integration: /\b(integration|receiver|sandbox|mock|webhook|event log|external system|side effect)\b/i,
7
+ generated_artifact: /\b(generated artifact|generated file|runtime guidance|managed block|wrong-target|wrong target|drift|refresh|rules?|skills?|markdown|mdc|agents\.md|claude\.md|copilot|cursor|codex|vscode|windsurf)\b/i,
8
+ workflow: /\b(workflow|gate|handoff|phase|transition|resume|return loop|state machine)\b/i,
9
+ mobile: /\b(mobile|ios|android|device|emulator|responsive mobile)\b/i,
10
+ desktop: /\b(desktop|electron|local app|native app)\b/i,
11
+ data: /\b(data|database|db|query|lineage|metric|warehouse|pipeline)\b/i,
12
+ };
13
+ const STYLE_COMMAND_HINTS = {
14
+ browser: ["test:e2e", "test:playwright"],
15
+ cli: ["test:e2e:init", "test:cli"],
16
+ shell: ["test:shell", "test:smoke"],
17
+ api: ["test:api", "test:integration"],
18
+ integration: ["test:integration", "test:api"],
19
+ generated_artifact: ["test:e2e:init", "test:cli"],
20
+ workflow: ["test:e2e:runtime", "test:e2e:init", "test:cli"],
21
+ mobile: ["test:e2e:mobile", "test:e2e"],
22
+ desktop: ["test:e2e:desktop", "test:e2e"],
23
+ data: ["test:data", "test:integration"],
24
+ };
25
+ export function classifyCriterion(criterion, defaultStyle) {
26
+ const styles = stylesFromText(criterion);
27
+ if (styles.size > 0)
28
+ return styleFromSet(styles);
29
+ return defaultStyle;
30
+ }
31
+ export function classifyChangedSurfaces(task) {
32
+ const styles = new Set();
33
+ for (const filePath of task.paths ?? []) {
34
+ const normalized = filePath.toLowerCase();
35
+ addPathStyles(styles, normalized);
36
+ }
37
+ for (const style of stylesFromText(taskSignals(task))) {
38
+ styles.add(style);
39
+ }
40
+ if (styles.size === 0)
41
+ styles.add("not_applicable");
42
+ return styles;
43
+ }
44
+ export function styleFromSet(styles) {
45
+ const concrete = [...styles].filter((style) => style !== "not_applicable");
46
+ if (concrete.length === 0)
47
+ return "not_applicable";
48
+ return concrete.length === 1 ? concrete[0] : "mixed";
49
+ }
50
+ export function commandsForStyle(style, scripts) {
51
+ if (style === "mixed") {
52
+ return [
53
+ ...new Set(concreteStyles().flatMap((item) => commandsForStyle(item, scripts))),
54
+ ];
55
+ }
56
+ if (style === "not_applicable")
57
+ return [];
58
+ return STYLE_COMMAND_HINTS[style]
59
+ .filter((script) => scripts.has(script))
60
+ .map((script) => `npm run ${script}`);
61
+ }
62
+ export function summarizeCoverage(coverage) {
63
+ const summary = {
64
+ covered: 0,
65
+ weak: 0,
66
+ missing: 0,
67
+ deferred: 0,
68
+ blocked: 0,
69
+ };
70
+ for (const item of coverage) {
71
+ summary[item.status] += 1;
72
+ }
73
+ return summary;
74
+ }
75
+ function addPathStyles(styles, normalized) {
76
+ if (/^(site|src\/web|e2e\/)|playwright|\.jsx?$|\.tsx?$/.test(normalized))
77
+ styles.add("browser");
78
+ if (/^(bin\/|src\/cli|src\/commands|src\/.*commands)/.test(normalized))
79
+ styles.add("cli");
80
+ if (/\.sh$|scripts\/|deploy|workflow/.test(normalized))
81
+ styles.add("shell");
82
+ if (/api|server|webhook|openapi|schema/.test(normalized))
83
+ styles.add("api");
84
+ if (/\.agent-workflow|workflow|runtime|handoff|gate|phase/.test(normalized))
85
+ styles.add("workflow");
86
+ if (/agents\.md|claude\.md|orchestra\.md|\.mdc$|rules\/|skills\/|runtime-adapters|runtime-bootstrap|instruction|generated/.test(normalized))
87
+ styles.add("generated_artifact");
88
+ if (/mobile|ios|android|emulator/.test(normalized))
89
+ styles.add("mobile");
90
+ if (/desktop|electron|native/.test(normalized))
91
+ styles.add("desktop");
92
+ if (/database|db|migration|schema|pipeline|warehouse|metric/.test(normalized))
93
+ styles.add("data");
94
+ }
95
+ function stylesFromText(text) {
96
+ const styles = new Set();
97
+ for (const [style, pattern] of Object.entries(STYLE_PATTERNS)) {
98
+ if (pattern.test(text))
99
+ styles.add(style);
100
+ }
101
+ return styles;
102
+ }
103
+ function taskSignals(task) {
104
+ return [
105
+ task.title,
106
+ task.goal,
107
+ task.scope,
108
+ task.testStrategy,
109
+ ...(task.acceptanceCriteria ?? []),
110
+ ...(task.risks ?? []),
111
+ ].join(" ");
112
+ }
113
+ function concreteStyles() {
114
+ return [
115
+ "browser",
116
+ "cli",
117
+ "shell",
118
+ "api",
119
+ "integration",
120
+ "generated_artifact",
121
+ "workflow",
122
+ "mobile",
123
+ "desktop",
124
+ "data",
125
+ ];
126
+ }
127
+ //# sourceMappingURL=qa-coverage-rules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qa-coverage-rules.js","sourceRoot":"","sources":["../src/qa-coverage-rules.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import type { EventEntry } from "./types.js";
2
+ export type QaAutomationStyle = "browser" | "cli" | "shell" | "api" | "integration" | "generated_artifact" | "workflow" | "mobile" | "desktop" | "data" | "mixed" | "not_applicable";
3
+ export type QaCriterionCoverageStatus = "covered" | "weak" | "missing" | "deferred" | "blocked";
4
+ export interface QaEvidenceReference {
5
+ eventId: string;
6
+ type: string;
7
+ owner: string;
8
+ summary: string;
9
+ surface?: string;
10
+ assertions?: string;
11
+ externalValidation?: string;
12
+ deferredOwner?: string;
13
+ deferredRationale?: string;
14
+ observableOutcome: boolean;
15
+ deferredExternalValidation: boolean;
16
+ gaps: string[];
17
+ status: "usable" | "weak" | "wrong_surface" | "generic" | "deferred";
18
+ }
19
+ export interface QaCriterionCoverage {
20
+ id: string;
21
+ index: number;
22
+ criterion: string;
23
+ style: QaAutomationStyle;
24
+ status: QaCriterionCoverageStatus;
25
+ evidence: string[];
26
+ actualEvidence: QaEvidenceReference[];
27
+ plannedCommands: string[];
28
+ requiredSetup: string;
29
+ requiredAssertions: string[];
30
+ expectedObservableResult: string;
31
+ recommendation: string;
32
+ }
33
+ export interface QaAutomationCoverageReport {
34
+ taskId: string;
35
+ style: QaAutomationStyle;
36
+ changedSurfaces: QaAutomationStyle[];
37
+ commands: string[];
38
+ pageObjects: string[];
39
+ criteria: QaCriterionCoverage[];
40
+ gaps: string[];
41
+ missingCriteria: string[];
42
+ weakCriteria: string[];
43
+ deferredCriteria: string[];
44
+ blockedCriteria: string[];
45
+ summary: Record<QaCriterionCoverageStatus, number>;
46
+ }
47
+ export type QaEvidenceMatcher = (events: EventEntry[], criterion: string, expectedStyle: QaAutomationStyle) => QaEvidenceReference[];
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=qa-coverage-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qa-coverage-types.js","sourceRoot":"","sources":["../src/qa-coverage-types.ts"],"names":[],"mappings":""}
@@ -1,24 +1,6 @@
1
1
  import type { EventEntry, Task } from "./types.js";
2
- export type QaAutomationStyle = "browser" | "cli" | "shell" | "api" | "mixed" | "not_applicable";
3
- export type QaCriterionCoverageStatus = "covered" | "planned" | "skipped" | "gap";
4
- export interface QaCriterionCoverage {
5
- index: number;
6
- criterion: string;
7
- style: QaAutomationStyle;
8
- status: QaCriterionCoverageStatus;
9
- evidence: string[];
10
- plannedCommands: string[];
11
- recommendation: string;
12
- }
13
- export interface QaAutomationCoverageReport {
14
- taskId: string;
15
- style: QaAutomationStyle;
16
- changedSurfaces: QaAutomationStyle[];
17
- commands: string[];
18
- pageObjects: string[];
19
- criteria: QaCriterionCoverage[];
20
- gaps: string[];
21
- }
2
+ import type { QaAutomationCoverageReport } from "./qa-coverage-types.js";
3
+ export type { QaAutomationCoverageReport, QaAutomationStyle, QaCriterionCoverage, QaCriterionCoverageStatus, QaEvidenceReference, } from "./qa-coverage-types.js";
22
4
  export declare function generateQaAutomationCoverage(taskId: string, root?: string): Promise<QaAutomationCoverageReport>;
23
5
  export declare function loadQaAutomationScripts(root?: string): Promise<Set<string>>;
24
6
  export declare function assessQaAutomationCoverage(task: Task, events: EventEntry[], scripts: Set<string>): QaAutomationCoverageReport;
@@ -1,17 +1,8 @@
1
- import { loadWorkspace, readEvents } from "./workspace.js";
2
1
  import { readPackageScriptNames } from "./package-info.js";
3
- const STYLE_PATTERNS = {
4
- browser: /\b(browser|ui|web|site|page|screen|click|form|responsive|playwright|accessibility)\b/i,
5
- cli: /\b(cli|command|terminal|stdout|stderr|flag|option|manifest)\b/i,
6
- shell: /\b(shell|bash|sh|script|deploy|deployment|smoke)\b/i,
7
- api: /\b(api|endpoint|http|request|response|contract|webhook|json schema)\b/i,
8
- };
9
- const STYLE_COMMAND_HINTS = {
10
- browser: ["test:e2e", "test:playwright"],
11
- cli: ["test:e2e:init", "test:cli"],
12
- shell: ["test:shell", "test:smoke"],
13
- api: ["test:api", "test:integration"],
14
- };
2
+ import { matchingQaEvidence } from "./qa-coverage-evidence.js";
3
+ import { expectedObservableResultForStyle, recommendationForStyle, requiredAssertionsForStyle, requiredSetupForStyle, } from "./qa-coverage-guidance.js";
4
+ import { classifyChangedSurfaces, classifyCriterion, commandsForStyle, styleFromSet, summarizeCoverage, } from "./qa-coverage-rules.js";
5
+ import { loadWorkspace, readEvents } from "./workspace.js";
15
6
  export async function generateQaAutomationCoverage(taskId, root = process.cwd()) {
16
7
  const workspace = await loadWorkspace(root);
17
8
  const task = workspace.tasks.find((candidate) => candidate.id === taskId);
@@ -25,9 +16,7 @@ export async function loadQaAutomationScripts(root = process.cwd()) {
25
16
  return readPackageScriptNames(root);
26
17
  }
27
18
  export function assessQaAutomationCoverage(task, events, scripts) {
28
- const criteria = task.acceptanceCriteria && task.acceptanceCriteria.length > 0
29
- ? task.acceptanceCriteria
30
- : [];
19
+ const criteria = task.acceptanceCriteria ?? [];
31
20
  const changedSurfaces = classifyChangedSurfaces(task);
32
21
  const defaultStyle = styleFromSet(changedSurfaces);
33
22
  const coverage = criteria.map((criterion, index) => assessCriterion(task, criterion, index, events, scripts, defaultStyle));
@@ -39,9 +28,11 @@ export function assessQaAutomationCoverage(task, events, scripts) {
39
28
  .filter((item) => item.style === "browser")
40
29
  .map(() => `${toPascalCase(task.id)}Page`)),
41
30
  ];
42
- const gaps = coverage
43
- .filter((item) => item.status === "gap")
44
- .map((item) => item.criterion);
31
+ const gaps = criteriaByStatus(coverage, "missing");
32
+ const missingCriteria = criteriaByStatus(coverage, "missing");
33
+ const weakCriteria = criteriaByStatus(coverage, "weak");
34
+ const deferredCriteria = criteriaByStatus(coverage, "deferred");
35
+ const blockedOnlyCriteria = criteriaByStatus(coverage, "blocked");
45
36
  return {
46
37
  taskId: task.id,
47
38
  style: styleFromSet(new Set(coverage.map((item) => item.style))),
@@ -50,134 +41,53 @@ export function assessQaAutomationCoverage(task, events, scripts) {
50
41
  pageObjects,
51
42
  criteria: coverage,
52
43
  gaps,
44
+ missingCriteria,
45
+ weakCriteria,
46
+ deferredCriteria,
47
+ blockedCriteria: [
48
+ ...missingCriteria,
49
+ ...weakCriteria,
50
+ ...blockedOnlyCriteria,
51
+ ],
52
+ summary: summarizeCoverage(coverage),
53
53
  };
54
54
  }
55
55
  function assessCriterion(task, criterion, index, events, scripts, defaultStyle) {
56
56
  const style = classifyCriterion(criterion, defaultStyle);
57
- const evidence = matchingEvidence(events, criterion);
57
+ const actualEvidence = matchingQaEvidence(events, criterion, style);
58
58
  const plannedCommands = commandsForStyle(style, scripts);
59
- const status = criterionStatus(style, evidence, plannedCommands);
60
59
  return {
60
+ id: `AC-${index + 1}`,
61
61
  index,
62
62
  criterion,
63
63
  style,
64
- status,
65
- evidence,
64
+ status: criterionStatus(style, actualEvidence),
65
+ evidence: actualEvidence.map((item) => item.summary),
66
+ actualEvidence,
66
67
  plannedCommands,
68
+ requiredSetup: requiredSetupForStyle(style),
69
+ requiredAssertions: requiredAssertionsForStyle(style),
70
+ expectedObservableResult: expectedObservableResultForStyle(style),
67
71
  recommendation: recommendationForStyle(task, style, plannedCommands),
68
72
  };
69
73
  }
70
- function criterionStatus(style, evidence, plannedCommands) {
71
- if (evidence.length > 0)
72
- return "covered";
74
+ function criterionStatus(style, evidence) {
73
75
  if (style === "not_applicable")
74
- return "skipped";
75
- if (plannedCommands.length > 0)
76
- return "planned";
77
- return "gap";
78
- }
79
- function classifyCriterion(criterion, defaultStyle) {
80
- const styles = stylesFromText(criterion);
81
- if (styles.size > 0)
82
- return styleFromSet(styles);
83
- return defaultStyle;
84
- }
85
- function classifyChangedSurfaces(task) {
86
- const styles = new Set();
87
- for (const filePath of task.paths ?? []) {
88
- const normalized = filePath.toLowerCase();
89
- if (/^(site|src\/web|e2e\/)|playwright|\.jsx?$|\.tsx?$/.test(normalized)) {
90
- styles.add("browser");
91
- }
92
- if (/^(bin\/|src\/cli|src\/commands|src\/.*commands)/.test(normalized)) {
93
- styles.add("cli");
94
- }
95
- if (/\.sh$|scripts\/|deploy|workflow/.test(normalized)) {
96
- styles.add("shell");
97
- }
98
- if (/api|server|webhook|openapi|schema/.test(normalized)) {
99
- styles.add("api");
100
- }
101
- }
102
- for (const style of stylesFromText([
103
- task.title,
104
- task.goal,
105
- task.scope,
106
- task.testStrategy,
107
- ...(task.acceptanceCriteria ?? []),
108
- ...(task.risks ?? []),
109
- ].join(" "))) {
110
- styles.add(style);
111
- }
112
- if (styles.size === 0)
113
- styles.add("not_applicable");
114
- return styles;
115
- }
116
- function stylesFromText(text) {
117
- const styles = new Set();
118
- for (const [style, pattern] of Object.entries(STYLE_PATTERNS)) {
119
- if (pattern.test(text)) {
120
- styles.add(style);
121
- }
122
- }
123
- return styles;
124
- }
125
- function styleFromSet(styles) {
126
- const concrete = [...styles].filter((style) => style !== "not_applicable");
127
- if (concrete.length === 0)
128
- return "not_applicable";
129
- return concrete.length === 1 ? concrete[0] : "mixed";
130
- }
131
- function commandsForStyle(style, scripts) {
132
- if (style === "mixed") {
133
- return [
134
- ...new Set(["browser", "cli", "shell", "api"].flatMap((item) => commandsForStyle(item, scripts))),
135
- ];
136
- }
137
- if (style === "not_applicable")
138
- return [];
139
- return STYLE_COMMAND_HINTS[style]
140
- .filter((script) => scripts.has(script))
141
- .map((script) => `npm run ${script}`);
142
- }
143
- function matchingEvidence(events, criterion) {
144
- const needle = criterion.toLowerCase();
145
- return events
146
- .filter((event) => event.type === "EVIDENCE_ADDED")
147
- .filter((event) => isObservableEvidence(event))
148
- .filter((event) => {
149
- const summary = event.summary.toLowerCase();
150
- return (summary.includes(needle) ||
151
- summary.includes("covers all acceptance criteria"));
152
- })
153
- .map((event) => event.summary);
154
- }
155
- function isObservableEvidence(event) {
156
- const automation = event.metadata.automation;
157
- if (automation &&
158
- typeof automation === "object" &&
159
- "observableOutcome" in automation) {
160
- return (automation.observableOutcome === true);
161
- }
162
- return true;
76
+ return "covered";
77
+ if (evidence.some((item) => item.status === "usable"))
78
+ return "covered";
79
+ if (evidence.some((item) => item.status === "deferred"))
80
+ return "deferred";
81
+ if (evidence.some((item) => item.status === "wrong_surface" || item.status === "generic"))
82
+ return "blocked";
83
+ if (evidence.length > 0)
84
+ return "weak";
85
+ return "missing";
163
86
  }
164
- function recommendationForStyle(task, style, commands) {
165
- if (style === "browser") {
166
- return `Add Playwright coverage using ${toPascalCase(task.id)}Page with role and label locators, visible-state assertions, screenshots for visual behavior, and evidence that names the covered acceptance criterion.`;
167
- }
168
- if (style === "cli") {
169
- return "Add executable CLI regression coverage that asserts exit code, stdout, stderr, generated files, workflow events, final state, and evidence that names the covered acceptance criterion.";
170
- }
171
- if (style === "shell") {
172
- return "Add shell regression coverage with deterministic setup, strict error handling, captured logs, and evidence that names the covered acceptance criterion.";
173
- }
174
- if (style === "api") {
175
- return "Add API regression coverage for request, response body, error shape, idempotency, permissions, observable side effects, and evidence that names the covered acceptance criterion.";
176
- }
177
- if (style === "mixed") {
178
- return `Run the mixed automation plan: ${commands.join(", ") || "no executable commands configured"}.`;
179
- }
180
- return "No automation required from current task scope.";
87
+ function criteriaByStatus(coverage, status) {
88
+ return coverage
89
+ .filter((item) => item.status === status)
90
+ .map((item) => item.criterion);
181
91
  }
182
92
  function toPascalCase(value) {
183
93
  return value
@@ -1 +1 @@
1
- {"version":3,"file":"qa-coverage.js","sourceRoot":"","sources":["../src/qa-coverage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"qa-coverage.js","sourceRoot":"","sources":["../src/qa-coverage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { EvidenceInput } from "./types.js";
2
+ export declare function autoCaptureRecoverableFailureLesson(evidence: EvidenceInput, root?: string): Promise<void>;