User Stories¶
Every story lives in Jira project KAN under one of 14 epics. Points use the Fibonacci scale. Acceptance criteria are copied from Jira; Jira is the source of truth.
| Tier | Stories | Points |
|---|---|---|
| MVP | 91 | 366 |
| Target | 26 | 127 |
| Stretch | 9 | 42 |
Functional requirements¶
| ID | Requirement | Tier |
|---|---|---|
| FR-01 | Create projects and project-scoped API keys | MVP |
| FR-02 | Ingest traces and spans via authenticated, idempotent batch API | MVP |
| FR-03 | Parent/child spans and data-flow span links | MVP |
| FR-04 | Record prompts, model, tokens, cost (USD), latency, errors, versions | MVP |
| FR-05 | Represent LLM, retrieval, reranker, tool, agent, transform, guardrail and custom spans | MVP |
| FR-06 | Show traces as timeline and dependency graph | MVP |
| FR-07 | Run deterministic span validators | MVP |
| FR-08 | DecisionGate bounded classifications (Jev or LLM fallback) | Target |
| FR-09 | At least one semantic LLM judge (more judges are Stretch) | MVP |
| FR-10 | Accept user flags for bad outputs | MVP |
| FR-11 | Root-cause localization on failed or flagged traces | MVP |
| FR-12 | Ranked candidates and propagation paths | Target |
| FR-13 | Evidence-backed diagnoses with confidence | MVP |
| FR-14 | Ground claims against stored evidence | MVP |
| FR-15 | Human confirm / correct / unsure | MVP |
| FR-16 | Eval cases from confirmed failures | MVP |
| FR-17 | Re-run eval datasets against a version and compare with baseline | Target |
| FR-18 | Experiments comparing versions | Stretch |
| FR-19 | Quality, failure, cost and latency analytics | Target |
| FR-20 | Controlled fault injection in benchmark apps | MVP |
| FR-21 | Export diagnoses and results (JSON/CSV) | Stretch |
| FR-22 | Health, readiness and service metrics | MVP |
Changed for the 8-sprint plan
FR-18 (experiments) and FR-21 (export) moved from Target to Stretch so the build finishes by 26 Feb 2027.
Project setup & architecture (KAN-1)¶
| Key | Story | Owner | Sprint | Tier | Pts | Acceptance criteria |
|---|---|---|---|---|---|---|
| KAN-15 | Run kickoff: problem, users, MVP, non-goals, roles | T1 | 1 | MVP | 2 | Everyone has read Blueprint v1.1 and Errata Role table agreed and names filled in Confluence Working agreement (ceremonies, hours, channels) published |
| KAN-16 | Set up Jira project, board, sprints and Confluence space | T1 | 1 | MVP | 2 | Jira backlog imported from CSV 10 sprints created with dates Confluence pages published GitHub for Jira app connected |
| KAN-17 | Write and approve ADR-001 to ADR-004 | T1 | 1 | MVP | 5 | ADR-001 modular monolith ADR-002 Postgres + object store ADR-003 OTel compatibility and span links ADR-004 DecisionGate boundary and Jev backend decision Each ADR approved by 2 reviewers |
| KAN-18 | Freeze trace/span/link contract and success-metric targets (M0) | T1 | 1 | MVP | 3 | Pydantic models for Trace, Span, SpanLink merged Metric targets in §2.5 confirmed or changed MVP scope frozen on 13 Nov |
| KAN-35 | Publish OpenAPI contract v1 with mock server | T1 | 2 | MVP | 5 | All MVP endpoints from §13 described Mock server used by frontend Contract tests scaffolded |
| KAN-36 | Run sprint 1 integration review | T1 | 2 | MVP | 2 | Demo of SDK to ingestion path Blocking issues logged in Jira |
| KAN-50 | Vertical slice integration and M1 demo (11 Dec) | T1 | 3 | MVP | 3 | Benchmark -> SDK -> ingestion -> storage -> trace UI works on a clean clone Every member runs it locally Recorded demo in Confluence |
| KAN-51 | Generate TypeScript types from OpenAPI in CI and fail on drift | T1 | 3 | MVP | 2 | CI fails if generated types differ from committed ones |
| KAN-63 | Publish architecture overview and ADR index in Confluence | T1 | 4 | MVP | 2 | Pages linked from space home Diagrams match the 7 layers |
| KAN-73 | Post-holiday scope checkpoint toward M2 | T1 | 5 | MVP | 2 | Burn-down reviewed Any MVP item at risk re-planned or cut with team agreement |
| KAN-109 | Feature freeze review and cut list (M3, 12 Feb) | T1 | 7 | Target | 2 | Remaining Target items triaged Cut list agreed |
| KAN-120 | Code freeze gate (M4, 26 Feb) | T1 | 8 | Target | 2 | Only bug fixes after freeze Open features moved to Stretch |
Python SDK (KAN-2)¶
| Key | Story | Owner | Sprint | Tier | Pts | Acceptance criteria |
|---|---|---|---|---|---|---|
| KAN-19 | Prototype SDK API shape including inputs_from links | T2 | 1 | MVP | 3 | Spike branch shows decorator, span context manager and inputs_from Example from §7.2 runs against a stub exporter Reviewed by T1 and T5 |
| KAN-20 | Map span model to OpenTelemetry attributes | T2 | 1 | MVP | 3 | Mapping table for IDs, span kinds, links and gen_ai attributes in Confluence Gaps listed |
| KAN-37 | SDK core: Forensics client, @trace decorator, span context manager | T2 | 2 | MVP | 5 | Nested spans get correct parent inputs_from creates SpanLink Exceptions recorded as status=error Unit tests >= 85% coverage |
| KAN-38 | SDK batching exporter with retry and background flush | T2 | 2 | MVP | 3 | Batches up to 100 spans or 1 s Retries 3 times with backoff Never raises into user code |
| KAN-53 | SDK-side redaction of secrets and configured PII patterns | T2 | 3 | MVP | 3 | Authorization headers, cookies, API keys, passwords redacted Custom regex patterns from config Tests prove secrets never leave the process |
| KAN-54 | OpenAI adapter with automatic LLM spans | T2 | 3 | Target | 5 | Chat completion calls produce LLM spans with model, tokens, latency Streaming supported Works with recorded fixtures (no live key in CI) |
| KAN-75 | Helpers for retrieval and tool auto-instrumentation | T2 | 5 | Target | 5 | Decorators for retriever and tool functions Documents/tool args captured per capture policy |
| KAN-76 | SDK quickstart guide | T2 | 5 | MVP | 3 | Install, configure, first trace in under 10 minutes Published in repo and Confluence |
| KAN-87 | SDK automatic linking by output object identity | T2 | 6 | Target | 5 | Passing a previous span's output into a new span creates a link Opt-out flag Tests for false links |
Ingestion & trace platform (KAN-3)¶
| Key | Story | Owner | Sprint | Tier | Pts | Acceptance criteria |
|---|---|---|---|---|---|---|
| KAN-39 | POST /v1/ingest/batch: idempotent upsert of traces, spans and links | T2 | 2 | MVP | 5 | Same batch twice creates no duplicates Spans before trace accepted Invalid payload returns 422 with details p95 < 200 ms for 100 spans locally |
| KAN-52 | Trace assembly on completion: derived totals, structure validation | T2 | 3 | MVP | 5 | Total latency, tokens, cost computed Missing parents flagged status=incomplete after timeout |
| KAN-64 | Token and cost calculation with pricing table | T2 | 4 | MVP | 3 | Cost in USD Decimal(12,6) Pricing table versioned in config Totals roll up to trace |
| KAN-65 | Version metadata: pipeline, prompt, component, git commit | T2 | 4 | MVP | 2 | Fields captured by SDK and filterable in API |
| KAN-88 | SDK/backend contract tests | T2 | 6 | MVP | 3 | CI fails when SDK payload and API schema diverge |
Data model, product APIs & jobs (KAN-4)¶
| Key | Story | Owner | Sprint | Tier | Pts | Acceptance criteria |
|---|---|---|---|---|---|---|
| KAN-23 | FastAPI skeleton with config, /health and /ready | T3 | 1 | MVP | 3 | /ready checks DB, Redis and MinIO Settings via pydantic-settings Structured JSON logging |
| KAN-25 | Write ADR-005 (Celery) and ADR-006 (capture, retention, privacy) | T3 | 1 | MVP | 2 | Both ADRs approved Capture modes and retention defaults decided |
| KAN-40 | Database models and first migration: Project, ApiKey, Trace, Span, SpanLink | T3 | 2 | MVP | 5 | Alembic upgrade/downgrade works Indexes on project_id, trace_id, started_at Testcontainers integration test |
| KAN-55 | Store large payloads in object storage by reference | T3 | 3 | MVP | 3 | Payloads > 8 KB go to MinIO input_ref/output_ref resolve via API Lifecycle tested |
| KAN-56 | Trace query API: list, filter, detail with spans and links | T3 | 3 | MVP | 5 | GET /v1/traces and /v1/traces/{id} match OpenAPI Detail returns spans, links, signals Query p95 < 300 ms for 10k traces |
| KAN-57 | Seed script for demo project and sample traces | T3 | 3 | MVP | 2 | make seed creates project, key and 50 traces |
| KAN-66 | Celery worker, AnalysisJob model and GET /v1/jobs/{id} | T3 | 4 | MVP | 5 | Job states queued/running/succeeded/failed/cancelled Progress and stage updated Idempotent by job id Retries with backoff |
| KAN-89 | Diagnosis and claim models with list/detail APIs | T3 | 6 | MVP | 5 | GET /v1/diagnoses and /v1/diagnoses/{id} return claims, evidence, roles Migration tested |
| KAN-124 | Server-Sent Events for job progress | T3 | Stretch | Stretch | 3 | SSE endpoint frontend falls back to polling |
Security, DevOps & platform observability (KAN-5)¶
| Key | Story | Owner | Sprint | Tier | Pts | Acceptance criteria |
|---|---|---|---|---|---|---|
| KAN-21 | Create repository, branch protection, PR and issue templates | T3 | 1 | MVP | 2 | main protected, 1 approval and CI required PR template asks for Jira key and tests CODEOWNERS skeleton |
| KAN-22 | Docker Compose stack with PostgreSQL, Redis and MinIO | T3 | 1 | MVP | 3 | docker compose up starts all three with healthchecks .env.example documents variables README quickstart |
| KAN-24 | CI pipeline: Ruff, mypy, pytest, frontend lint/type/test | T3 | 1 | MVP | 3 | Runs on every PR in under 10 min Fails on lint or type errors Status required for merge |
| KAN-41 | Project and API key endpoints with hashed keys | T3 | 2 | MVP | 5 | Key shown once, stored as argon2 hash Revocation blocks ingestion within 1 min Cross-project access returns 404 |
| KAN-78 | Rate limits and request size limits | T3 | 5 | MVP | 3 | Ingestion and analysis endpoints limited per key 413 on oversized payloads Tests |
| KAN-90 | Audit log for key/config changes and overrides | T3 | 6 | Target | 3 | Entries written for key create/revoke, capture policy change, human corrections |
| KAN-97 | Security review checkpoint | T1 | 7 | MVP | 2 | Threat review against §17 Issues logged with owners |
| KAN-99 | Server-side redaction safety net at ingestion | T2 | 7 | MVP | 3 | Same patterns as SDK applied again Metric counts redactions |
| KAN-102 | Platform metrics and correlation-id logging | T3 | 5 | MVP | 3 | Metrics from §18 exposed Logs carry trace/job ids |
| KAN-112 | Capture policy enforcement and retention job | T3 | 8 | MVP | 5 | metadata-only/sampled/full enforced at ingestion Nightly retention deletes rows and objects |
| KAN-113 | Shared staging deployment with Caddy and auto-deploy | T3 | 7 | Target | 5 | Deploys from main after CI TLS Separate staging keys Runbook |
Detection & DecisionGate (KAN-6)¶
| Key | Story | Owner | Sprint | Tier | Pts | Acceptance criteria |
|---|---|---|---|---|---|---|
| KAN-26 | Implement taxonomy module v1 with definitions | T4 | 1 | MVP | 3 | taxonomy.py with families and categories from §9 One-line definition per category TS enum generated for frontend |
| KAN-27 | Investigate Jev access and DecisionGate options | T4 | 1 | Target | 3 | Document what Jev is, API, cost, latency Recommendation for ADR-004 Fallback LLM classifier prompt sketched |
| KAN-42 | Rule validator framework and QualitySignal interface | T4 | 2 | MVP | 5 | Validators registered by span type Each produces QualitySignal with evidence_ids Crashing validator produces EVALUATOR_FAILURE signal, not a failed trace |
| KAN-43 | Rules: JSON schema validity and tool error | T4 | 2 | MVP | 3 | Schema rule on transform and LLM spans Tool error rule on tool spans Unit tests with fixtures |
| KAN-58 | Rules: extracted value appears in source, citation exists | T4 | 3 | MVP | 5 | Applied to document and RAG spans Evidence points to source excerpt Precision checked on fixtures |
| KAN-67 | Detection pipeline runs on trace completion | T4 | 4 | MVP | 5 | Runs all registered detectors in a worker Signals persisted One failing detector does not stop others |
| KAN-79 | Statistical checks: latency, cost and token anomalies | T4 | 5 | Target | 5 | Baseline per component_key with >= 30 traces Z-score or IQR rule Trace-level signals allowed (span_id null) |
| KAN-80 | LLM judge: answer faithfulness to evidence | T4 | 5 | MVP | 5 | Judge prompt separates evidence from instructions Returns verdict, score, confidence Cached by input hash |
| KAN-91 | DecisionGate interface and LLM classifier fallback backend | T4 | 6 | Target | 8 | Decisions: span health, family then category Structured output validated Backend name logged per decision |
| KAN-103 | Jev DecisionGate backend (if ADR-004 confirmed) with comparison logging | T4 | 7 | Target | 5 | Jev backend behind same interface Toggle per project If Jev unavailable, story closed as Won't Do with note |
| KAN-104 | Evidence sufficiency and human review gate decisions | T4 | 7 | Target | 3 | SUFFICIENT/MORE_EVIDENCE/UNDIAGNOSABLE AUTO_ACCEPT/REVIEW_REQUIRED |
| KAN-114 | Additional judges: instruction following and citation support | T4 | Stretch | Stretch | 5 | Two more judges with fixtures and agreement check vs human labels |
| KAN-115 | Offline tool-call assessment decision | T4 | Stretch | Stretch | 3 | VALID/INVALID_ARGUMENTS/WRONG_TOOL/REVIEW on agent traces |
| KAN-126 | Benchmark DecisionGate backends vs rules vs LLM judge | T4 | 8 | Target | 5 | Accuracy, latency, cost per backend on dev set Findings for report |
Root-cause forensics (KAN-7)¶
| Key | Story | Owner | Sprint | Tier | Pts | Acceptance criteria |
|---|---|---|---|---|---|---|
| KAN-28 | Write RCA algorithm design with hand-built fixture traces | T5 | 1 | MVP | 5 | Design doc in Confluence covering §10.1 At least 6 fixture traces (doc, RAG) with expected root cause Reviewed by T1 |
| KAN-44 | Build data-flow graph from span links with parent/order fallback | T5 | 2 | MVP | 5 | Graph built from links Fallback edges marked low-confidence Cycles detected and reported |
| KAN-45 | Encode RCA fixture traces as automated tests | T5 | 2 | MVP | 3 | Fixtures from S0 load as traces Expected root cause asserted (tests may be xfail until RCA lands) |
| KAN-59 | RCA v0: backward walk to earliest operational error | T5 | 3 | MVP | 5 | Returns earliest error span on fixtures with explicit errors Unit tests pass |
| KAN-74 | Design candidate ranking score with T5 | T1 | 5 | Target | 3 | Score = severity x confidence x earliness documented Tested on fixtures |
| KAN-81 | RCA v1: backward traversal using quality deltas | T5 | 5 | MVP | 8 | Uses signals on inputs vs outputs Finds earliest significant degradation Passes >= 70% of dev fixtures |
| KAN-86 | Implement candidate ranking v1 with T5 | T1 | 6 | Target | 3 | Top-3 candidates with scores returned Unit tests |
| KAN-92 | Propagation labelling and span roles | T5 | 6 | Target | 5 | span_roles filled (root_cause, propagated, degraded, failed_output) propagation_path stored |
| KAN-116 | Candidate ranking v2 with rationale | T5 | 7 | Target | 5 | Top-3 with rationale referencing evidence Top-3 accuracy measured on dev |
| KAN-117 | Tune RCA on dev set | T5 | 8 | MVP | 3 | Dev Top-1 improved vs S5 baseline No held-out data used |
Evidence, explanation & grounding (KAN-8)¶
| Key | Story | Owner | Sprint | Tier | Pts | Acceptance criteria |
|---|---|---|---|---|---|---|
| KAN-29 | Design evidence and claim data model | T5 | 1 | MVP | 2 | EvidenceRef and DiagnosisClaim fields agreed Examples for each source_type |
| KAN-68 | Evidence store: create EvidenceRef from spans, documents and signals | T5 | 4 | MVP | 5 | content_hash computed Lookup by trace and span Unit tests |
| KAN-93 | Explanation model: evidence-cited, injection-safe diagnosis text | T5 | 6 | MVP | 5 | Prompt cites evidence IDs only Traced content wrapped as untrusted data Pre-gate text stored |
| KAN-105 | Grounding gate | T5 | 7 | MVP | 8 | Diagnosis split into claims IDs, numbers and quotes verified Unsupported claims removed and confidence lowered Pre/post persisted grounded flag set |
Human review & eval cases (KAN-9)¶
| Key | Story | Owner | Sprint | Tier | Pts | Acceptance criteria |
|---|---|---|---|---|---|---|
| KAN-77 | Flags endpoint and POST /v1/traces/{id}/analyses | T3 | 5 | MVP | 5 | Flag stored with reason/source Analysis creates job and returns id Flagging can auto-start analysis (config) |
| KAN-100 | Human feedback endpoint and eval case from confirmed diagnosis | T3 | 7 | MVP | 5 | Confirm/correct/unsure stored Confirm or correct creates EvalCase with expected component Audit entry written |
| KAN-101 | Datasets API (list/create, add cases) | T3 | 6 | MVP | 3 | GET/POST /v1/datasets Dataset versioning |
Benchmarks & fault injection (KAN-10)¶
| Key | Story | Owner | Sprint | Tier | Pts | Acceptance criteria |
|---|---|---|---|---|---|---|
| KAN-32 | Design benchmark suite and document benchmark | T7 | 1 | MVP | 3 | Pipeline steps and component keys defined for A, B, C Document dataset source chosen (synthetic/no PII) |
| KAN-34 | Implement InjectedFault schema | T7 | 1 | MVP | 2 | Pydantic model from §15.4 Serialized fixtures load in tests |
| KAN-48 | Document benchmark app (A) instrumented with the SDK | T7 | 2 | MVP | 8 | Extraction, classification, summarization spans with component keys Runs from one command Traces appear via ingestion |
| KAN-49 | Document benchmark faults: hallucinated entity, omitted amount, schema violation | T7 | 2 | MVP | 3 | Each fault reproducible by seed InjectedFault record written with expected root cause |
| KAN-62 | RAG benchmark app (B) v1 instrumented | T7 | 3 | MVP | 8 | Query rewrite, retrieval, reranker, context build, LLM spans with links Small local corpus Answer correctness checker |
| KAN-71 | RAG faults: remove relevant doc, irrelevant docs, corrupt ranking, top-k cutoff | T7 | 4 | MVP | 5 | Each reproducible by seed Expected root cause component recorded |
| KAN-84 | Agent benchmark app (C) v1 with planner and tools | T7 | 5 | Target | 8 | Planner, tool selection, tool call, observation, reasoning spans 3+ tools (calculator, search stub, DB stub) |
| KAN-95 | Agent faults: wrong tool, malformed args, tool timeout, loop | T7 | 6 | Target | 5 | Each reproducible by seed Expected root cause recorded |
| KAN-108 | Remaining faults for A/B/C and held-out split | T7 | 7 | MVP | 5 | All faults in §15 implemented or explicitly cut Held-out split frozen and not used for tuning |
Evaluation, regression & experiments (KAN-11)¶
| Key | Story | Owner | Sprint | Tier | Pts | Acceptance criteria |
|---|---|---|---|---|---|---|
| KAN-33 | Draft evaluation protocol: metrics, dev/held-out split | T7 | 1 | MVP | 3 | Metric definitions match §2.5 Split rule by fault type and seed Input to ADR-007 |
| KAN-72 | Write ADR-007 evaluation methodology | T7 | 4 | MVP | 3 | Approved by T1, T4, T5 Defines dev/held-out, metrics and reporting |
| KAN-96 | Accuracy harness on dev set: Top-1, Top-3, macro-F1 | T7 | 6 | MVP | 5 | One command runs all dev faults and prints metrics Results stored for trend |
| KAN-119 | Regression runner with baseline comparison | T7 | 7 | Target | 8 | POST /v1/eval-runs executes cases in isolation Stores pass/fail, deltas, new failures Advisory recommendation |
| KAN-127 | Support held-out evaluation and fix RCA defects | T5 | 8 | MVP | 5 | Held-out run completed once Defects triaged |
| KAN-130 | Experiment engine across prompt/model/retriever variants | T7 | Stretch | Stretch | 8 | Runs variants on a dataset Stores comparable metrics |
| KAN-131 | Held-out accuracy runs for final metrics | T7 | 8 | MVP | 5 | Top-1, Top-3, macro-F1, grounding, FPR, latency reported vs targets |
| KAN-140 | Final evaluation report | T7 | 8 | MVP | 8 | Methodology, results vs targets, error analysis, limitations Reviewed by T1, T5 |
Developer console (KAN-12)¶
| Key | Story | Owner | Sprint | Tier | Pts | Acceptance criteria |
|---|---|---|---|---|---|---|
| KAN-30 | Scaffold Next.js console with Tailwind, ESLint, Prettier, Vitest | T6 | 1 | MVP | 3 | App builds in CI Strict TS Base layout and theme tokens |
| KAN-31 | Wireframe Traces explorer and Failures investigation screens | T6 | 1 | MVP | 5 | Low-fi wireframes in Confluence Reviewed with T1, T5 Loading/empty/error states shown |
| KAN-46 | Console shell: navigation, session stub, typed API client from OpenAPI | T6 | 2 | MVP | 5 | All 9 nav entries present (stubs allowed) API client generated in CI |
| KAN-47 | Trace list page with filters against mock API | T6 | 2 | MVP | 5 | Filter by status, health, pipeline_version, date Pagination Loading/empty/error states |
| KAN-60 | Trace explorer DAG with React Flow | T6 | 3 | MVP | 8 | Nodes coloured by status/health Edges show parent and data-flow links Handles 200+ spans smoothly |
| KAN-61 | Timeline view and span detail drawer | T6 | 3 | MVP | 5 | Gantt-style timeline Drawer shows input/output, model, tokens, cost, errors |
| KAN-69 | Settings: project and API key management UI | T6 | 4 | MVP | 3 | Create project, create/revoke key, key shown once |
| KAN-70 | Span payload viewer for object-store payloads | T6 | 4 | MVP | 2 | Lazy-loads large payloads JSON pretty view Redacted fields marked |
| KAN-82 | Flag button and analysis progress UI | T6 | 5 | MVP | 3 | Flag from trace page Polling every 2 s shows stage/progress Error state on failed job |
| KAN-83 | Failures list page | T6 | 5 | MVP | 5 | Lists diagnoses with category, confidence, status Filters Links to investigation |
| KAN-94 | Failure investigation page | T6 | 6 | MVP | 8 | Root cause, category, confidence, roles colouring on DAG, evidence list Matches §16 hero interaction |
| KAN-106 | Human feedback UI: confirm, correct, unsure | T6 | 7 | MVP | 5 | Correct lets reviewer pick span and category Success creates eval case link |
| KAN-107 | Evidence timeline component | T6 | Stretch | Stretch | 5 | Evidence ordered by time with source type Click jumps to span |
| KAN-118 | Evaluations UI: datasets, cases, run history | T6 | 7 | Target | 8 | Dataset and case browsing Run list with pass/fail and delta vs baseline |
| KAN-128 | Experiments UI | T6 | Stretch | Stretch | 5 | Create experiment from dataset and variants Compare quality/cost/latency |
| KAN-129 | Overview and Analytics dashboards | T6 | 8 | Target | 8 | KPIs, failures over time, top categories, cost/latency, override rate |
Analytics, compare & export (KAN-13)¶
| Key | Story | Owner | Sprint | Tier | Pts | Acceptance criteria |
|---|---|---|---|---|---|---|
| KAN-98 | Trace compare backend: alignment and first divergence | T2 | 7 | Target | 5 | Aligns spans by component_key Returns first diverging span and field diffs |
| KAN-110 | Compare screen UI with T6 | T2 | 8 | Target | 5 | Side-by-side healthy vs failed traces First divergence highlighted |
| KAN-111 | Analytics queries: failures by category, step, model, prompt | T2 | 7 | Target | 5 | Materialized or cached queries Response < 500 ms |
| KAN-122 | Analytics overview API | T2 | Stretch | Stretch | 5 | GET /v1/analytics/overview returns KPIs for Overview screen |
| KAN-123 | Export diagnoses and benchmark results | T2 | Stretch | Stretch | 3 | POST /v1/exports JSON/CSV as a job Download link |
Hardening, documentation & final demo (KAN-14)¶
| Key | Story | Owner | Sprint | Tier | Pts | Acceptance criteria |
|---|---|---|---|---|---|---|
| KAN-85 | MVP end-to-end test and M2 demo (29 Jan) | T1 | 6 | MVP | 3 | Flag -> analyze -> diagnosis with evidence works on doc and RAG E2E test in CI Demo recorded |
| KAN-121 | Draft final demo script | T1 | 8 | Target | 3 | Follows §28 Fallback recordings for each step |
| KAN-125 | Load and performance tests | T3 | Stretch | Stretch | 5 | Burst ingestion, 500-span traces, 10 concurrent analyses Results in Confluence |
| KAN-132 | Final demo rehearsals, release notes and live demo (early March) | T1 | 8 | MVP | 5 | Two full rehearsals Release tagged Final demo delivered Retrospective held |
| KAN-133 | SDK guide and API reference polish | T2 | 8 | MVP | 3 | SDK guide complete OpenAPI docs published |
| KAN-134 | Bug fixing: SDK, ingestion, compare, analytics | T2 | 8 | MVP | 3 | No open Highest/High bugs in owned areas |
| KAN-135 | Security tests: redaction, cross-project, oversized, prompt injection | T3 | 8 | MVP | 5 | All tests from §20 security row automated No critical findings open |
| KAN-136 | Release candidate on staging with runbook (M4, 26 Feb) | T3 | 8 | MVP | 3 | RC deployed Rollback tested Runbook in Confluence |
| KAN-137 | Detection documentation and bug fixes | T4 | 8 | MVP | 3 | Detector catalogue page No open High bugs |
| KAN-138 | Forensics documentation and bug fixes | T5 | 8 | MVP | 3 | RCA and grounding explained with examples No open High bugs |
| KAN-139 | Playwright E2E for main flow and UI polish | T6 | 8 | MVP | 5 | E2E from §20 green in CI Every screen has loading/empty/error states |