|
11 | 11 | "reference": "npm.cmd run test", |
12 | 12 | "note": "Vitest suite covers parser, GitHub stats/cache, README/Pages generators, cards, achievements, OAuth, deployment planning, actions, import, and theme IO." |
13 | 13 | }, |
| 14 | + { |
| 15 | + "kind": "log", |
| 16 | + "reference": "npm.cmd run build", |
| 17 | + "note": "Next production build completed and listed all public routes, dashboard routes, GitHub APIs, card APIs, and export APIs." |
| 18 | + }, |
14 | 19 | { |
15 | 20 | "kind": "api-response", |
16 | 21 | "reference": "POST http://127.0.0.1:3000/api/export/readme", |
|
25 | 30 | "kind": "api-response", |
26 | 31 | "reference": "GET http://127.0.0.1:3000/api/github/languages?username=octocat", |
27 | 32 | "note": "Local smoke test returned real GitHub language data, cache metadata, and rate limit metadata." |
| 33 | + }, |
| 34 | + { |
| 35 | + "kind": "api-response", |
| 36 | + "reference": "GET http://127.0.0.1:3000/api/cards/stats?user=octocat&format=json&include=stars,forks&hide_border=true&width=720&height=260&cache_seconds=120", |
| 37 | + "note": "Local smoke test returned card JSON with real GitHub dataset, parameters, embeds, cache metadata, and rate limit metadata." |
| 38 | + }, |
| 39 | + { |
| 40 | + "kind": "api-response", |
| 41 | + "reference": "GET http://127.0.0.1:3000/api/cards/stats?...format=svg", |
| 42 | + "note": "Local smoke test returned svg_status=200 and 1283 bytes." |
| 43 | + }, |
| 44 | + { |
| 45 | + "kind": "api-response", |
| 46 | + "reference": "GET http://127.0.0.1:3000/api/cards/stats?...format=png", |
| 47 | + "note": "Local smoke test returned png_status=200 and 10305 bytes." |
| 48 | + }, |
| 49 | + { |
| 50 | + "kind": "api-response", |
| 51 | + "reference": "GET http://127.0.0.1:3000/pricing", |
| 52 | + "note": "Local smoke test returned pricing_status=200." |
28 | 53 | } |
29 | 54 | ], |
30 | 55 | "items": { |
|
73 | 98 | { "kind": "test", "reference": "packages/github/src/normalize.test.ts", "note": "followers, following, public repos, and public gists are normalized." } |
74 | 99 | ] |
75 | 100 | }, |
| 101 | + "02-008": { |
| 102 | + "status": "通过", |
| 103 | + "requirementRefs": ["4.1.2"], |
| 104 | + "evidence": [ |
| 105 | + { "kind": "test", "reference": "packages/github/src/normalize.test.ts", "note": "Account age days and years are calculated from created_at." }, |
| 106 | + { "kind": "api-response", "reference": "GET http://127.0.0.1:3000/api/cards/stats?format=json", "note": "Local card JSON smoke response included accountAgeDays and accountAgeYears for octocat." } |
| 107 | + ] |
| 108 | + }, |
76 | 109 | "02-009": { |
77 | 110 | "status": "待验收", |
78 | 111 | "requirementRefs": ["4.1.3"], |
|
210 | 243 | ] |
211 | 244 | }, |
212 | 245 | "06-001": { |
213 | | - "status": "待验收", |
| 246 | + "status": "通过", |
| 247 | + "requirementRefs": ["4.5"], |
| 248 | + "evidence": [ |
| 249 | + { "kind": "test", "reference": "packages/cards/src/render.test.ts", "note": "Card catalog renders every card type, including Profile Overview Card." } |
| 250 | + ] |
| 251 | + }, |
| 252 | + "06-002": { |
| 253 | + "status": "通过", |
| 254 | + "requirementRefs": ["4.5"], |
| 255 | + "evidence": [ |
| 256 | + { "kind": "test", "reference": "packages/cards/src/render.test.ts", "note": "GitHub Stats Card renders and supports the stats alias." }, |
| 257 | + { "kind": "api-response", "reference": "GET http://127.0.0.1:3000/api/cards/stats?format=json", "note": "Local smoke test returned GitHub Stats Card JSON." } |
| 258 | + ] |
| 259 | + }, |
| 260 | + "06-003": { |
| 261 | + "status": "通过", |
| 262 | + "requirementRefs": ["4.5"], |
| 263 | + "evidence": [ |
| 264 | + { "kind": "test", "reference": "packages/cards/src/render.test.ts", "note": "GitHub Streak Card renders and supports the streak alias." } |
| 265 | + ] |
| 266 | + }, |
| 267 | + "06-004": { |
| 268 | + "status": "通过", |
| 269 | + "requirementRefs": ["4.5"], |
| 270 | + "evidence": [ |
| 271 | + { "kind": "test", "reference": "packages/cards/src/render.test.ts", "note": "Contribution Calendar Card renders from the catalog." } |
| 272 | + ] |
| 273 | + }, |
| 274 | + "06-005": { |
| 275 | + "status": "通过", |
| 276 | + "requirementRefs": ["4.5"], |
| 277 | + "evidence": [ |
| 278 | + { "kind": "test", "reference": "packages/cards/src/render.test.ts", "note": "Top Languages Card renders and supports the languages alias." } |
| 279 | + ] |
| 280 | + }, |
| 281 | + "06-006": { |
| 282 | + "status": "通过", |
| 283 | + "requirementRefs": ["4.5"], |
| 284 | + "evidence": [ |
| 285 | + { "kind": "test", "reference": "packages/cards/src/render.test.ts", "note": "Repository Card renders and supports the repo alias." } |
| 286 | + ] |
| 287 | + }, |
| 288 | + "06-007": { |
| 289 | + "status": "通过", |
| 290 | + "requirementRefs": ["4.5"], |
| 291 | + "evidence": [ |
| 292 | + { "kind": "test", "reference": "packages/cards/src/render.test.ts", "note": "Star Growth Card renders from the catalog." } |
| 293 | + ] |
| 294 | + }, |
| 295 | + "06-008": { |
| 296 | + "status": "通过", |
| 297 | + "requirementRefs": ["4.5"], |
| 298 | + "evidence": [ |
| 299 | + { "kind": "test", "reference": "packages/cards/src/render.test.ts", "note": "Fork Growth Card renders from the catalog." } |
| 300 | + ] |
| 301 | + }, |
| 302 | + "06-009": { |
| 303 | + "status": "通过", |
| 304 | + "requirementRefs": ["4.5"], |
| 305 | + "evidence": [ |
| 306 | + { "kind": "test", "reference": "packages/cards/src/render.test.ts", "note": "PR / Issue Card renders from the catalog." } |
| 307 | + ] |
| 308 | + }, |
| 309 | + "06-010": { |
| 310 | + "status": "通过", |
| 311 | + "requirementRefs": ["4.5"], |
| 312 | + "evidence": [ |
| 313 | + { "kind": "test", "reference": "packages/cards/src/render.test.ts", "note": "Achievement Card renders and supports the achievements alias." } |
| 314 | + ] |
| 315 | + }, |
| 316 | + "06-011": { |
| 317 | + "status": "通过", |
| 318 | + "requirementRefs": ["4.5"], |
| 319 | + "evidence": [ |
| 320 | + { "kind": "test", "reference": "packages/cards/src/render.test.ts", "note": "Trophy Card renders from the catalog." } |
| 321 | + ] |
| 322 | + }, |
| 323 | + "06-012": { |
| 324 | + "status": "通过", |
| 325 | + "requirementRefs": ["4.5"], |
| 326 | + "evidence": [ |
| 327 | + { "kind": "test", "reference": "packages/cards/src/render.test.ts", "note": "Tech Stack Card renders from the catalog." } |
| 328 | + ] |
| 329 | + }, |
| 330 | + "06-013": { |
| 331 | + "status": "通过", |
| 332 | + "requirementRefs": ["4.5"], |
| 333 | + "evidence": [ |
| 334 | + { "kind": "test", "reference": "packages/cards/src/render.test.ts", "note": "Activity Graph Card renders from the catalog." } |
| 335 | + ] |
| 336 | + }, |
| 337 | + "06-014": { |
| 338 | + "status": "通过", |
| 339 | + "requirementRefs": ["4.5"], |
| 340 | + "evidence": [ |
| 341 | + { "kind": "test", "reference": "packages/cards/src/render.test.ts", "note": "Repo Ranking Card renders from the catalog." } |
| 342 | + ] |
| 343 | + }, |
| 344 | + "06-015": { |
| 345 | + "status": "通过", |
| 346 | + "requirementRefs": ["4.5"], |
| 347 | + "evidence": [ |
| 348 | + { "kind": "test", "reference": "packages/cards/src/render.test.ts", "note": "Followers Card renders from the catalog." } |
| 349 | + ] |
| 350 | + }, |
| 351 | + "06-016": { |
| 352 | + "status": "通过", |
| 353 | + "requirementRefs": ["4.5"], |
| 354 | + "evidence": [ |
| 355 | + { "kind": "test", "reference": "packages/cards/src/render.test.ts", "note": "Account Age Card renders from the catalog and profile data includes account age." } |
| 356 | + ] |
| 357 | + }, |
| 358 | + "06-017": { |
| 359 | + "status": "通过", |
214 | 360 | "requirementRefs": ["4.5"], |
215 | 361 | "evidence": [ |
216 | | - { "kind": "api-response", "reference": "apps/web/app/api/cards/[type]/route.ts", "note": "Dynamic card API route handles SVG, PNG, and JSON card outputs." } |
| 362 | + { "kind": "test", "reference": "packages/cards/src/render.test.ts", "note": "Open Source Impact Card renders from the catalog." } |
| 363 | + ] |
| 364 | + }, |
| 365 | + "06-018": { |
| 366 | + "status": "通过", |
| 367 | + "requirementRefs": ["4.5"], |
| 368 | + "evidence": [ |
| 369 | + { "kind": "test", "reference": "packages/cards/src/render.test.ts", "note": "Year in Review Card renders from the catalog." } |
| 370 | + ] |
| 371 | + }, |
| 372 | + "06-019": { |
| 373 | + "status": "通过", |
| 374 | + "requirementRefs": ["4.5"], |
| 375 | + "evidence": [ |
| 376 | + { "kind": "test", "reference": "packages/cards/src/render.test.ts", "note": "Monthly Activity Card renders from the catalog." } |
| 377 | + ] |
| 378 | + }, |
| 379 | + "06-020": { |
| 380 | + "status": "通过", |
| 381 | + "requirementRefs": ["4.5"], |
| 382 | + "evidence": [ |
| 383 | + { "kind": "test", "reference": "packages/cards/src/render.test.ts", "note": "Custom Composite Card renders from the catalog." } |
217 | 384 | ] |
218 | 385 | }, |
219 | 386 | "06-021": { |
220 | | - "status": "待验收", |
| 387 | + "status": "通过", |
221 | 388 | "requirementRefs": ["4.5.2"], |
222 | 389 | "evidence": [ |
223 | | - { "kind": "file", "reference": "packages/cards/src/index.ts", "note": "Card request model includes user, theme, locale, format, repo, and period; remaining visual query parameters still need end-to-end UI/API verification." } |
| 390 | + { "kind": "test", "reference": "packages/cards/src/render.test.ts", "note": "Card rendering supports width, height, hide_border, bg_color, title_color, include, and icons." }, |
| 391 | + { "kind": "api-response", "reference": "GET http://127.0.0.1:3000/api/cards/stats?format=json&include=stars,forks&hide_border=true&width=720&height=260&cache_seconds=120", "note": "Local smoke test verified parameter parsing and JSON echo for card API." } |
| 392 | + ] |
| 393 | + }, |
| 394 | + "06-022": { |
| 395 | + "status": "通过", |
| 396 | + "requirementRefs": ["4.5.3"], |
| 397 | + "evidence": [ |
| 398 | + { "kind": "api-response", "reference": "GET http://127.0.0.1:3000/api/cards/stats?format=json", "note": "JSON output returned 200." }, |
| 399 | + { "kind": "api-response", "reference": "GET http://127.0.0.1:3000/api/cards/stats?format=svg", "note": "SVG output returned 200 and 1283 bytes." }, |
| 400 | + { "kind": "api-response", "reference": "GET http://127.0.0.1:3000/api/cards/stats?format=png", "note": "PNG output returned 200 and 10305 bytes." } |
| 401 | + ] |
| 402 | + }, |
| 403 | + "06-023": { |
| 404 | + "status": "通过", |
| 405 | + "requirementRefs": ["4.5.4"], |
| 406 | + "evidence": [ |
| 407 | + { "kind": "test", "reference": "packages/cards/src/embeds.test.ts", "note": "Markdown image link, HTML img, iframe, and URL variants are generated." }, |
| 408 | + { "kind": "api-response", "reference": "GET http://127.0.0.1:3000/api/cards/stats?format=json", "note": "JSON smoke response includes embeds for markdown and HTML." } |
224 | 409 | ] |
225 | 410 | }, |
226 | 411 | "06-025": { |
|
310 | 495 | { "kind": "test", "reference": "packages/github/src/stats.test.ts", "note": "Public dataset construction exercises the data model." } |
311 | 496 | ] |
312 | 497 | }, |
| 498 | + "14-002": { |
| 499 | + "status": "通过", |
| 500 | + "requirementRefs": ["10.1"], |
| 501 | + "evidence": [ |
| 502 | + { "kind": "file", "reference": "apps/web/app/pricing/page.tsx", "note": "Pricing public page has been added." }, |
| 503 | + { "kind": "api-response", "reference": "GET http://127.0.0.1:3000/pricing", "note": "Local smoke test returned pricing_status=200." }, |
| 504 | + { "kind": "log", "reference": "npm.cmd run build", "note": "Build output includes /, /generate, /templates, /cards, /achievements, /docs, /examples, /pricing, /login, /privacy, and /terms." } |
| 505 | + ] |
| 506 | + }, |
313 | 507 | "14-004": { |
314 | 508 | "status": "待验收", |
315 | 509 | "requirementRefs": ["10.3"], |
|
0 commit comments