Skip to content

Commit f899abf

Browse files
Fix assisted facilitation e2e tests and add proper spec tagging
- Add .withRealApi() to all TestScenario builders so tests use real database - Add @SPEC:ASSISTED_FACILITATION_SPEC tag to all 5 test files - Add ASSISTED_FACILITATION_SPEC to known specs in analyzer and docs - Fix justfile to export E2E_API_URL for dynamic port support Co-Authored-By: Claude <noreply@anthropic.com>
1 parent e1f300f commit f899abf

9 files changed

Lines changed: 60 additions & 14 deletions

client/tests/e2e/assisted-facilitation-classification.spec.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@
88
import { test, expect } from '@playwright/test';
99
import { TestScenario } from '../lib/scenario-builder';
1010

11-
test.describe('Assisted Facilitation v2 - Classification & Disagreements', () => {
11+
test.describe('Assisted Facilitation v2 - Classification & Disagreements', {
12+
tag: ['@spec:ASSISTED_FACILITATION_SPEC'],
13+
}, () => {
1214
test('findings are classified into correct categories', async ({
1315
browser,
1416
}) => {
@@ -19,6 +21,7 @@ test.describe('Assisted Facilitation v2 - Classification & Disagreements', () =>
1921
.withParticipants(1)
2022
.withTraces(5)
2123
.inPhase('discovery')
24+
.withRealApi()
2225
.build();
2326

2427
const participant = scenario.users.participant[0];
@@ -104,6 +107,7 @@ test.describe('Assisted Facilitation v2 - Classification & Disagreements', () =>
104107
.withParticipants(2)
105108
.withTraces(3)
106109
.inPhase('discovery')
110+
.withRealApi()
107111
.build();
108112

109113
const participant1 = scenario.users.participant[0];
@@ -161,6 +165,7 @@ test.describe('Assisted Facilitation v2 - Classification & Disagreements', () =>
161165
.withParticipants(2)
162166
.withTraces(3)
163167
.inPhase('discovery')
168+
.withRealApi()
164169
.build();
165170

166171
const p1 = scenario.users.participant[0];
@@ -223,6 +228,7 @@ test.describe('Assisted Facilitation v2 - Classification & Disagreements', () =>
223228
.withParticipants(1)
224229
.withTraces(2)
225230
.inPhase('discovery')
231+
.withRealApi()
226232
.build();
227233

228234
const participant = scenario.users.participant[0];
@@ -273,6 +279,7 @@ test.describe('Assisted Facilitation v2 - Classification & Disagreements', () =>
273279
.withParticipants(1)
274280
.withTraces(2)
275281
.inPhase('discovery')
282+
.withRealApi()
276283
.build();
277284

278285
const participant = scenario.users.participant[0];
@@ -332,6 +339,7 @@ test.describe('Assisted Facilitation v2 - Classification & Disagreements', () =>
332339
traceIndex: 0,
333340
})
334341
.inPhase('discovery')
342+
.withRealApi()
335343
.build();
336344

337345
// Facilitator logs in

client/tests/e2e/assisted-facilitation-dashboard.spec.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@
88
import { test, expect } from '@playwright/test';
99
import { TestScenario } from '../lib/scenario-builder';
1010

11-
test.describe('Assisted Facilitation v2 - Facilitator Dashboard', () => {
11+
test.describe('Assisted Facilitation v2 - Facilitator Dashboard', {
12+
tag: ['@spec:ASSISTED_FACILITATION_SPEC'],
13+
}, () => {
1214
test('facilitator can view trace discovery state with category coverage', async ({
1315
browser,
1416
}) => {
@@ -31,6 +33,7 @@ test.describe('Assisted Facilitation v2 - Facilitator Dashboard', () => {
3133
traceIndex: 1,
3234
})
3335
.inPhase('discovery')
36+
.withRealApi()
3437
.build();
3538

3639
// Facilitator logs in and navigates to first trace
@@ -61,6 +64,7 @@ test.describe('Assisted Facilitation v2 - Facilitator Dashboard', () => {
6164
.withParticipants(1)
6265
.withTraces(3)
6366
.inPhase('discovery')
67+
.withRealApi()
6468
.build();
6569

6670
// Facilitator logs in
@@ -109,6 +113,7 @@ test.describe('Assisted Facilitation v2 - Facilitator Dashboard', () => {
109113
traceIndex: 0,
110114
})
111115
.inPhase('discovery')
116+
.withRealApi()
112117
.build();
113118

114119
// Facilitator logs in
@@ -144,6 +149,7 @@ test.describe('Assisted Facilitation v2 - Facilitator Dashboard', () => {
144149
.withParticipants(3)
145150
.withTraces(5)
146151
.inPhase('discovery')
152+
.withRealApi()
147153
.build();
148154

149155
const participants = scenario.users.participant;
@@ -200,6 +206,7 @@ test.describe('Assisted Facilitation v2 - Facilitator Dashboard', () => {
200206
traceIndex: 0,
201207
})
202208
.inPhase('discovery')
209+
.withRealApi()
203210
.build();
204211

205212
// Facilitator logs in
@@ -237,6 +244,7 @@ test.describe('Assisted Facilitation v2 - Facilitator Dashboard', () => {
237244
.withParticipants(1)
238245
.withTraces(2)
239246
.inPhase('discovery')
247+
.withRealApi()
240248
.build();
241249

242250
// Facilitator logs in
@@ -269,6 +277,7 @@ test.describe('Assisted Facilitation v2 - Facilitator Dashboard', () => {
269277
.withParticipants(2)
270278
.withTraces(10)
271279
.inPhase('discovery')
280+
.withRealApi()
272281
.build();
273282

274283
// Facilitator logs in
@@ -311,6 +320,7 @@ test.describe('Assisted Facilitation v2 - Facilitator Dashboard', () => {
311320
.withParticipants(1)
312321
.withTraces(3)
313322
.inPhase('discovery')
323+
.withRealApi()
314324
.build();
315325

316326
// Facilitator tries to access participant discovery page

client/tests/e2e/assisted-facilitation-discovery.spec.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@ import { test, expect, Page } from '@playwright/test';
99
import { TestScenario } from '../lib/scenario-builder';
1010
import * as discoveryActions from '../lib/actions/discovery';
1111

12-
test.describe('Assisted Facilitation v2 - Discovery Phase', () => {
12+
test.describe('Assisted Facilitation v2 - Discovery Phase', {
13+
tag: ['@spec:ASSISTED_FACILITATION_SPEC'],
14+
}, () => {
1315
test('participant can submit findings with real-time classification', async ({
1416
page,
1517
browser,
@@ -21,6 +23,7 @@ test.describe('Assisted Facilitation v2 - Discovery Phase', () => {
2123
.withParticipants(1)
2224
.withTraces(3)
2325
.inPhase('discovery')
26+
.withRealApi()
2427
.build();
2528

2629
const participant = scenario.users.participant[0];
@@ -69,6 +72,7 @@ test.describe('Assisted Facilitation v2 - Discovery Phase', () => {
6972
.withParticipants(2)
7073
.withTraces(10)
7174
.inPhase('discovery')
75+
.withRealApi()
7276
.build();
7377

7478
const participant1 = scenario.users.participant[0];
@@ -126,6 +130,7 @@ test.describe('Assisted Facilitation v2 - Discovery Phase', () => {
126130
.withParticipants(3)
127131
.withTraces(5)
128132
.inPhase('discovery')
133+
.withRealApi()
129134
.build();
130135

131136
// Facilitator starts discovery
@@ -170,6 +175,7 @@ test.describe('Assisted Facilitation v2 - Discovery Phase', () => {
170175
.withParticipants(1)
171176
.withTraces(3)
172177
.inPhase('discovery')
178+
.withRealApi()
173179
.build();
174180

175181
const participant = scenario.users.participant[0];
@@ -216,6 +222,7 @@ test.describe('Assisted Facilitation v2 - Discovery Phase', () => {
216222
.withParticipants(1)
217223
.withTraces(3)
218224
.inPhase('discovery')
225+
.withRealApi()
219226
.build();
220227

221228
const participant = scenario.users.participant[0];
@@ -265,6 +272,7 @@ test.describe('Assisted Facilitation v2 - Discovery Phase', () => {
265272
.withParticipants(1)
266273
.withTraces(2)
267274
.inPhase('discovery')
275+
.withRealApi()
268276
.build();
269277

270278
const participant = scenario.users.participant[0];

client/tests/e2e/assisted-facilitation-rubric-promotion.spec.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@
88
import { test, expect } from '@playwright/test';
99
import { TestScenario } from '../lib/scenario-builder';
1010

11-
test.describe('Assisted Facilitation v2 - Draft Rubric Promotion', () => {
11+
test.describe('Assisted Facilitation v2 - Draft Rubric Promotion', {
12+
tag: ['@spec:ASSISTED_FACILITATION_SPEC'],
13+
}, () => {
1214
test('facilitator can promote individual findings to draft rubric', async ({
1315
browser,
1416
}) => {
@@ -31,6 +33,7 @@ test.describe('Assisted Facilitation v2 - Draft Rubric Promotion', () => {
3133
traceIndex: 1,
3234
})
3335
.inPhase('discovery')
36+
.withRealApi()
3437
.build();
3538

3639
// Facilitator logs in
@@ -77,6 +80,7 @@ test.describe('Assisted Facilitation v2 - Draft Rubric Promotion', () => {
7780
traceIndex: 1,
7881
})
7982
.inPhase('discovery')
83+
.withRealApi()
8084
.build();
8185

8286
// Facilitator logs in
@@ -124,6 +128,7 @@ test.describe('Assisted Facilitation v2 - Draft Rubric Promotion', () => {
124128
traceIndex: 1,
125129
})
126130
.inPhase('discovery')
131+
.withRealApi()
127132
.build();
128133

129134
// Facilitator logs in
@@ -186,6 +191,7 @@ test.describe('Assisted Facilitation v2 - Draft Rubric Promotion', () => {
186191
traceIndex: 0,
187192
})
188193
.inPhase('discovery')
194+
.withRealApi()
189195
.build();
190196

191197
// Facilitator logs in
@@ -253,6 +259,7 @@ test.describe('Assisted Facilitation v2 - Draft Rubric Promotion', () => {
253259
traceIndex: 2,
254260
})
255261
.inPhase('discovery')
262+
.withRealApi()
256263
.build();
257264

258265
// First facilitator logs in
@@ -326,6 +333,7 @@ test.describe('Assisted Facilitation v2 - Draft Rubric Promotion', () => {
326333
})
327334
.withDiscoveryComplete()
328335
.inPhase('rubric')
336+
.withRealApi()
329337
.build();
330338

331339
// Facilitator logs in
@@ -380,6 +388,7 @@ test.describe('Assisted Facilitation v2 - Draft Rubric Promotion', () => {
380388
traceIndex: 1,
381389
})
382390
.inPhase('discovery')
391+
.withRealApi()
383392
.build();
384393

385394
// Facilitator logs in

client/tests/e2e/assisted-facilitation.spec.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,9 @@ const syntheticTraces = [
100100
};
101101
}>;
102102

103-
test.describe('Assisted Facilitation Flow', () => {
103+
test.describe('Assisted Facilitation Flow', {
104+
tag: ['@spec:ASSISTED_FACILITATION_SPEC'],
105+
}, () => {
104106
test('discovery questions API returns coverage metadata and stops appropriately', async ({
105107
page,
106108
request,

justfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -517,7 +517,7 @@ e2e mode="headless" workers="1" *args:
517517
# Wait for API + UI to be ready
518518
just e2e-wait-ready "$API_PORT" "$UI_PORT"
519519
520-
# Run tests with the correct base URL
521-
PLAYWRIGHT_BASE_URL="http://127.0.0.1:$UI_PORT" just e2e-test "{{mode}}" "{{workers}}" {{args}}
520+
# Run tests with the correct URLs
521+
E2E_API_URL="http://127.0.0.1:$API_PORT" PLAYWRIGHT_BASE_URL="http://127.0.0.1:$UI_PORT" just e2e-test "{{mode}}" "{{workers}}" {{args}}
522522
523523
cleanup

specs/SPEC_COVERAGE_GUIDE.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ Use these exact spec names (case-sensitive):
4949
| Spec Name | Domain |
5050
|-----------|--------|
5151
| `ANNOTATION_SPEC` | Annotation system |
52+
| `ASSISTED_FACILITATION_SPEC` | Assisted facilitation & discovery |
5253
| `AUTHENTICATION_SPEC` | Auth & sessions |
5354
| `BUILD_AND_DEPLOY_SPEC` | Build & deployment |
5455
| `DATASETS_SPEC` | Trace datasets |

specs/SPEC_COVERAGE_MAP.md

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Spec Test Coverage Map
22

3-
**Generated**: 2026-01-20 12:07:35
3+
**Generated**: 2026-01-20 17:52:18
44

55
This report shows which tests cover each specification.
66
Tests are tagged using framework-specific conventions:
@@ -16,16 +16,17 @@ Tests are tagged using framework-specific conventions:
1616
| Spec | pytest | Playwright | Vitest | Total | Status |
1717
|------|--------|------------|--------|-------|--------|
1818
| [ANNOTATION_SPEC](#annotation-spec) | 4 | 1 | 0 | 5 | ✅ Covered |
19+
| [ASSISTED_FACILITATION_SPEC](#assisted-facilitation-spec) | 0 | 5 | 0 | 5 | ✅ Covered |
1920
| [AUTHENTICATION_SPEC](#authentication-spec) | 8 | 1 | 0 | 9 | ✅ Covered |
2021
| [BUILD_AND_DEPLOY_SPEC](#build-and-deploy-spec) | 1 | 0 | 0 | 1 | 🟡 Partial |
2122
| [DATASETS_SPEC](#datasets-spec) | 2 | 0 | 1 | 3 | ✅ Covered |
2223
| [DESIGN_SYSTEM_SPEC](#design-system-spec) | 0 | 0 | 1 | 1 | 🟡 Partial |
2324
| [DISCOVERY_TRACE_ASSIGNMENT_SPEC](#discovery-trace-assignment-spec) | 3 | 1 | 1 | 5 | ✅ Covered |
2425
| [JUDGE_EVALUATION_SPEC](#judge-evaluation-spec) | 28 | 0 | 1 | 29 | ✅ Covered |
25-
| [RUBRIC_SPEC](#rubric-spec) | 0 | 1 | 1 | 2 | 🟡 Partial |
26+
| [RUBRIC_SPEC](#rubric-spec) | 0 | 0 | 1 | 1 | 🟡 Partial |
2627
| [UI_COMPONENTS_SPEC](#ui-components-spec) | 0 | 0 | 0 | 0 | ❌ Uncovered |
2728

28-
**Coverage**: 8/9 specs (88%)
29+
**Coverage**: 9/10 specs (90%)
2930

3031
---
3132

@@ -42,6 +43,16 @@ Tests are tagged using framework-specific conventions:
4243

4344
- `client/tests/e2e/annotation-last-trace.spec.ts`
4445

46+
## ASSISTED_FACILITATION_SPEC
47+
48+
### Playwright (E2E)
49+
50+
- `client/tests/e2e/assisted-facilitation.spec.ts`
51+
- `client/tests/e2e/assisted-facilitation-rubric-promotion.spec.ts`
52+
- `client/tests/e2e/assisted-facilitation-classification.spec.ts`
53+
- `client/tests/e2e/assisted-facilitation-discovery.spec.ts`
54+
- `client/tests/e2e/assisted-facilitation-dashboard.spec.ts`
55+
4556
## AUTHENTICATION_SPEC
4657

4758
### pytest
@@ -137,10 +148,6 @@ Tests are tagged using framework-specific conventions:
137148

138149
## RUBRIC_SPEC
139150

140-
### Playwright (E2E)
141-
142-
- `client/tests/e2e/rubric-creation.spec.ts`
143-
144151
### Vitest (Unit)
145152

146153
- `client/src/utils/rubricUtils.test.ts`

tools/spec_coverage_analyzer.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
# All known specs (without .md extension)
2727
KNOWN_SPECS = [
2828
"ANNOTATION_SPEC",
29+
"ASSISTED_FACILITATION_SPEC",
2930
"AUTHENTICATION_SPEC",
3031
"BUILD_AND_DEPLOY_SPEC",
3132
"DATASETS_SPEC",

0 commit comments

Comments
 (0)