Admin ▸ Data health
Corpus Stats
Electrode & Component Catalog
Build-out of the curated lab catalog and how well it maps to the corpus. Regenerate build-out counts with pnpm catalog:stats. Also on /admin/observability (with a Human/Agent toggle) and /api/platform/health.
Corpus mapping: 2,340 papers name an anode (9.9%), 2,424 a cathode (10.3%), 1,363 both. Organism catalog: 28.
Embedding Coverage — semantic search / RAG
13,788 of 20,974 embeddable papers have an abstract_embedding (65.7% of embeddable; 58.4% of all 23,598 papers). This is the corpus reachable by the lab agent's retrievePapers tool.
System Type — DB column (systemType)
15,489 of 23,598 papers tagged (65.6%). The remaining 8,109 have systemType = NULL. Top-level only — subtypes (single-chamber MFC, etc.) not stored here.
| System type | Count | % of tagged | % of corpus |
|---|---|---|---|
| MFC | 6,862 | 44.3% | 29.1% |
| MES | 6,012 | 38.8% | 25.5% |
| MEC | 1,280 | 8.3% | 5.4% |
| BES | 1,121 | 7.2% | 4.8% |
| MDC | 87 | 0.6% | 0.4% |
| MCDI | 30 | 0.2% | 0.1% |
| MEFS | 23 | 0.1% | 0.1% |
| MREC | 22 | 0.1% | 0.1% |
| MMRC | 13 | 0.1% | 0.1% |
| MNRC | 12 | 0.1% | 0.1% |
| MERC | 8 | 0.1% | 0.0% |
| MODELING | 6 | 0.0% | 0.0% |
| EFC | 5 | 0.0% | 0.0% |
| MRB | 4 | 0.0% | 0.0% |
| other | 3 | 0.0% | 0.0% |
| SMFC | 1 | 0.0% | 0.0% |
| (NULL) | 8,109 | — | 34.4% |
Paper Class — v2 extraction
Coverage: 1,756 of 23,598 papers (7.4%). Only v2-extracted papers are classified by paper_class.
| paper_class | Count | % of v2-extracted |
|---|---|---|
| EXPERIMENTAL | 1,454 | 82.8% |
| OTHER | 182 | 10.4% |
| UNSET | 47 | 2.7% |
| REVIEW | 40 | 2.3% |
| MODELING | 17 | 1.0% |
| PATENT_APPLICATION | 7 | 0.4% |
| META_ANALYSIS | 4 | 0.2% |
| PERSPECTIVE | 3 | 0.2% |
| PATENT_GRANTED | 2 | 0.1% |
System Class — v2 extraction
Coverage: 1,756 of 23,598 papers (7.4%). More granular than the DB systemType — distinguishes BES variants from non-BES, reviews, fundamentals.
| system_class | Count | % of v2 |
|---|---|---|
| MFC | 868 | 49.4% |
| MES | 217 | 12.4% |
| UNSET | 195 | 11.1% |
| MEC | 156 | 8.9% |
| FUNDAMENTAL | 53 | 3.0% |
| MSC | 46 | 2.6% |
| MDC | 43 | 2.4% |
| REVIEW | 40 | 2.3% |
| OTHER | 33 | 1.9% |
| BES | 29 | 1.7% |
| MBES | 22 | 1.3% |
| MERC | 20 | 1.1% |
| not_BES | 19 | 1.1% |
| MNRC | 4 | 0.2% |
| MCDI | 2 | 0.1% |
| MMRC | 2 | 0.1% |
| MESNORK | 2 | 0.1% |
| MREC | 2 | 0.1% |
| MRB | 1 | 0.1% |
| MODELING | 1 | 0.1% |
| MEFS | 1 | 0.1% |
Deployment Scale — v2 extraction
Coverage: 1,756 of 23,598 papers (7.4%). Lab vs pilot vs full-scale, classified by v2 only.
Coverage Gaps
| Layer | Covered | % of corpus |
|---|---|---|
| PDF on disk (pdfHash populated) | 8,574 / 23,598 | 36.3% |
| AI summary (Groq batch) | 10,633 / 23,598 | 45.1% |
| v1 extraction (any pdfExtractionStatus) | 8,617 / 23,598 | 36.5% |
| v2 extraction (values_v2.json on disk) | 1,756 / 23,598 | 7.4% |
| systemType (DB column) | 15,489 / 23,598 | 65.6% |
Schema & rows: prod vs local
Read-only audit. Approximate counts come from pg_stat_user_tables.n_live_tup (post-ANALYZE accurate). Click Recompute exact counts for ground-truth SELECT COUNT(*) on every shared table (5–15s on prod).
Migrations: prod vs local
Rolled back — local: 3, prod: 3
| Migration | rolled_back_at | checksum |
|---|---|---|
| 20260509140000_add_research_paper_browse_indexes | 2026-05-13 15:32:30 | efaae787… |
| 20260515192928_equation_kind_enum | 2026-05-15 23:38:34 | 93a2db44… |
| 20260523194600_add_multiscale_moat_tables_v3 | 2026-06-03 17:15:02 | 9c150285… |
| 20260509140000_add_research_paper_browse_indexes | 2026-05-13 15:32:30 | efaae787… |
| 20260515192928_equation_kind_enum | 2026-05-15 23:38:34 | 93a2db44… |
| 20260523194600_add_multiscale_moat_tables_v3 | 2026-06-03 17:15:02 | 9c150285… |
| Account | 3 | 3 | 0 | 0.0% | |
| AgentRun | 0 | 0 | 0 | — | |
| AiGeometryRecipe | 1 | 1 | 0 | 0.0% | |
| AiMaterialDefinition | 1 | 1 | 0 | 0.0% | |
| AiMicrobeDefinition | 0 | 0 | 0 | — | |
| AnomalousPaper | 47 | 47 | 0 | 0.0% | |
| ApiKey | 0 | 0 | 0 | — | |
| AuditLog | 0 | 0 | 0 | — | |
| BetaSignup | 0 | 0 | 0 | — | |
| BiofilmCreepCurve | 0 | 0 | 0 | — | |
| BiofilmSample | 0 | 0 | 0 | — | |
| BiologicalParameter | 0 | 0 | 0 | — | |
| BufferChemistryProfile | 0 | 0 | 0 | — | |
| CalibrationResult | 149 | 149 | 0 | 0.0% | |
| ConditionSet | 14,579 | 14,579 | 0 | 0.0% | |
| ConditionSetMergeAudit | 31,385 | 31,385 | 0 | 0.0% | |
| CrossSystemPrediction | 95 | 95 | 0 | 0.0% | |
| CustomField | 0 | 0 | 0 | — | |
| DataClassificationRule | 0 | 0 | 0 | — | |
| Dataset | 41 | 41 | 0 | 0.0% | |
| DatasetCurvePoint | 72,203 | 72,203 | 0 | 0.0% | |
| DatasetMaterial | 5 | 5 | 0 | 0.0% | |
| DatasetMeasurement | 65,189 | 65,189 | 0 | 0.0% | |
| DatasetParameter | 98 | 98 | 0 | 0.0% | |
| EETPathwayAssignment | 0 | 0 | 0 | — | |
| EISPoint | 634 | 634 | 0 | 0.0% | |
| ElectrochemicalKinetic | 669 | 669 | 0 | 0.0% | |
| ElectrochemicalParameter | 0 | 0 | 0 | — | |
| ElectrodeFormulation | 0 | 0 | 0 | — | |
| EnvironmentalParameter | 0 | 0 | 0 | — | |
| EvalGateRun | 0 | 0 | 0 | — | |
| EvalResult | 0 | 0 | 0 | — | |
| Experiment | 0 | 0 | 0 | — | |
| ExperimentCollaborator | 0 | 0 | 0 | — | |
| ExperimentEvent | 0 | 0 | 0 | — | |
| ExperimentPaper | 0 | 0 | 0 | — | |
| ExperimentalContext | 2,788 | 2,788 | 0 | 0.0% | |
| ExtractedFigureData | 1,761 | 1,761 | 0 | 0.0% | |
| ExtractedPaperData | 1,512 | 1,512 | 0 | 0.0% | |
| ExtractedParameterData | 224,237 | 224,237 | 0 | 0.0% | |
| ExtractedTableData | 2 | 2 | 0 | 0.0% | |
| ExtractionJob | 4,183 | 4,183 | 0 | 0.0% | |
| ExtractionProvenance | 0 | 0 | 0 | — | |
| Feedback | 100 | 100 | 0 | 0.0% | |
| FeedbackAnalytics | 1 | 1 | 0 | 0.0% | |
| FeedbackNotification | 0 | 0 | 0 | — | |
| GapSearchRun | 0 | 0 | 0 | — | |
| Hypothesis | 0 | 0 | 0 | — | |
| IntegrationMapping | 0 | 0 | 0 | — | |
| KineticCurve | 0 | 0 | 0 | — | |
| KnowledgeEdge | 2,589 | 2,589 | 0 | 0.0% | |
| KnowledgeNode | 6,777 | 6,777 | 0 | 0.0% | |
| LabConfiguration | 1 | 1 | 0 | 0.0% | |
| LabConfigurationSnapshot | 0 | 0 | 0 | — | |
| LabWastewaterQueryLog | 0 | 0 | 0 | — | |
| LearnedDagEdge | 15 | 15 | 0 | 0.0% | |
| MESProduct | 0 | 0 | 0 | — | |
| MESProductYield | 0 | 0 | 0 | — | |
| MFCDesign | 0 | 0 | 0 | — | |
| Material | 73 | 73 | 0 | 0.0% | |
| MaterialClassification | 0 | 0 | 0 | — | |
| MaterialMicrobeAffinity | 33 | 33 | 0 | 0.0% | |
| MaterialPaperCrossref | 782 | 782 | 0 | 0.0% | |
| MaterialParameter | 0 | 0 | 0 | — | |
| Measurement | 0 | 0 | 0 | — | |
| MetagenomicAnalysis | 0 | 0 | 0 | — | |
| MetagenomicPaperLink | 0 | 0 | 0 | — | |
| MethodologyPreset | 0 | 0 | 0 | — | |
| Microbe | 28 | 28 | 0 | 0.0% | |
| MicrobeCytochrome | 20 | 20 | 0 | 0.0% | |
| MicrobeEngineeringEvent | 5 | 5 | 0 | 0.0% | |
| MicrobeKineticConstant | 181 | 181 | 0 | 0.0% | |
| MicrobeOmicsStudy | 4 | 4 | 0 | 0.0% | |
| MicrobePerformanceMeasurement | 0 | 0 | 0 | — | |
| MicrobeReference | 81 | 81 | 0 | 0.0% | |
| MicrobeShuttle | 4 | 4 | 0 | 0.0% | |
| MicrobeSubstrateProductPair | 28 | 28 | 0 | 0.0% | |
| MicroelectrodeProfile | 0 | 0 | 0 | — | |
| Model | 0 | 0 | 0 | — | |
| OperatingCondition | 0 | 0 | 0 | — | |
| OperationalParameter | 0 | 0 | 0 | — | |
| PageComment | 0 | 0 | 0 | — | |
| PaperChunk | 0 | 0 | 0 | — | |
| PaperMaterial | 481 | 481 | 0 | 0.0% | |
| PaperMergeAudit | 4,152 | 4,152 | 0 | 0.0% | |
| PaperMicrobe | 281 | 281 | 0 | 0.0% | |
| PaperParameter | 7,373 | 7,373 | 0 | 0.0% | |
| PaperRelationship | 0 | 0 | 0 | — | |
| ParameterClassification | 706 | 706 | 0 | 0.0% | |
| ParameterConditionLink | 300,254 | 300,254 | 0 | 0.0% | |
| ParameterDefinition | 835 | 835 | 0 | 0.0% | |
| ParameterDistribution_v2matview | 696 | 696 | 0 | 0.0% | |
| ParameterEdge | 2,812 | 2,812 | 0 | 0.0% | |
| ParameterObservation | 689 | 689 | 0 | 0.0% | |
| ParameterPrior | 2,501 | 2,501 | 0 | 0.0% | |
| ParameterProvenance | 6,085 | 6,085 | 0 | 0.0% | |
| ParameterTemplate | 0 | 0 | 0 | — | |
| PasswordResetToken | 13 | 13 | 0 | 0.0% | |
| Permission | 0 | 0 | 0 | — | |
| PolarizationPoint | 3,292 | 3,292 | 0 | 0.0% | |
| Prediction | 31 | 31 | 0 | 0.0% | |
| PredictionOutcome | 0 | 0 | 0 | — | |
| PriorStratumAxis | 472 | 472 | 0 | 0.0% | |
| Project | 0 | 0 | 0 | — | |
| ReactorGeometry | 1,235 | 1,235 | 0 | 0.0% | |
| ResearchCluster | 0 | 0 | 0 | — | |
| ResearchPaper | 23,598 analyzed 2026-05-06 | 23,598 analyzed 2026-05-06 | 0 | 0.0% | |
| ResearchPaperEquation | 62 | 62 | 0 | 0.0% | |
| ResearchTrend | 0 | 0 | 0 | — | |
| Run | 0 | 0 | 0 | — | |
| Session | 0 | 0 | 0 | — | |
| SharedView | 0 | 0 | 0 | — | |
| SimulationReplay | 0 | 0 | 0 | — | |
| SimulationResult | 0 | 0 | 0 | — | |
| SubstrateClassification | 60 | 60 | 0 | 0.0% | |
| SurveyResponse | 5 | 5 | 0 | 0.0% | |
| SymbolicLaw | 2 | 2 | 0 | 0.0% | |
| Team | 0 | 0 | 0 | — | |
| TrainedModelLineage | 0 | 0 | 0 | — | |
| User | 58 | 58 | 0 | 0.0% | |
| VerificationToken | 43 | 43 | 0 | 0.0% | |
| WastewaterFeedback | 0 | 0 | 0 | — | |
| WikiEntry | 834 | 834 | 0 | 0.0% | |
| WikiRevision | 834 | 834 | 0 | 0.0% | |
| WikiRevisionSource | 133 | 133 | 0 | 0.0% | |
| Workflow | 0 | 0 | 0 | — | |
| WorkstreamArtifact | 0 | 0 | 0 | — | |
| _prisma_migrations | 81 | 81 | 0 | 0.0% |
postgres://postgres.ytgmbbwtawldnunndcnd:***@aws-1-eu-central-1.pooler.supabase.com:6543/postgres?sslmode=require&pgbouncer=true&connection_limit=1&pool_timeout=20Prod: postgres://postgres.ytgmbbwtawldnunndcnd:***@aws-1-eu-central-1.pooler.supabase.com:5432/postgres?sslmode=requireTotal shared rows — local: 787,922, prod: 787,922Supabase-managed schemas (auth, storage, realtime, vault, supabase_functions, extensions, net, _realtime) are intentionally excluded.
Honesty notes
- Subtype taxonomy (22 MFC subtypes, 8 MEC subtypes, etc.) is not yet classified on most papers. v2 captures
chamber_countand electrode/material fields, but the full single_chamber_air_cathode / dual_chamber / tubular / etc. taxonomy needs a follow-up classifier pass. - v2 coverage is 7.4% — distributions above are indicative, not yet representative of the whole corpus.
- 676 duplicate paper rows from the 2026-05-09 audit (issue#194) are still in the DB; numbers above include them. Once the merge migration runs, those archived rows will drop out of the canonical view.