Skip to content

Commit 18e143a

Browse files
committed
chore: add test fixture-codebase to version control
Nested .git directory prevented tracking. Removed it so CI runners have access to the fixture files needed by tests.
1 parent d7bdc59 commit 18e143a

22 files changed

Lines changed: 777 additions & 0 deletions
Lines changed: 198 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,198 @@
1+
{
2+
"_description": "Ground truth: every expected cross-file call edge in the fixture codebase. Intra-file calls excluded. Confidence: type-resolved = checker resolved the symbol, text-inferred = regex fallback.",
3+
"edges": [
4+
{
5+
"caller": { "file": "src/users/user-repository.ts", "symbol": "getUserById" },
6+
"callee": { "file": "src/utils/logger.ts", "symbol": "log" },
7+
"confidence": "type-resolved"
8+
},
9+
{
10+
"caller": { "file": "src/users/user-repository.ts", "symbol": "getAllUsers" },
11+
"callee": { "file": "src/utils/logger.ts", "symbol": "log" },
12+
"confidence": "type-resolved"
13+
},
14+
{
15+
"caller": { "file": "src/users/user-repository.ts", "symbol": "createUser" },
16+
"callee": { "file": "src/utils/logger.ts", "symbol": "log" },
17+
"confidence": "type-resolved"
18+
},
19+
{
20+
"caller": { "file": "src/users/user-repository.ts", "symbol": "deleteUser" },
21+
"callee": { "file": "src/utils/logger.ts", "symbol": "log" },
22+
"confidence": "type-resolved"
23+
},
24+
{
25+
"caller": { "file": "src/users/user-service.ts", "symbol": "UserService.getUserById" },
26+
"callee": { "file": "src/utils/logger.ts", "symbol": "log" },
27+
"confidence": "type-resolved"
28+
},
29+
{
30+
"caller": { "file": "src/users/user-service.ts", "symbol": "UserService.getUserById" },
31+
"callee": { "file": "src/users/user-repository.ts", "symbol": "getUserById" },
32+
"confidence": "type-resolved"
33+
},
34+
{
35+
"caller": { "file": "src/users/user-service.ts", "symbol": "UserService.createUser" },
36+
"callee": { "file": "src/utils/logger.ts", "symbol": "log" },
37+
"confidence": "type-resolved"
38+
},
39+
{
40+
"caller": { "file": "src/users/user-service.ts", "symbol": "UserService.createUser" },
41+
"callee": { "file": "src/utils/validators.ts", "symbol": "validateEmail" },
42+
"confidence": "type-resolved"
43+
},
44+
{
45+
"caller": { "file": "src/users/user-service.ts", "symbol": "UserService.createUser" },
46+
"callee": { "file": "src/users/user-repository.ts", "symbol": "createUser" },
47+
"confidence": "type-resolved"
48+
},
49+
{
50+
"caller": { "file": "src/users/user-service.ts", "symbol": "UserService.listUsers" },
51+
"callee": { "file": "src/utils/logger.ts", "symbol": "log" },
52+
"confidence": "type-resolved"
53+
},
54+
{
55+
"caller": { "file": "src/users/user-service.ts", "symbol": "UserService.listUsers" },
56+
"callee": { "file": "src/users/user-repository.ts", "symbol": "getAllUsers" },
57+
"confidence": "type-resolved"
58+
},
59+
{
60+
"caller": { "file": "src/users/user-service.ts", "symbol": "UserService.listUsers" },
61+
"callee": { "file": "src/utils/validators.ts", "symbol": "validateNotEmpty" },
62+
"confidence": "text-inferred",
63+
"_note": "Passed as callback to .filter() — checker may not resolve function reference in callback position"
64+
},
65+
{
66+
"caller": { "file": "src/auth/auth-service.ts", "symbol": "AuthService.login" },
67+
"callee": { "file": "src/utils/logger.ts", "symbol": "log" },
68+
"confidence": "type-resolved"
69+
},
70+
{
71+
"caller": { "file": "src/auth/auth-service.ts", "symbol": "AuthService.login" },
72+
"callee": { "file": "src/utils/validators.ts", "symbol": "validateNotEmpty" },
73+
"confidence": "type-resolved"
74+
},
75+
{
76+
"caller": { "file": "src/auth/auth-service.ts", "symbol": "AuthService.login" },
77+
"callee": { "file": "src/users/user-service.ts", "symbol": "UserService.listUsers" },
78+
"confidence": "type-resolved"
79+
},
80+
{
81+
"caller": { "file": "src/auth/auth-service.ts", "symbol": "AuthService.login" },
82+
"callee": { "file": "src/utils/logger.ts", "symbol": "logError" },
83+
"confidence": "type-resolved"
84+
},
85+
{
86+
"caller": { "file": "src/auth/auth-service.ts", "symbol": "AuthService.validate" },
87+
"callee": { "file": "src/utils/logger.ts", "symbol": "log" },
88+
"confidence": "type-resolved"
89+
},
90+
{
91+
"caller": { "file": "src/auth/auth-service.ts", "symbol": "AuthService.validate" },
92+
"callee": { "file": "src/users/user-service.ts", "symbol": "UserService.getUserById" },
93+
"confidence": "type-resolved"
94+
},
95+
{
96+
"caller": { "file": "src/auth/auth-service.ts", "symbol": "AuthService.logout" },
97+
"callee": { "file": "src/utils/logger.ts", "symbol": "log" },
98+
"confidence": "type-resolved"
99+
},
100+
{
101+
"caller": { "file": "src/auth/auth-middleware.ts", "symbol": "authenticate" },
102+
"callee": { "file": "src/utils/logger.ts", "symbol": "log" },
103+
"confidence": "type-resolved"
104+
},
105+
{
106+
"caller": { "file": "src/auth/auth-middleware.ts", "symbol": "authenticate" },
107+
"callee": { "file": "src/utils/logger.ts", "symbol": "logError" },
108+
"confidence": "type-resolved"
109+
},
110+
{
111+
"caller": { "file": "src/auth/auth-middleware.ts", "symbol": "authenticate" },
112+
"callee": { "file": "src/auth/auth-service.ts", "symbol": "AuthService.validate" },
113+
"confidence": "type-resolved"
114+
},
115+
{
116+
"caller": { "file": "src/auth/auth-middleware.ts", "symbol": "requireAuth" },
117+
"callee": { "file": "src/utils/logger.ts", "symbol": "log" },
118+
"confidence": "type-resolved"
119+
},
120+
{
121+
"caller": { "file": "src/api/routes.ts", "symbol": "handleLogin" },
122+
"callee": { "file": "src/utils/logger.ts", "symbol": "log" },
123+
"confidence": "type-resolved"
124+
},
125+
{
126+
"caller": { "file": "src/api/routes.ts", "symbol": "handleLogin" },
127+
"callee": { "file": "src/auth/auth-service.ts", "symbol": "AuthService.login" },
128+
"confidence": "type-resolved"
129+
},
130+
{
131+
"caller": { "file": "src/api/routes.ts", "symbol": "handleGetUsers" },
132+
"callee": { "file": "src/utils/logger.ts", "symbol": "log" },
133+
"confidence": "type-resolved"
134+
},
135+
{
136+
"caller": { "file": "src/api/routes.ts", "symbol": "handleGetUsers" },
137+
"callee": { "file": "src/auth/auth-middleware.ts", "symbol": "authenticate" },
138+
"confidence": "type-resolved"
139+
},
140+
{
141+
"caller": { "file": "src/api/routes.ts", "symbol": "handleGetUsers" },
142+
"callee": { "file": "src/users/user-service.ts", "symbol": "UserService.listUsers" },
143+
"confidence": "type-resolved"
144+
},
145+
{
146+
"caller": { "file": "src/api/routes.ts", "symbol": "handleGetUser" },
147+
"callee": { "file": "src/utils/logger.ts", "symbol": "log" },
148+
"confidence": "type-resolved"
149+
},
150+
{
151+
"caller": { "file": "src/api/routes.ts", "symbol": "handleGetUser" },
152+
"callee": { "file": "src/auth/auth-middleware.ts", "symbol": "authenticate" },
153+
"confidence": "type-resolved"
154+
},
155+
{
156+
"caller": { "file": "src/api/routes.ts", "symbol": "handleGetUser" },
157+
"callee": { "file": "src/users/user-service.ts", "symbol": "UserService.getUserById" },
158+
"confidence": "type-resolved"
159+
},
160+
{
161+
"caller": { "file": "src/api/middleware.ts", "symbol": "withAuth" },
162+
"callee": { "file": "src/utils/logger.ts", "symbol": "log" },
163+
"confidence": "type-resolved"
164+
},
165+
{
166+
"caller": { "file": "src/api/middleware.ts", "symbol": "withAuth" },
167+
"callee": { "file": "src/auth/auth-middleware.ts", "symbol": "authenticate" },
168+
"confidence": "type-resolved"
169+
},
170+
{
171+
"caller": { "file": "src/api/middleware.ts", "symbol": "withAuth" },
172+
"callee": { "file": "src/auth/auth-middleware.ts", "symbol": "requireAuth" },
173+
"confidence": "type-resolved"
174+
},
175+
{
176+
"caller": { "file": "src/api/middleware.ts", "symbol": "withLogging" },
177+
"callee": { "file": "src/utils/logger.ts", "symbol": "log" },
178+
"confidence": "type-resolved"
179+
}
180+
],
181+
"stats": {
182+
"totalCallEdges": 35,
183+
"byConfidence": {
184+
"type-resolved": 34,
185+
"text-inferred": 1
186+
},
187+
"highFanIn": [
188+
{ "symbol": "log", "file": "src/utils/logger.ts", "fanIn": 16 },
189+
{ "symbol": "logError", "file": "src/utils/logger.ts", "fanIn": 2 },
190+
{ "symbol": "authenticate", "file": "src/auth/auth-middleware.ts", "fanIn": 3 },
191+
{ "symbol": "validateNotEmpty", "file": "src/utils/validators.ts", "fanIn": 2 }
192+
],
193+
"entryPoints": [
194+
"src/api/routes.ts",
195+
"src/api/middleware.ts"
196+
]
197+
}
198+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
{
2+
"_description": "Ground truth: every expected file-to-file import edge in the fixture codebase",
3+
"edges": [
4+
{ "source": "src/users/user-repository.ts", "target": "src/users/user-types.ts", "symbols": ["User", "CreateUserInput"], "isTypeOnly": true },
5+
{ "source": "src/users/user-repository.ts", "target": "src/utils/logger.ts", "symbols": ["log"], "isTypeOnly": false },
6+
{ "source": "src/users/user-service.ts", "target": "src/users/user-types.ts", "symbols": ["User", "CreateUserInput"], "isTypeOnly": true },
7+
{ "source": "src/users/user-service.ts", "target": "src/users/user-repository.ts", "symbols": ["getUserById", "createUser", "getAllUsers"], "isTypeOnly": false },
8+
{ "source": "src/users/user-service.ts", "target": "src/utils/logger.ts", "symbols": ["log"], "isTypeOnly": false },
9+
{ "source": "src/users/user-service.ts", "target": "src/utils/validators.ts", "symbols": ["validateEmail", "validateNotEmpty"], "isTypeOnly": false },
10+
{ "source": "src/users/index.ts", "target": "src/users/user-service.ts", "symbols": ["UserService"], "isTypeOnly": false },
11+
{ "source": "src/users/index.ts", "target": "src/users/user-repository.ts", "symbols": ["getUserById", "createUser", "getAllUsers", "deleteUser"], "isTypeOnly": false },
12+
{ "source": "src/users/index.ts", "target": "src/users/user-types.ts", "symbols": ["User", "UserRole", "CreateUserInput"], "isTypeOnly": true },
13+
{ "source": "src/auth/auth-service.ts", "target": "src/users/user-service.ts", "symbols": ["UserService"], "isTypeOnly": false },
14+
{ "source": "src/auth/auth-service.ts", "target": "src/utils/logger.ts", "symbols": ["log", "logError"], "isTypeOnly": false },
15+
{ "source": "src/auth/auth-service.ts", "target": "src/utils/validators.ts", "symbols": ["validateNotEmpty"], "isTypeOnly": false },
16+
{ "source": "src/auth/auth-service.ts", "target": "src/users/user-types.ts", "symbols": ["User"], "isTypeOnly": true },
17+
{ "source": "src/auth/auth-middleware.ts", "target": "src/auth/auth-service.ts", "symbols": ["AuthService"], "isTypeOnly": false },
18+
{ "source": "src/auth/auth-middleware.ts", "target": "src/utils/logger.ts", "symbols": ["log", "logError"], "isTypeOnly": false },
19+
{ "source": "src/auth/auth-middleware.ts", "target": "src/users/user-types.ts", "symbols": ["User"], "isTypeOnly": true },
20+
{ "source": "src/auth/index.ts", "target": "src/auth/auth-service.ts", "symbols": ["AuthService", "AuthResult", "Session"], "isTypeOnly": false },
21+
{ "source": "src/auth/index.ts", "target": "src/auth/auth-middleware.ts", "symbols": ["authenticate", "requireAuth", "RequestContext"], "isTypeOnly": false },
22+
{ "source": "src/api/routes.ts", "target": "src/auth/auth-service.ts", "symbols": ["AuthService"], "isTypeOnly": false },
23+
{ "source": "src/api/routes.ts", "target": "src/users/user-service.ts", "symbols": ["UserService"], "isTypeOnly": false },
24+
{ "source": "src/api/routes.ts", "target": "src/auth/auth-middleware.ts", "symbols": ["authenticate", "RequestContext"], "isTypeOnly": false },
25+
{ "source": "src/api/routes.ts", "target": "src/utils/logger.ts", "symbols": ["log"], "isTypeOnly": false },
26+
{ "source": "src/api/middleware.ts", "target": "src/auth/auth-middleware.ts", "symbols": ["authenticate", "requireAuth", "RequestContext"], "isTypeOnly": false },
27+
{ "source": "src/api/middleware.ts", "target": "src/utils/logger.ts", "symbols": ["log"], "isTypeOnly": false },
28+
{ "source": "src/index.ts", "target": "src/auth/index.ts", "symbols": ["AuthService", "AuthResult", "Session", "RequestContext"], "isTypeOnly": false },
29+
{ "source": "src/index.ts", "target": "src/users/index.ts", "symbols": ["UserService", "User", "UserRole", "CreateUserInput"], "isTypeOnly": false },
30+
{ "source": "src/index.ts", "target": "src/api/routes.ts", "symbols": ["handleLogin", "handleGetUsers", "handleGetUser"], "isTypeOnly": false },
31+
{ "source": "src/index.ts", "target": "src/utils/logger.ts", "symbols": ["log", "logError", "setLogLevel"], "isTypeOnly": false },
32+
{ "source": "src/index.ts", "target": "src/config/settings.ts", "symbols": ["APP_NAME", "MAX_LOGIN_ATTEMPTS"], "isTypeOnly": false },
33+
{ "source": "src/index.ts", "target": "src/config/constants.ts", "symbols": ["API_VERSION", "MAX_PAGE_SIZE", "DEFAULT_PAGINATION", "PaginationOptions", "SortOrder"], "isTypeOnly": false },
34+
{ "source": "src/__tests__/auth-service.test.ts", "target": "src/auth/auth-service.ts", "symbols": ["AuthService"], "isTypeOnly": false }
35+
],
36+
"stats": {
37+
"totalEdges": 31,
38+
"totalFiles": 16
39+
}
40+
}
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
{
2+
"_description": "Ground truth: expected execution flows traced from entry points through call graph. Each process starts from a file with no inbound call edges (entry point) and follows the call chain.",
3+
"processes": [
4+
{
5+
"name": "handleLogin",
6+
"entryPoint": { "file": "src/api/routes.ts", "symbol": "handleLogin" },
7+
"steps": [
8+
{ "step": 0, "file": "src/api/routes.ts", "symbol": "handleLogin" },
9+
{ "step": 1, "file": "src/utils/logger.ts", "symbol": "log" },
10+
{ "step": 1, "file": "src/auth/auth-service.ts", "symbol": "AuthService.login" },
11+
{ "step": 2, "file": "src/utils/validators.ts", "symbol": "validateNotEmpty" },
12+
{ "step": 2, "file": "src/users/user-service.ts", "symbol": "UserService.listUsers" },
13+
{ "step": 2, "file": "src/utils/logger.ts", "symbol": "logError" },
14+
{ "step": 3, "file": "src/users/user-repository.ts", "symbol": "getAllUsers" }
15+
],
16+
"depth": 3,
17+
"modulesTouched": ["api", "auth", "users", "utils"]
18+
},
19+
{
20+
"name": "handleGetUsers",
21+
"entryPoint": { "file": "src/api/routes.ts", "symbol": "handleGetUsers" },
22+
"steps": [
23+
{ "step": 0, "file": "src/api/routes.ts", "symbol": "handleGetUsers" },
24+
{ "step": 1, "file": "src/utils/logger.ts", "symbol": "log" },
25+
{ "step": 1, "file": "src/auth/auth-middleware.ts", "symbol": "authenticate" },
26+
{ "step": 1, "file": "src/users/user-service.ts", "symbol": "UserService.listUsers" },
27+
{ "step": 2, "file": "src/auth/auth-service.ts", "symbol": "AuthService.validate" },
28+
{ "step": 2, "file": "src/utils/logger.ts", "symbol": "logError" },
29+
{ "step": 2, "file": "src/users/user-repository.ts", "symbol": "getAllUsers" },
30+
{ "step": 3, "file": "src/users/user-service.ts", "symbol": "UserService.getUserById" },
31+
{ "step": 4, "file": "src/users/user-repository.ts", "symbol": "getUserById" }
32+
],
33+
"depth": 4,
34+
"modulesTouched": ["api", "auth", "users", "utils"]
35+
},
36+
{
37+
"name": "handleGetUser",
38+
"entryPoint": { "file": "src/api/routes.ts", "symbol": "handleGetUser" },
39+
"steps": [
40+
{ "step": 0, "file": "src/api/routes.ts", "symbol": "handleGetUser" },
41+
{ "step": 1, "file": "src/utils/logger.ts", "symbol": "log" },
42+
{ "step": 1, "file": "src/auth/auth-middleware.ts", "symbol": "authenticate" },
43+
{ "step": 1, "file": "src/users/user-service.ts", "symbol": "UserService.getUserById" },
44+
{ "step": 2, "file": "src/auth/auth-service.ts", "symbol": "AuthService.validate" },
45+
{ "step": 2, "file": "src/users/user-repository.ts", "symbol": "getUserById" }
46+
],
47+
"depth": 2,
48+
"modulesTouched": ["api", "auth", "users", "utils"]
49+
},
50+
{
51+
"name": "withAuth",
52+
"entryPoint": { "file": "src/api/middleware.ts", "symbol": "withAuth" },
53+
"steps": [
54+
{ "step": 0, "file": "src/api/middleware.ts", "symbol": "withAuth" },
55+
{ "step": 1, "file": "src/utils/logger.ts", "symbol": "log" },
56+
{ "step": 1, "file": "src/auth/auth-middleware.ts", "symbol": "authenticate" },
57+
{ "step": 1, "file": "src/auth/auth-middleware.ts", "symbol": "requireAuth" },
58+
{ "step": 2, "file": "src/auth/auth-service.ts", "symbol": "AuthService.validate" },
59+
{ "step": 3, "file": "src/users/user-service.ts", "symbol": "UserService.getUserById" },
60+
{ "step": 4, "file": "src/users/user-repository.ts", "symbol": "getUserById" }
61+
],
62+
"depth": 4,
63+
"modulesTouched": ["api", "auth", "users", "utils"]
64+
},
65+
{
66+
"name": "withLogging",
67+
"entryPoint": { "file": "src/api/middleware.ts", "symbol": "withLogging" },
68+
"steps": [
69+
{ "step": 0, "file": "src/api/middleware.ts", "symbol": "withLogging" },
70+
{ "step": 1, "file": "src/utils/logger.ts", "symbol": "log" }
71+
],
72+
"depth": 1,
73+
"modulesTouched": ["api", "utils"]
74+
}
75+
],
76+
"stats": {
77+
"totalProcesses": 5,
78+
"entryPoints": [
79+
{ "file": "src/api/routes.ts", "processes": 3 },
80+
{ "file": "src/api/middleware.ts", "processes": 2 }
81+
],
82+
"maxDepth": 4,
83+
"averageDepth": 2.8
84+
}
85+
}

0 commit comments

Comments
 (0)