Currently

Live project memory

Live project memory

Last updated 5/13/2026

Currently — Live Project Memory

Document Version: Live (auto-snapshot) Last Materialized From: Commit fc207dd (HEAD) Methodology: PRD-driven Context Engineering v0.1+ Classification: Internal — No PHI


1. Project Identity

Currently is an AI-powered healthcare data integration platform that ingests raw clinical documents (HL7 v2 messages, CDA/CCDA XML) from health information exchanges (HIEs) and transforms them into FHIR R4 resources and OMOP CDM 5.4 records. Terminology codes are resolved against the OMOP Athena vocabulary (6.3M concepts) covering LOINC, SNOMED CT, ICD-10-CM, and RxNorm.

The platform serves three distinct user personas through four authenticated shells: platform administrators (/admin), HIE operators (/dashboard/network), facility providers (/dashboard), and patients (/portal).

Current lifecycle stage: v0.7–v0.8 (Beta / Pre-Growth). Core pipeline is production-deployed. Web platform is feature-complete at the shell level. Active work is concentrated on production hardening, auth wiring, and branding polish.


2. System Architecture Snapshot

2.1 Runtime Topology

ComponentTechnologyDeployment TargetStatus
Web applicationNext.js (App Router)VercelProduction
REST APIFastAPI / Python 3.11GKE / on-premiseProduction
Async workersCelery + Redis brokerGKE / on-premiseProduction
NLP serviceSeparate Docker image (Dockerfile.nlp)GKEActive
Platform databaseCloud SQL (Postgres) — no PHIGCPProduction
PHI databaseCloud SQL (Postgres) — PHI isolatedGCPProduction
Object storageGoogle Cloud StorageGCPProduction
Auth providerClerk (Organizations, Users, Roles)SaaSProduction
Task queueCloud Tasks → REST enqueueGCPRecently fixed
CLITypeScript / tsupnpmShipped

2.2 Data Boundary Decision (TECH-001)

Decision: PHI and non-PHI are partitioned into two separate Cloud SQL instances. The Platform DB (orchestrator, 192.168.0.251) holds organizations, users, file registry metadata, job tracking, and CRM/CMS data. The PHI DB holds medical_records, FHIR bundles, and the full omop_cdm54 schema including the 6.3M-concept Athena vocabulary table.

Rationale: Compliance isolation. Any accidental logging, query introspection, or lateral movement within the platform layer cannot expose PHI. FHIR/OMOP data never enters the Platform DB.

Impact: Every API route that touches clinical data must connect to the PHI DB via a separate connection string. This has been the source of several recent fix: commits around GCS auth and worker wiring.

2.3 Four-Shell UI Architecture (TECH-002)

web/src/app/(app)/
├── (platform)/admin/          # Platform super-admins
├── (hie)/dashboard/network/   # HIE operators
├── (provider)/dashboard/      # Facility/provider users
└── (patient)/portal/          # Patients

Each shell has its own layout, navigation, and role guard. Role resolution flows from Clerk organization membership → clerk_role → platform DB users.role.


3. Current Project State

3.1 What Has Been Built

Pipeline (Python / FastAPI / Celery)

  • HL7 v2 parser supporting 18+ message types: ADT (A01–A31), ORU R01/R32, ORM O01, RDE O11, MDM T02, DFT P03, SIU S12, VXU V04 — profiles in config/hl7_profiles/
  • CDA/CCDA XML parser with full C-CDA section support
  • FHIR R4 output: Patient, Observation, Condition, MedicationRequest, AllergyIntolerance
  • OMOP CDM 5.4 output: person, measurement, condition_occurrence, drug_exposure, visit_occurrence
  • Athena vocabulary resolver (6.3M concepts, omop_cdm54.concept)
  • FHIR datetime normalization — HL7 compact dates (YYYYMMDD) → FHIR dashed form (YYYY-MM-DD) fixed in commit b955f31
  • De-identification rules via config/deid/default_rules.csv
  • Crosswalk tables: config/crosswalk/hl7_table_contexts.json, config/fhir_mappings/vocabulary_maps.json
  • Y7/Y8/Y9/R2 pipeline stages added in commit 9df7a3c with associated web schema changes
  • Dead-letter queue (DLQ) routing with dedicated test coverage (tests/e2e/test_dlq_routing.py)
  • Conformance toggle (runtime-switchable strictness level, tests/e2e/test_conformance_toggle.py)
  • Rule audit trail (tests/e2e/test_rule_audit.py)
  • Phase 3 orchestrator (tests/e2e/test_phase3_orchestrator.py)

Web Platform (Next.js)

  • Clerk webhook sync at /api/auth/sync-user — real-time user/org sync into Platform DB
  • Admin shell: registrations (HIE + facility), invitations, org-link approvals, pricing tiers, revenue stats, analytics, API key management, PHI access audit, provider approval
  • HIE shell: network overview, analytics, approvals, patient list with MRN-hash routing, provider management, records, jobs, upload, export, API keys, Google Workspace integration
  • Patient portal: profile, records, sharing, API access self-service
  • NPI verification endpoint (/api/npi/verify)
  • Subscription lifecycle: checkout + cancel (/api/subscriptions/checkout, /api/subscriptions/cancel)
  • Developer email preview endpoint (/api/dev/email-preview)
  • CLI tool (cli/) with commands: allergies, analytics, auth, billing, config, diagnoses, encounters, keys, medications, orgs, patient, pipeline, quality, records, storage, webhooks
  • Internal API docs page with code generators (web/src/app/(app)/(platform)/admin/api-docs/)
  • ATS (applicant tracking) module under /admin/ats/ — unusual for a healthcare platform; indicates internal hiring tooling was embedded in the admin shell

Infrastructure

  • 4 Dockerfiles: Dockerfile (API), Dockerfile.pipeline, Dockerfile.worker, Dockerfile.nlp
  • 7 GitHub Actions workflows: code quality, pipeline deploy, pipeline test, worker deploy, smoke test, docs sync, Terraform plan
  • Terraform plan workflow exists; full apply not confirmed from available context
  • SBOM attestation step in CI (marked continue-on-error in commit 2942e46)
  • Secrets management via .gitleaks.toml (secret scanning pre-commit hook)
  • .hypothesis/ directory committed — property-based test corpus is version-controlled

3.2 What Is In Progress

IDItemEvidence
TECH-003Production worker deployment hardeningCommits 6d31ec1, 2ee79b5, 1ca44ba — three sequential fixes to worker wiring within a short window
TECH-004GCS Workload Identity auth migrationCommits a4fd140 (workload identity), e4b22ee (GCS file sync downloads)
TECH-005Cloud Tasks → REST enqueue migrationCommits ada7aae (remove Cloud Tasks client), 2ee79b5 (REST enqueue) — Cloud Tasks SDK removed; tasks now enqueued via direct REST calls
TECH-006FHIR validation in productionCommit 02461e4 — FHIR playground production flow restored (d9046e1), validation auth fix applied separately
TECH-007Landing page / marketing copy refreshPRs #51–#60 — 10 open Rig-authored PRs making incremental copy changes to hero section
TECH-008Branding unificationCommits fc207dd (admin content), b68c500 (auth pages)

3.3 What Is Blocked / At Risk

IDItemRiskNotes
BR-001SBOM attestationLow-mediumMarked continue-on-error (commit 2942e46). Compliance artifact is not reliably generated. Needs root cause before any HIPAA/SOC2 audit.
BR-002NEXT_PUBLIC_BACKEND_URL guard deferralMediumCommit 19a5e90 deferred the URL guard to call site. If any call site misses the guard, the app silently fails to reach the Python backend. Needs audit of all call sites.
BR-003Duplicate marketing PRsLow (noise)PRs #51–#60 are 10 near-identical Rig-bot PRs making overlapping copy changes. None are merged. Creates PR queue noise and merge conflict risk. Needs triage and consolidation.
BR-004hospital_id type mismatchMediumusers.hospital_id is INTEGER while hospitals.id is UUID. There is no foreign key constraint. Joins between users and hospitals will silently fail or require a cast.
BR-005Local README setup sectionLowPR #55 (open) adds local setup to README. No merged documentation for onboarding new engineers.

4. Active Decisions and Rationale

TECH-001 — PHI / Non-PHI Database Split

See §2.2 above. Settled. Not under reconsideration.

TECH-002 — Four-Shell UI via Next.js Route Groups

Decision: Use Next.js parallel route groups (platform), (hie), (provider), (patient) within a single Next.js app on Vercel rather than four separate applications. Rationale: Shared component library, single deployment unit, Clerk context available across all shells. Role-based shell isolation is enforced at the layout level via Clerk session claims. Trade-off accepted: A single compromised layout or middleware could leak cross-shell data. This is mitigated by Clerk's server-side auth checks in each route handler.

TECH-005 — Remove Cloud Tasks SDK, Use REST Enqueue

Decision: Cloud Tasks client library removed (ada7aae). Pipeline tasks are now enqueued via direct HTTP REST calls to the Cloud Tasks API. Rationale: Reduces dependency surface, avoids Cloud Tasks SDK version conflicts with the Python 3.11 runtime, enables easier local simulation. Open question (UJ-001): Are retries and dead-lettering semantics fully replicated under the REST enqueue pattern? The DLQ routing tests (tests/e2e/test_dlq_routing.py) should confirm this, but it is not clear from commit messages alone whether those tests were re-validated after the migration.

TECH-009 — Clerk as Sole Identity Provider

Decision: Clerk manages organizations, users, roles, and invitations. The platform DB mirrors Clerk state via webhook (/api/auth/sync-user). There is no separate identity service. Rationale: Clerk's organization model maps cleanly to HIE → facility hierarchy. Invitation flows for facility users and patients (/api/admin/invitations/facility-user, /api/admin/invitations/patient) are handled via Clerk invitation tokens. Trade-off accepted: Platform is tightly coupled to Clerk. Migration to another IdP would require rewriting the entire auth layer.

TECH-010 — Hypothesis Property-Based Testing for Pipeline

Decision: .hypothesis/ corpus is committed to the repository. Property-based tests (tests/conformance/test_property_based.py, tests/conformance/test_fuzz.py) run as part of CI. Rationale: Clinical data is highly variable. Property-based testing catches edge cases that example-based tests miss (e.g., the HL7 compact date bug fixed in b955f31 was likely surfaced through fuzz/property tests).

TECH-011 — ATS Module Inside Admin Shell

Decision: An applicant tracking system is embedded under web/src/app/(app)/(platform)/admin/ats/. This is a non-clinical internal tooling module co-located with the healthcare platform admin. Rationale (inferred): Convenience — reuse of the existing admin shell auth and UI patterns. Avoids maintaining a separate application. Trade-off: Increases admin shell complexity. ATS data could inadvertently appear in platform analytics if not carefully scoped.


5. Recent Changes and Their Impact

CommitChangeImpact
fc207ddAdmin content + branding updateVisual/copy only. No functional impact.
02461e4Authenticate production FHIR validationFHIR validation endpoint now enforces auth in prod. Previously may have been open.
ada7aaeRemove Cloud Tasks client from callbacksCloud Tasks SDK dependency removed from callback path. REST-only task enqueue.
e4b22eeAuthenticate GCS file sync downloadsGCS file downloads now require authentication. Previously may have used unsigned URLs or service account key files.
b68c500Currently branding on auth pagesClerk-hosted auth pages now show Currently branding.
a4fd140Workload Identity for GCSRemoved static service account keys for GCS. Now uses GKE Workload Identity Federation. Security posture improvement.
1ca44baSurface pipeline enqueue failuresEnqueue errors are now surfaced to the caller rather than silently swallowed. Improves observability.
2ee79b5Enqueue pipeline tasks via RESTSee TECH-005.
6d31ec1Repair production worker deployment wiringWorker was not correctly wired in production. High-severity fix — pipeline jobs were likely not executing.
d9046e1Restore FHIR playground production flowFHIR playground was broken in production. Restored.
19a5e90Defer NEXT_PUBLIC_BACKEND_URL guardGuard moved from module initialization to call site. See BR-002.
9df7a3cY7/Y8/Y9/R2 pipeline + web schemaNew pipeline stages added. Schema changes in web layer. This is a significant feature addition.
2942e46SBOM continue-on-errorAttestation step made non-blocking. See BR-001.
5c2381fworkflow_dispatch on deploy workflowsManual trigger added to pipeline-deploy and worker-deploy. Enables ad-hoc production deployments.
b955f31Fix HL7 compact date normalization_normalize_fhir_datetime now correctly converts YYYYMMDDYYYY-MM-DD. Downstream FHIR validators and OMOP date fields benefit.

6. Open Questions and Unresolved Trade-offs

IDQuestionPriorityOwner
UJ-001Do DLQ routing semantics hold after Cloud Tasks → REST enqueue migration?HighPipeline team
UJ-002What is the Y7/Y8/Y9/R2 pipeline stage taxonomy? No documentation found in available context. Are these processing phases, rule sets, or vocabulary resolution stages?HighPipeline team
UJ-003users.hospital_id is INTEGER but hospitals.id is UUID (BR-004). Is this a schema bug or intentional (e.g., mapping to a legacy integer ID)?HighBackend team
UJ-004Are all 10 open Rig bot PRs (#51–#60) safe to close as duplicates, or do any contain unique copy?LowProduct
UJ-005What does the NLP service (Dockerfile.nlp) do specifically? Is it a named entity recognition (NER) service for clinical text extraction, or something else?MediumPipeline team
UJ-006Is the FHIR playground available to all authenticated users or only platform admins? The fix in d9046e1 restored the flow but the access control scope is unclear.MediumPlatform team
UJ-007The config/fly.toml file exists alongside GKE deployment configs. Is Fly.io still an active deployment target, or is this a legacy artifact?LowInfra team
UJ-008SBOM attestation failure root cause (BR-001). Is this a GCP OIDC token issue, a Cosign version mismatch, or a registry permissions problem?MediumDevSecOps
UJ-009The onboarding_completed flag exists on both organizations and hospitals. What workflow sets these flags, and what is the UX path for incomplete onboarding?MediumProduct

7. Technical Debt Inventory

IDItemPriorityFile/LocationNotes
DBT-001users.hospital_id INTEGER vs hospitals.id UUIDP0database schema — users tableSilent join failures. No FK constraint. Must resolve before any user→hospital reporting is trusted.
DBT-002NEXT_PUBLIC_BACKEND_URL call-site guardP1web/src/ — deferred by commit 19a5e90Each call site must now independently guard. Audit required.
DBT-003SBOM attestation non-blockingP1.github/workflows/pipeline-deploy.ymlSecurity compliance artifact is unreliable. Blocks SOC2/HIPAA audit readiness.
DBT-004Cloud Tasks → REST enqueue — DLQ validationP1tests/e2e/test_dlq_routing.pyMust re-confirm DLQ semantics after TECH-005 migration.
DBT-005config/fly.toml stale artifactP3config/fly.tomlIf Fly.io is not an active target, remove to avoid confusion.
DBT-006Y7/Y8/Y9/R2 pipeline stages undocumentedP2Commit 9df7a3cNew stages shipped without discoverable documentation in available context.
DBT-007Duplicate Rig bot PRs (#51–#60)P2GitHub PR queue10 open PRs making overlapping changes. Must be triaged and consolidated before they create merge conflicts with substantive PRs.
DBT-008.hypothesis/ corpus in VCSP3.hypothesis/ directoryHypothesis corpus should generally be excluded from VCS (large binary blobs, machine-specific). Consider .gitignore and CI-managed corpus.
DBT-009ATS module coupling in admin shellP3web/src/app/(app)/(platform)/admin/ats/Non-clinical module in clinical admin shell increases complexity. Low risk now; refactor when admin shell grows.
DBT-010No local setup documentation (merged)P2README.mdPR #55 is open but unmerged. Engineers joining the project have no documented local setup path.
DBT-011Procfile present alongside Docker/GKEP3ProcfileLegacy Heroku/Railway artifact. Clarify or remove.

8. Test Coverage Architecture

tests/
├── conformance/
│   ├── test_fuzz.py                    # Fuzz testing via Hypothesis
│   ├── test_hl7_conformance_integration.py
│   └── test_property_based.py         # Property-based testing
├── e2e/
│   ├── test_canonical_consistency.py
│   ├── test_conformance_toggle.py      # Runtime conformance strictness
│   ├── test_dlq_routing.py             # Dead-letter queue behavior
│   ├── test_fhir_full_pipeline.py      # Full FHIR output validation
│   ├── test_hl7_full_pipeline.py       # Full HL7 ingestion → output
│   ├── test_monitoring.py
│   ├── test_omop_csv_round_trip.py     # OMOP round-trip fidelity
│   ├── test_omop_full_pipeline.py
│   ├── test_performance.py             # Performance baselines
│   ├── test_phase3_orchestrator.py     # Phase 3 orchestrator
│   ├── test_rule_audit.py              # Rule audit trail
│   └── test_y1_y2_edge_cases.py        # Y1/Y2 edge case regression
└── conftest.py

Coverage observations:

  • E2E tests cover the full pipeline from HL7 ingest through FHIR/OMOP output. This is strong for a healthcare data platform.
  • test_y1_y2_edge_cases.py covers Y1/Y2 stages. test_phase3_orchestrator.py covers phase 3. Y7/Y8/Y9/R2 stages (added in 9df7a3c) need corresponding test files — none are visible in the current file tree.
  • test_performance.py exists but performance baselines are not documented in available context (see §9).
  • 110 test files across Python. Frontend test coverage is not visible in the available file tree — this may be a gap.

9. Performance Baselines

Performance baselines are tracked in tests/e2e/test_performance.py. Specific numbers are not available from the current repository context snapshot. The following are known constraints from architecture:

MetricTarget / Known ConstraintStatus
Vocabulary resolutionMust query 6.3M-concept omop_cdm54.concept tableIndexed query — baseline unknown
Celery worker throughputDetermined by GKE node count and Redis broker capacityBaseline not documented in available context
FHIR bundle generation latencyAffected by HL7 message complexity and CDA section countBaseline not documented
PHI DB query latencySeparate Cloud SQL instance — network hop from GKE workersBaseline not documented

Action needed (TECH-012): Extract and document baseline numbers from test_performance.py into this document and into the project status report.


10. Integration Points and Health

IntegrationDirectionAuth MethodCurrent HealthNotes
Clerk → Platform DBWebhook inboundClerk webhook secret✅ Operational/api/auth/sync-user
Next.js → FastAPIOutbound HTTPNEXT_PUBLIC_BACKEND_URL⚠️ FragileGuard deferred to call site (BR-002)
FastAPI → PHI Cloud SQLInternalCloud SQL Auth Proxy / IAM✅ Operational
FastAPI → Platform Cloud SQLInternalCloud SQL Auth Proxy / IAM✅ Operational
Celery → RedisInternalRedis connection string✅ OperationalBroker for task queue
GKE Workers → GCSOutboundWorkload Identity Federation✅ Recently hardenedCommit a4fd140
GKE Workers → Cloud TasksOutbound RESTREST / service account✅ MigratedSDK removed; REST enqueue
FHIR ValidatorInternal/ExternalRecently authenticated✅ Recently hardenedCommit 02461e4
NPI RegistryOutboundUnknown (likely API key)❓ Unknown/api/npi/verify exists; integration details not in scope
Stripe / BillingOutboundUnknown❓ Unknown/api/subscriptions/checkout, /api/subscriptions/cancel exist

11. Team Conventions and Patterns

11.1 Cursor Rules (.cursor/rules/)

Four explicit convention files are maintained:

  • project-conventions.mdc — General project conventions
  • python-pipeline.mdc — Python pipeline-specific rules
  • testing.mdc — Testing standards
  • web-frontend.mdc — Next.js frontend patterns

This indicates the team uses Cursor AI tooling and has codified conventions for AI-assisted development. These files should be treated as the canonical style guide.

11.2 Commit Message Convention

Commits follow Conventional Commits: fix:, feat:, ci:, fix(web):. This is enforced via .pre-commit-config.yaml.

11.3 Secret Scanning

.gitleaks.toml is present — secret scanning runs pre-commit. This is appropriate for a HIPAA-adjacent codebase.

11.4 Environment Config

config/env.remote-example provides the template for remote environment configuration. Local vs. remote environments are explicitly distinguished.

11.5 API Versioning Pattern

Newer admin endpoints are under /api/v1/admin/ (e.g., /api/v1/admin/api-keys, /api/v1/admin/approve-provider). Older endpoints are unversioned (e.g., /api/admin/registrations/hie). Convention: New admin API routes should be under /api/v1/. Existing unversioned routes represent migration debt.

11.6 PHI Access Audit

/api/v1/admin/audit/phi-access exists as a dedicated audit endpoint. Any access to PHI-adjacent data must be logged through this mechanism.

11.7 MRN Hashing

Patient routes use hashed MRNs: web/src/app/(app)/(hie)/dashboard/network/patients/[mrnHash]/. MRNs are never stored or transmitted as plaintext in the URL space.


12. Architectural Evolution

Phase 1 — Core Pipeline (Pre-current)

Initial HL7 and CDA parsers. FHIR R4 output only. Single database. Deployed via Fly.io (config/fly.toml and Procfile are artifacts of this era).

Phase 2 — PHI Isolation + OMOP

PHI DB separated from Platform DB. OMOP CDM 5.4 output added. Athena vocabulary loaded. GKE deployment introduced. Celery workers added for async processing.

Phase 3 — Multi-Tenant Web Platform

Four-shell Next.js app built. Clerk integration for multi-tenant org management. File registry, job tracking, and user management in Platform DB. Admin shell with registration workflows for HIEs and facilities.

Phase 4 (Current) — Production Hardening

Workload Identity replacing service account keys. Cloud Tasks SDK removed in favor of REST enqueue. FHIR validation authenticated. Pipeline enqueue failure surfacing. Y7/Y8/Y9/R2 pipeline stages added (scope unclear). CLI tooling shipped for developer access. SBOM attestation attempted (blocked).

Phase 5 (Planned/Emerging)

Evidence: pricing tiers endpoint, subscription checkout/cancel, revenue stats endpoint, ATS module. Suggests monetization infrastructure is being built. Google Workspace integration under HIE settings. Patient API access self-service. These indicate a move toward a developer-facing API product and patient-controlled data sharing.


13. Key Learnings From Recent Development

  1. Production worker wiring is fragile at this stack depth. Three sequential fix: commits (6d31ec1, 2ee79b5, 1ca44ba) targeted worker deployment within a short window. The GKE → Celery → Redis → GCS → Cloud Tasks chain has multiple auth surfaces that each need independent validation in CI. The smoke test workflow (.github/workflows/smoke-test.yml) should be extended to exercise the full enqueue-to-completion path.

  2. GCS auth migration to Workload Identity was the right call but introduced transient failures. The sequence a4fd140e4b22ee suggests the initial Workload Identity commit (a4fd140) did not fully cover file sync downloads — a second commit was needed. When migrating GCS auth, enumerate every code path that touches GCS independently, not just the primary upload path.

  3. FHIR datetime normalization is a systemic concern. The fix in b955f31 (_normalize_fhir_datetime) corrects compact HL7 date formats. Any field that accepts a date from an HL7 source must be routed through this normalizer. This should be a linting rule in python-pipeline.mdc.

  4. Deferred environment variable guards create distributed risk. Moving NEXT_PUBLIC_BACKEND_URL guard to call sites (commit 19a5e90) trades a single initialization failure for N potential runtime failures. A better pattern is a typed configuration module that validates all required env vars at startup and throws a typed error, so the failure surface is small and explicit.

  5. Rig bot PRs need a merge strategy. 10 open PRs (#51–#60) from an automated tool making overlapping changes to the same files will create conflicts. Establish a policy: bot PRs must be squash-merged or auto-closed after 48 hours if superseded.

  6. The .hypothesis/ corpus being version-controlled helps reproduce failures (the corpus contains examples that previously caused failures, per Hypothesis design). However, the binary blob growth should be monitored. Consider a .hypothesis/.gitignore that keeps examples/ (failure corpus) but excludes constants/ (internal Hypothesis state).


PriorityActionIDRationale
P0Fix users.hospital_id INTEGER / hospitals.id UUID type mismatchDBT-001Silent data integrity failure
P0Audit all NEXT_PUBLIC_BACKEND_URL call sites for missing guardsDBT-002Production reliability
P1Write and run DLQ routing validation after Cloud Tasks → REST migrationUJ-001 / DBT-004Pipeline correctness confirmation
P1Resolve SBOM attestation failure and remove continue-on-errorDBT-003 / BR-001Compliance readiness
P1Document Y7/Y8/Y9/R2 pipeline stages + add E2E testsDBT-006 / UJ-002New stages are untested in visible test tree
P2Close or consolidate Rig bot PRs #51–#60BR-003 / DBT-007PR queue hygiene
P2Merge README local setup section (PR #55)DBT-010Engineer onboarding
P2Confirm Fly.io status and remove config/fly.toml / Procfile if deprecatedDBT-005 / UJ-007Reduce infra confusion
P2Document performance baselines from test_performance.pyTECH-012Regression detection
P3Migrate unversioned admin API routes to /api/v1/ namespaceTECH-013API versioning consistency

This document reflects the repository state as of commit fc207dd. It should be updated after each sprint boundary or any commit that touches architecture, schema, or deployment configuration.