Sprint 2 requirements and rubric traceability¶
| Document information | Details |
|---|---|
| Project | Sport Analytics Tool |
| Milestone | Sprint 2 |
| Related issue | #420 |
| Purpose | Map the Intermediate Sport Analytics requirements and every Sprint 2 rubric criterion to auditable repository evidence |
| Evidence cut-off | 15 September 2026; evidence current through #417 P05/P06 formal submitter testing and #540 season-scale publication acceptance |
| Close-out owner | #298 reviews this record before Sprint 2 milestone tagging |
| Status | Traceability is current through formal Sprint 2 testing and season-scale acceptance; the team retrospective is recorded, while final stakeholder close-out and milestone tagging remain under #298 |
1. Purpose and evidence policy¶
This record gives a marker one place to verify the Sprint 2 requirement and rubric evidence without reconstructing the project history from individual issues, Pull Requests and commits.
For each Intermediate requirement it records:
- implementation status;
- the issue and representative Pull Request/commit;
- relevant automated or integrated verification;
- the main documentation/evidence source; and
- a known limitation or remaining close-out action where one exists.
For the Sprint 2 rubric it maps each criterion to the repository evidence that supports it. This page is an evidence index, not a replacement for the linked source records. Gitea remains authoritative for current issue and Pull Request state.
The statuses deliberately distinguish implementation from final deployed acceptance. A feature is not marked fully verified merely because code and tests exist when the representative deployed acceptance record still contains an unresolved failure.
2. Status definitions¶
| Status | Meaning |
|---|---|
| Implemented | The requirement is implemented and has representative automated/integrated evidence. |
| Implemented with follow-up fixes | The requirement is implemented, and defects found during Sprint 2 were separately tracked and repaired. |
| Verification pending | The implementation and regression coverage exist, but a required representative deployed retest is still outstanding. |
| Partial | A meaningful part is implemented, but a material requirement or evidence gate remains incomplete. |
| Carry-over | Work is intentionally not claimed as complete for Sprint 2 and remains for later close-out. |
3. Intermediate Sport Analytics requirements¶
The Intermediate tier in the project brief requires the Basic platform to grow into a staged, reviewed, resumable and idempotent batch pipeline; add broader and selectively recomputed aggregates; prove correctness and representative-scale performance; harden the API with versioning, consumer controls and caching; and publish reproducible versioned dataset releases.
| Intermediate requirement | Status | Issue(s) | Representative PR / commit | Automated or integrated verification | Documentation / evidence | Known limitation or remaining work |
|---|---|---|---|---|---|---|
| Stage whole seasons/back catalogues before publication | Implemented with follow-up fixes | #277, #357, #358, #359, #360, #361 | PR #381 / 1828f2c; PR #431 / 3f54476 |
apps/backend/tests/api/batches.test.ts; apps/backend/tests/database/batch.repository.database.test.ts; apps/frontend/src/features/submissions/BatchUploadPage.test.tsx; tests/e2e/submissions.spec.ts |
docs/api/season-upload-contract.md; docs/data/batch-submission-packages.md; docs/architecture/batch-ingestion-pipeline.md |
Season-scale acceptance exposed review/usability defects that were split into follow-up issues rather than hidden inside the staging work. |
| Process staged batches asynchronously | Implemented with follow-up fixes | #278, #365, #463, #524, #540 | PR #399 / f490227; PR #464; worker auto-deploy follow-up #524; PR #549 / #556 publication follow-ups |
Worker/service tests; apps/worker/tests/batch-publication-job.test.ts; #463 live acceptance; #540 recovery and season-scale deployed acceptance |
docs/deployment/azure-worker.md; evidence/validation/issue-463-dev-worker-deployment.md; evidence/acceptance/issue-540-season-scale-publication.md |
Durable asynchronous validation/publication is proven in deployment, including recovery of the originally stranded #364 season workload. |
| Report accepted and rejected outcomes with actionable item detail | Implemented with follow-up fixes | #279, #366, #367, #465, #471, #499 | PR #414 / b091385; PR #400 / 4c89649; PR #507 / bcb9635 |
Batch API/service tests; BatchReportsPage.test.tsx; focused Intermediate acceptance; #417 P05/P06 formal submitter sessions |
docs/api/batches.md; evidence/validation/issue-364-intermediate-ingestion-acceptance.md; Sprint 2 user-testing summary |
Formal #417 testing is complete. Pending P06 findings remain visible for explicit disposition/carry-over rather than being treated as missing evidence. |
| Resubmitting equivalent data does not double-count | Implemented | #280 | PR #401 / a4ab116 |
Batch service/database idempotency coverage and #463 duplicate-safe live publication | docs/architecture/batch-ingestion-pipeline.md; evidence/validation/issue-463-dev-worker-deployment.md |
No known requirement gap; continue regression coverage as ingestion paths evolve. |
| Resume interrupted validation/publication rather than restart | Implemented with follow-up fixes | #281, #463, #540, #551 | PR #405 / b59bd09; PR #553 / 046b42a; PR #549; PR #556 |
Worker checkpoint/lease tests; apps/worker/tests/batch-publication-job.test.ts; #463 recovery evidence; #540 recovery of the original stranded season-scale batch |
docs/deployment/azure-worker.md; docs/testing/intermediate-ingestion-acceptance.md; evidence/acceptance/issue-540-season-scale-publication.md |
Original #364 stranded publication resumed to published; a fresh representative job then completed in one attempt. |
| Require review before publication | Implemented with follow-up fixes | #283, #362, #479, #480, #540 | PR #423 / 6f8e53d; PR #434 / 0784932; PR #491 / 80cccc5; PR #504; PR #549 |
Backend batch review tests; BatchReviewWorkspacePage.test.tsx; focused reviewer E2E; P04 reviewer session; #540 deployed async-publication acceptance |
docs/api/batches.md; evidence/user-testing/sprint-2/2026-09-10-P04-reviewer.md; evidence/acceptance/issue-540-season-scale-publication.md |
Review approval is durable and publication is handed to a background job rather than blocking the reviewer request. |
| Catch impossible or conflicting cricket data | Implemented with follow-up fixes | #282, #522, #529, #537 | PR #412 / d5828e6 + validation commits; PR #523/#527 conflict reconciliation; PR #538 |
Contracts, batch service/database/worker tests; BatchReviewWorkspacePage.test.tsx; season-scale conflict-resolution exercise |
docs/architecture/batch-ingestion-pipeline.md; evidence/validation/issue-364-intermediate-ingestion-acceptance.md |
#537 follow-up is repaired: blocking references/conflicts are exposed through report.blockingItems independently of ordinary pagination. |
| Preserve correction history | Implemented with follow-up fixes | #284, #484, #539 | PR #404 / 2de6b8f; PR #503 / fd01448; PR #548 / 78c068b |
Database/API correction coverage; worker correction tests; tests/e2e/corrections.spec.ts; lineage frontend/API/database tests |
docs/database/schema.md; docs/api/provenance.md; docs/api/batches.md |
#539 repair is merged: corrected submissions expose predecessor/replacement lineage through replacesBatchReference / supersededByBatchReference. |
| Derive season, career and competition-wide aggregates | Implemented | #285, #476 | PR #411 / 5a2c92e; PR #490 / 4ca36f0 |
participant-aggregates unit/API/database tests |
docs/statistics/participant-aggregates.md |
Additional scorecard presentation improvements from user testing are product UX work, not a derivation correctness gap. |
| Recompute only figures affected by event changes | Implemented | #286 | PR #427 / 3cf51ce |
Correction/database refresh coverage; dependency-aware refresh tests in the statistics path | docs/statistics/participant-aggregates.md; ADR-009 |
Continue performance monitoring as more aggregate types are added. |
| Verify figures against known-correct reference results | Implemented | #287 | PR #316 / d443bfc |
apps/backend/tests/database/reference-figures.database.test.ts; reference fixture/database tests |
docs/development/reference-fixtures.md |
Reference corpus should expand as new statistics are introduced. |
| Exercise representative load and meet stated response-time targets | Implemented with follow-up fixes | #289, #290, #410, #364, #540 | PR #408 / 726f744; PR #409 / c799ef6; PR #429 / 560458c; PR #549; PR #556 / b68158c |
Public-read benchmark/query-plan tests; apps/worker/tests/batch-publication-throughput.test.ts; deployed #364/#540 measurements |
docs/development/performance-baseline.md; evidence/validation/issue-410-post-change-measurement.md; evidence/validation/issue-364-intermediate-ingestion-acceptance.md; evidence/acceptance/issue-540-season-scale-publication.md |
Representative workload: 70 fixtures / 16,713 events. Validation passed in 4m27s and final post-#540 publication passed in 3m37.235s, both within <=15m. |
| Version the API | Implemented | #291 | PR #340 / 6280c52 |
API version-routing/contract tests and OpenAPI lint | docs/api/versioning.md; docs/api/overview.md |
Future breaking versions must follow the documented deprecation path. |
| Issue consumer API keys and enforce rate limits/quotas | Implemented | #292 | PR #424 / 3f49174 |
apps/backend/tests/api/api-consumers.test.ts; apps/backend/tests/database/api-consumers.database.test.ts |
docs/api/consumer-keys.md; docs/security/roles-and-permissions.md |
Operational monitoring/consumer-usage reporting can be extended in Sprint 3. |
| Cache repeated reads with correct invalidation | Implemented with follow-up fixes | #293, #369, #430 | PR #427 / d88c529; PR #402 / 5d14c4f; PR #449 / 2c3b145 |
fixture-statistics.service.test.ts; database invalidation coverage; issue #293 evidence |
ADR-009; evidence/validation/issue-293-cache-performance.md |
Cache failures are designed not to fail authoritative published reads; continue observing deployment latency. |
| Publish versioned immutable dataset releases with schema/field docs and checksum | Implemented with follow-up fixes | #294, #458, #533 | PR #439 / 740afde; PR #461 / b6116bf; PR #545 / async release commits |
Dataset release unit/API/contracts/database-independent tests; admin release E2E | Dataset release section in API/data docs; evidence/validation/issue-458-admin-dataset-release-workflow.md |
Full-corpus synchronous generation failure #533 was replaced by durable asynchronous generation. Final deployed release publication evidence should be confirmed during #298 close-out. |
| Provide a release catalogue and download workflow | Implemented with follow-up fixes | #295, #467, #468, #475 | PR #451 / 0e49ccc; PR #493 / 923449a; PR #474 / 31ee2d9; follow-up public UX PRs |
Dataset release page tests; admin release E2E; public user-testing findings/retests | docs/data/dataset-exports.md; Sprint 2 user-testing summary |
User testing found export pagination/readability/navigation defects; several fixes are merged, while remaining accepted UX findings stay visible in the user-testing summary. |
| Preserve end-to-end provenance from statistic to source submission/review | Implemented | #363 | PR #440 / 475f67f |
Provenance contract/unit/API tests; PostgreSQL integration coverage | docs/api/provenance.md; evidence/validation/issue-363-provenance.md |
Public endpoints intentionally omit private provenance fields; authenticated provenance routes provide the audit trace. |
| Integrate a relevant external API and repair fixture-to-weather resolution | Implemented with follow-up fixes | #299, #300, #415, #473 | PR #320 / 369c246; PR #335; PR #466 / 2347742; PR #489 / e75a904 |
Weather unit/API tests and fixture-weather tests | ADR-008; docs/api/weather.md; docs/api/openapi.yaml |
Open-Meteo remains an external dependency; provider failures are isolated and documented. |
3.1 Basic carry-over completed during Sprint 2¶
Sprint 2 also completed Basic work that Sprint 1 explicitly left partial, notably filtered fixture-event exports (#269/#270) and the surrounding public export workflow. Those changes are covered by API, database, browser and formal-user evidence and are included in the rubric mapping below rather than being misrepresented as new Intermediate requirements.
4. Sprint 2 rubric evidence¶
The official Sprint 2 rubric totals 100% across the ten criteria below. The evidence posture column is a repository self-check against the rubric wording, not a claim about the marker's final score.
| Rubric criterion | Weight | Evidence posture at cut-off | Repository evidence | Known limitation / close-out action |
|---|---|---|---|---|
| Core Features | 25% | Intermediate requirement evidence complete; final rubric close-out under #298 | Intermediate implementation matrix above; Basic acceptance #272; guided submission/review #361/#362; integrated acceptance #364; representative fixes/retests through #540 | The former season-scale publication blocker is resolved and retested. Remaining open/deferred product findings stay visible and should be considered by #298 rather than being hidden. |
| Automated Testing | 10% | Advanced-target evidence present | Contracts, backend unit/API, PostgreSQL integration, worker, frontend unit, Playwright E2E/accessibility, deployment/CI-routing tests; npm run check; npm run verify:intermediate-ingestion; #272/#273/#287/#296/#364 evidence |
#296 remains the umbrella testing close-out item; final current-main quality evidence should be linked under #298. |
| Stakeholder Reviews | 10% | Advanced-target evidence present; final stakeholder close-out pending | 26 Aug approval; 1 Sep stakeholder meeting; 8 Sep asynchronous WhatsApp review; repository Sprint evidence; feedback-driven backlog changes | The team retrospective is already recorded. Final Sprint 2 stakeholder close-out belongs to #298 and must not be fabricated here. |
| API | 15% | Advanced-target evidence present | Handwritten Express /api/v1; published OpenAPI; public reads/exports; API consumer controls; Open-Meteo integration; versioning; deployed Azure backend evidence |
#298 should perform the final live availability/smoke check and record any temporary Azure capacity limitation separately from API implementation completeness. |
| User Feedback | 10% | Formal Sprint 2 testing complete; finding disposition/carry-over remains visible | Task-based protocol (#264/PR #317); public/analyst #416; reviewer/admin #418 with #463 fix/retest; submitter #417 with P05/P06 and cross-session retest evidence; consolidated Sprint 2 summary | #417's two external submitter sessions are complete. Four P06 findings remain Pending team disposition, and public/analyst carry-over findings remain explicit; this is outstanding product triage, not missing formal testing evidence. |
| Project Methodology | 10% | Advanced-target evidence present | Lightweight Scrumban documented in docs/project_methodology.md; issue/project-board workflow; Sprint 2 planning; weekly stand-ups under #331 including 27 Aug, 3 Sep and 10 Sep; team retrospective in evidence/sprints/sprint-2/2026-09-15-sprint-2-close-out.md |
The retrospective is recorded. #298 still owns final stakeholder close-out, current-main verification and the milestone decision/tag. |
| Bug Tracker | 5% | Advanced-target evidence present | docs/testing/bug-tracking.md; continuous labelled Gitea issue use; representative defects #367, #369, #410, #415, #430, #442, #446, #452, #463, #467-#500, #522/#529/#533/#537/#539/#540/#551 |
Open defects and deferred usability findings must remain visible; tracker usage is evidence of process, not proof that no bugs remain. |
| Database Documentation | 5% | Advanced-target evidence present | docs/database/overview.md, schema.md, erd.md, batch-persistence.md, access.md; executable migrations and migration README; deployment/provider rationale in ADR-005 and deployment docs |
The #297 Intermediate documentation publication is present on current main through PR #559; #419/final close-out should still confirm consistency before milestone tag. |
| Third-Party Code Documentation | 5% | Advanced-target evidence present | docs/development/technology-stack.md lists selected technologies/dependencies with versions, purposes and motivations; docs/development/dependencies.md defines review/copied-code policy; ADRs motivate external services |
Any new dependency added after this cut-off must be added before #298 tags Sprint 2. |
| Testing Documentation | 5% | Advanced-target evidence present | docs/development/testing.md; user-testing protocol/task bank; bug-tracking policy; Intermediate acceptance runbook; performance baseline; validation/evidence index |
The #297 documentation publication is present on current main through PR #559; #296/#419/final close-out should still confirm current-main test evidence and link integrity. |
5. Formal user-testing evidence and resulting work¶
The formal Sprint 2 process is task-based. The retained evidence must be read at task/finding level rather than as an informal usability narrative.
Primary records:
docs/testing/user-testing-protocol.mddocs/testing/user-testing-task-bank.mdevidence/user-testing/sprint-2/sprint-2-user-testing-summary.mdevidence/user-testing/sprint-2/2026-09-10-P01-public.mdevidence/user-testing/sprint-2/2026-09-10-P02-public.mdevidence/user-testing/sprint-2/2026-09-07-P03-public.mdevidence/user-testing/sprint-2/2026-09-10-P04-reviewer.mdevidence/user-testing/sprint-2/2026-09-11-P05-submitter.mdevidence/user-testing/sprint-2/2026-09-15-P06-submitter.md— together these complete the two-session #417 formal submitter-testing evidence; pending P06 findings remain for explicit team disposition
Representative feedback-to-engineering trace:
| Finding / workflow | Resulting issue(s) | Integration / retest state at cut-off |
|---|---|---|
| Reviewer batch unavailable because worker path was not progressing staged work | #463 | Fixed and the same P04 REV-01 task was successfully repeated before the remaining reviewer/admin tasks. |
| Export silently truncated beyond a page | #467 | Fix merged in PR #493; consolidated user-testing summary still needs the final retest/close-out update. |
| Export lacked readable cricket context | #468 | Fix merged in PR #474; multiple findings verified in deployed facilitator retest. |
| Competition search only saw the initially loaded page | #469 | Fix merged in PR #470; summary close-out/retest remains to be reconciled. |
| Public navigation/download/API discoverability and presentation findings | #475 | Follow-up fixes merged; the summary remains the authoritative record for unresolved accepted items. |
| Career aggregates existed in the API but were absent from the player page | #476 | UI integration merged in PR #490. |
| Submitter workflow and batch terminology/validation/scope findings | #417 plus #498/#499/#500/#501/#519/#520 and related fixes | P05 produced five accepted findings and implementation work; P06 externally retested several improvements. Formal #417 testing is complete, while four new P06 findings remain Pending team disposition and one P05 identifier-path improvement was not exercised because P06 was blocked earlier in the single-fixture task. |
6. Stakeholder and methodology evidence¶
Sprint 2 stakeholder evidence is retained separately from user testing:
evidence/sprints/sprint-2/2026-08-25-planning.mdevidence/sprints/sprint-2/Stakeholder/2026-08-26-sprint-2-stakeholder-approval.mdevidence/sprints/sprint-2/Stakeholder/2026-09-01-stakeholder-meeting.mdevidence/sprints/sprint-2/Stakeholder/2026-09-08-stakeholder-asynchronous-review.mdevidence/sprints/sprint-2/Stakeholder/2026-09-08-stakeholder-whatsapp-transcript-redacted.md
Sprint 2 stand-up evidence under #331 includes:
evidence/sprints/sprint-2/2026-08-27-standup.mdevidence/sprints/sprint-2/2026-09-03-standup.mdevidence/sprints/sprint-2/2026-09-10-weekly-standup.md- retained Teams transcripts under
evidence/sprints/sprint-2/Teams Transcripts/
The team retrospective is recorded in evidence/sprints/sprint-2/2026-09-15-sprint-2-close-out.md. The final
stakeholder close-out is not invented in this record and remains owned by #298.
7. Bug tracker and representative resolved defects¶
The project uses Gitea as the authoritative bug tracker and documents the workflow in
docs/testing/bug-tracking.md. Sprint 2 defects are not removed from the evidence trail when fixed.
Representative examples include:
-
367 — CSV BOM/common media-type handling;¶
-
369 — idle backend/database latency hardening;¶
-
410 — participant-history query-plan performance target;¶
-
415/#473 — fixture weather location resolution;¶
-
430 — published statistics read failure after cache/connection faults;¶
-
442/#446 — flaky browser/frontend CI tests;¶
-
452 — OpenAPI lint exception audited rather than a fictitious 4xx response;¶
-
463 — deployed worker path blocker found through reviewer testing;¶
-
467/#468/#469 — export/search defects found through formal public-user testing;¶
-
479/#480/#481/#482/#483/#484/#486 — reviewer/submission authorization and ingestion integrity fixes;¶
-
522/#529 — published conflict reconciliation;¶
-
533 — full-corpus dataset release publication moved to durable asynchronous generation;¶
-
537/#539 — season-scale review/correction issues discovered through #364;¶
-
540 — season-scale publication throughput remediation; and¶
-
551 — failed batches excluded from the active-batch limit.¶
This is evidence of continuous defect discovery, prioritisation, repair and retest; it is not a claim that the current product contains no defects.
8. CI, deployment and integrated verification¶
Representative repository/deployed evidence includes:
evidence/validation/issue-272-basic-e2e-acceptance.md— Basic vertical-slice acceptance;evidence/validation/issue-273-accessibility-responsive-audit.md— responsive/accessibility audit;docs/development/reference-fixtures.mdplus the reference-result database test suite for #287;evidence/validation/issue-293-cache-performance.md— repeated-read cache correctness/performance evidence;evidence/validation/issue-363-provenance.md— protected end-to-end provenance;evidence/validation/issue-364-intermediate-ingestion-acceptance.md— integrated Intermediate pipeline and representative season-scale acceptance;evidence/validation/issue-410-post-change-measurement.md— participant-history performance remediation evidence;evidence/validation/issue-463-dev-worker-deployment.md— live worker/Service Bus acceptance;evidence/acceptance/issue-540-season-scale-publication.md— durable publication recovery and successful 16,713-event season-scale publication in 3m37.235s;evidence/validation/issue-458-admin-dataset-release-workflow.md— administrator release workflow verification;evidence/validation/issue-376-dedicated-runner-verification.mdandevidence/validation/issue-383-hosted-ci-optimisation-verification.mdfor successful hosted CI/runner evidence, together with change-aware CI work under #348/#382; and- deployment guides under
docs/deployment/for the frontend, backend, worker, object storage and documentation site.
The final #298 close-out should link a green hosted CI run for the final Sprint 2 main commit and repeat any deployed checks that are explicitly still pending in this page.
9. Intermediate technical documentation¶
The Intermediate documentation published through #297 (PR #559 on current main) and the alignment work
tracked by #419 are distributed by responsibility rather than copied into one large milestone document:
- API and OpenAPI:
docs/api/ - database schema, ERD, access and batch persistence:
docs/database/ - testing, CI, local verification and performance:
docs/development/testing.md,docs/development/local-ci.md,docs/development/performance-baseline.md - third-party technology/dependency motivation:
docs/development/technology-stack.mdanddocs/development/dependencies.md - deployment/operations:
docs/deployment/ - security/authentication:
docs/security/ - public project-process/evidence discoverability:
docs/process/(work initiated under #254)
This traceability page links those records rather than duplicating their detailed content.
10. Known incomplete / carry-over work at this cut-off¶
The former #364 season-scale retest and #417 formal-session gates are now satisfied. Remaining Sprint 2 close-out work is:
- P06 submitter finding disposition. #417 formal testing is complete, but four new P06 findings remain Pending until the team records explicit Accept / Defer / Reject decisions and issue links where appropriate.
- Public user-feedback carry-over. Several accepted public/analyst findings are fixed, while others remain outstanding or require explicit retest/reconciliation in the consolidated summary.
- #296/#419 umbrella close-out. Intermediate documentation is published; final testing/alignment work should still confirm current-main consistency and evidence links.
- Dataset release live confirmation. #533 replaced full-corpus synchronous generation with durable asynchronous release generation; #298 should retain final deployed confirmation for the release flow.
- #298 final stakeholder close-out and milestone tag. The team retrospective is already recorded in
evidence/sprints/sprint-2/2026-09-15-sprint-2-close-out.md; the remaining stakeholder close-out and final tag decision remain intentionally outside #420.
These are explicit carry-over/close-out items, not hidden omissions. They do not reopen the completed #364 representative throughput or #417 formal-session evidence gates.
11. Handoff to #298¶
Before the Sprint 2 milestone is tagged, #298 should:
- review this traceability record against the current final
maincommit; - update any row whose pending verification completed after 14 September;
- link the final stakeholder close-out and retain the already-recorded team retrospective;
- link the final successful hosted CI run and deployed smoke/acceptance evidence;
- confirm the completed #417/#364 evidence, #296/#419 states, and preserve remaining finding/carry-over work honestly; and
- tag the milestone only after the evidence reflects the actual deployed state.
AI Declaration¶
The preceding document was planned, generated, reviewed and edited with the assistance of ChatGPT-Web[GPT-5.6 Sol]. The stale Sprint 2 close-out evidence path was corrected with the assistance of ChatGPT-Web[GPT-5.6 Sol].