6 flow validators tested all integration milestone assertions against the live dashboard and API. 5 assertions passed (E2E validation cycle, fix cycle, loop state visuals, validate button, responsive). 7 failed due to 3 systemic issues: (1) assertions panel renders empty despite correct API data, (2) run history TypeError crash (.map on undefined), (3) missing UI components (rollup badge, retry budget, lineage link). Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
111 lines
6.9 KiB
JSON
111 lines
6.9 KiB
JSON
{
|
|
"groupId": "api-round-trip",
|
|
"testedAt": "2026-04-12T14:30:00.000Z",
|
|
"isolation": {
|
|
"dashboardUrl": "http://localhost:4040",
|
|
"missionId": "M-MNVT98HS-I8OG",
|
|
"milestoneId": "MS-MNVT9VEC-70GM",
|
|
"accessMode": "read-only"
|
|
},
|
|
"toolsUsed": ["curl", "agent-browser"],
|
|
"assertions": [
|
|
{
|
|
"id": "VAL-CROSS-003",
|
|
"title": "API round-trips match store state",
|
|
"status": "fail",
|
|
"steps": [
|
|
{
|
|
"action": "GET /api/missions/milestones/MS-MNVT9VEC-70GM/assertions",
|
|
"expected": "200 with 3 assertions ordered by orderIndex",
|
|
"observed": "200 with 3 assertions returned: CA-MNVTGDE4-YEGX (Feature links correctly, pending, orderIndex 0), CA-MNVTGDHD-8ZAJ (Validation passes on success, pending, orderIndex 1), CA-MNVTGDRD-QNBH (Fix feature created on failure, pending, orderIndex 2)"
|
|
},
|
|
{
|
|
"action": "GET /api/missions/features/F-MNVTDH2E-YYZD/validation-runs",
|
|
"expected": "200 with 3 validation runs ordered DESC by startedAt",
|
|
"observed": "200 with 3 runs: VR-TEST-005 (passed, attempt 3), VR-TEST-004 (failed, attempt 2), VR-TEST-003 (failed, attempt 1). Total=3, ordered correctly"
|
|
},
|
|
{
|
|
"action": "GET /api/missions/validation-runs/VR-TEST-003",
|
|
"expected": "200 with run detail including failures",
|
|
"observed": "200 with run detail: status=failed, summary='Initial validation failed', includes 1 failure (VF-TEST-002): assertionId=CA-MNVTGDE4-YEGX, message='Feature link not found', expected='2 linked features', actual='0 linked features'"
|
|
},
|
|
{
|
|
"action": "GET /api/missions/features/F-MNVTDFNW-NXSW/validation-loop",
|
|
"expected": "200 with loop state snapshot for idle feature",
|
|
"observed": "200 with snapshot: loopState=idle, implementationAttemptCount=0, validatorAttemptCount=0, validatorRuns=[], failures=[], lineage=[], retryBudgetRemaining=3"
|
|
},
|
|
{
|
|
"action": "GET /api/missions/milestones/MS-MNVT9VEC-70GM/validation",
|
|
"expected": "200 with milestone validation rollup",
|
|
"observed": "200 with rollup: totalAssertions=3, passedAssertions=0, failedAssertions=0, blockedAssertions=0, pendingAssertions=3, unlinkedAssertions=0, state=ready"
|
|
},
|
|
{
|
|
"action": "Open dashboard, navigate to Integration Test Mission, check assertions panel",
|
|
"expected": "Assertions panel shows 3 assertions matching API data",
|
|
"observed": "Assertions panel shows 'No assertions defined. Add one to define completion criteria.' — MISMATCH with API data"
|
|
},
|
|
{
|
|
"action": "Expand 'Run History Feature' (F-MNVTDH2E-YYZD) run history in dashboard",
|
|
"expected": "Run history shows 3 validation runs matching API response",
|
|
"observed": "Dashboard crashed with TypeError: 'nt.get(...)?.map is not a function' — cannot verify run history display"
|
|
},
|
|
{
|
|
"action": "GET /api/missions/features/F-MNVTDH2E-YYZD/assertions",
|
|
"expected": "200 with linked assertions for the run history feature",
|
|
"observed": "200 with 3 linked assertions (all 3 milestone assertions)"
|
|
},
|
|
{
|
|
"action": "GET /api/missions/features/F-MNVTDFNW-NXSW/assertions",
|
|
"expected": "200 with linked assertions",
|
|
"observed": "200 with 2 linked assertions: CA-MNVTGDE4-YEGX and CA-MNVTGDHD-8ZAJ"
|
|
}
|
|
],
|
|
"evidence": {
|
|
"screenshots": [
|
|
"integration/api-round-trip/01-dashboard-home.png",
|
|
"integration/api-round-trip/02-missions-view.png",
|
|
"integration/api-round-trip/03-mission-expanded.png",
|
|
"integration/api-round-trip/04-scrolled-assertions.png",
|
|
"integration/api-round-trip/05-slice2-expanded.png",
|
|
"integration/api-round-trip/06-run-history-expanded.png",
|
|
"integration/api-round-trip/07-mission-detail-reloaded.png",
|
|
"integration/api-round-trip/08-needs-fix-runs.png"
|
|
],
|
|
"consoleErrors": "TypeError: nt.get(...)?.map is not a function — occurs when expanding any feature's run history. Minified stack trace at index-D73cJS2D.js:1416:94471 (tM component). ErrorBoundary catches and shows 'Something went wrong' with retry button.",
|
|
"network": {
|
|
"GET /api/missions/milestones/MS-MNVT9VEC-70GM/assertions": "200",
|
|
"GET /api/missions/features/F-MNVTDH2E-YYZD/validation-runs": "200",
|
|
"GET /api/missions/validation-runs/VR-TEST-003": "200",
|
|
"GET /api/missions/features/F-MNVTDFNW-NXSW/validation-loop": "200",
|
|
"GET /api/missions/milestones/MS-MNVT9VEC-70GM/validation": "200",
|
|
"GET /api/missions/features/F-MNVTDH2E-YYZD/assertions": "200",
|
|
"GET /api/missions/features/F-MNVTDFNW-NXSW/assertions": "200"
|
|
}
|
|
},
|
|
"issues": "Two critical discrepancies found: (1) Assertions panel shows empty state despite API returning 3 assertions — the dashboard is not rendering assertion data from the store. (2) Expanding any feature's run history causes a React crash (TypeError: nt.get(...)?.map is not a function) — likely a null-safety issue in the run history component where the API returns data in a shape the component doesn't handle. Both issues prevent verifying API-to-dashboard round-trip consistency."
|
|
}
|
|
],
|
|
"frictions": [
|
|
{
|
|
"description": "Dashboard assertions panel shows empty state ('No assertions defined') even though the API endpoint returns 3 assertions for the same milestone. The API-to-store-to-dashboard pipeline is broken for assertions display.",
|
|
"resolved": false,
|
|
"resolution": null,
|
|
"affectedAssertions": ["VAL-CROSS-003"]
|
|
},
|
|
{
|
|
"description": "Expanding feature run history in the dashboard crashes the entire Mission detail view with 'nt.get(...)?.map is not a function'. The ErrorBoundary catches it but the entire page must be reloaded. This blocks verification of validation run display matching API data.",
|
|
"resolved": false,
|
|
"resolution": null,
|
|
"affectedAssertions": ["VAL-CROSS-003"]
|
|
},
|
|
{
|
|
"description": "The networkidle wait event times out on the Fusion dashboard (25s timeout). Had to rely on fixed waits instead.",
|
|
"resolved": true,
|
|
"resolution": "Used agent-browser wait 2000ms instead of wait --load networkidle",
|
|
"affectedAssertions": ["VAL-CROSS-003"]
|
|
}
|
|
],
|
|
"blockers": [],
|
|
"summary": "Tested VAL-CROSS-003: API round-trips match store state. Result: FAIL. All 7 API endpoints return correct, consistent data matching the store state. However, the dashboard has two critical bugs: (1) the assertions panel shows 'No assertions defined' despite the API returning 3 assertions — the data exists in the store but is not rendered, and (2) expanding any feature's run history crashes the React app with TypeError: nt.get(...)?.map is not a function. These prevent verifying the API-to-dashboard round-trip consistency."
|
|
}
|