stemedb/cmd/demo-seed/drugs.go
jordan 157dbbb9eb feat: Complete Aphoria Phase 8-9 + UAT suite (90/90 tests passing)
## Phase 8: Enterprise Extractor Improvements 
- 14 security extractors (TLS, JWT, SQL injection, XSS, etc.)
- 10 framework-specific extractors (Spring, Django, Rails, etc.)
- Config file security detection (YAML, TOML)

## Phase 9: Autonomous Extractor Generation 
- Shadow mode executor with TP/FP tracking
- Graduation pipeline with confidence thresholds
- Auto-rollback on regression detection
- Cross-project pattern syncing

## UAT Suite Complete (14 scripts, 90 tests)
- test-core-detection.sh (6 tests)
- test-declarative-extractors.sh (5 tests)
- test-domain-frameworks.sh (5 tests)
- test-domain-unreal.sh (3 tests)
- test-llm-extraction.sh (6 tests)
- test-eval-harness.sh (5 tests)
- test-cross-language.sh (3 tests)
- test-precommit-performance.sh (4 tests)
- test-output-formats.sh (8 tests)
- test-drift-detection.sh (6 tests)
- test-exit-codes.sh (12 tests)
+ 3 more scripts

## Other Changes
- Updated roadmap to mark Phase 8-9 complete
- Added .gitignore entries for build artifacts
- Updated pre-commit: 800 line limit, exclude tests/data/cmd

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-06 22:50:55 -07:00

2704 lines
103 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Package main provides drug assertion builders for P2.2 Conflict Scenarios.
//
// This file contains builders for 3 GLP-1 drugs with genuine pharmaceutical
// data conflicts. The data is based on real FDA labels, clinical trials, and
// patient reports, showcasing how StemeDB handles disagreements between
// authoritative sources.
//
// Target: 150+ assertions across 3 drugs with conflict scores ~0.3-0.8
package main
import (
"context"
"fmt"
"log"
"github.com/orchard9/stemedb-go/steme"
)
// DrugAssertionConfig holds configuration for building drug assertions.
type DrugAssertionConfig struct {
// Agent is the agent name from the registry
Agent string
// Subject is the assertion subject (e.g., "Semaglutide:ChronicWeightManagement")
Subject string
// Predicate is the assertion predicate (e.g., "weight_loss_percent")
Predicate string
// Value is the assertion value (Number, Text, or Boolean)
Value steme.ObjectValue
// Confidence is the confidence score (0.0 to 1.0)
Confidence float64
// Lifecycle is the assertion lifecycle stage
Lifecycle steme.LifecycleStage
// Source is the source from the registry
Source Source
}
// populateDrugConflicts populates all 3 drug conflict scenarios.
func populateDrugConflicts(ctx context.Context, registry *AgentRegistry, baseURL string) {
fmt.Println("=== P2.2: Populating Drug Conflict Scenarios ===")
fmt.Println()
// Semaglutide (core assertions)
semaglutideCount := populateSemaglutide(ctx, registry, baseURL)
fmt.Printf(" Semaglutide: %d assertions\n", semaglutideCount)
// Tirzepatide (core assertions)
tirzepatideCount := populateTirzepatide(ctx, registry, baseURL)
fmt.Printf(" Tirzepatide: %d assertions\n", tirzepatideCount)
// Liraglutide (core assertions)
liraglutideCount := populateLiraglutide(ctx, registry, baseURL)
fmt.Printf(" Liraglutide: %d assertions\n", liraglutideCount)
// Head-to-head comparisons
comparisonCount := populateComparisons(ctx, registry, baseURL)
fmt.Printf(" Comparisons: %d assertions\n", comparisonCount)
// Mechanism/Pharmacology details
mechanismCount := populateMechanismData(ctx, registry, baseURL)
fmt.Printf(" Mechanism: %d assertions\n", mechanismCount)
// Community/Real-world data
communityCount := populateCommunityData(ctx, registry, baseURL)
fmt.Printf(" Community: %d assertions\n", communityCount)
// P2.4: Historical data with lifecycle evolution
historicalCount := populateHistoricalData(ctx, registry, baseURL)
fmt.Printf(" Historical: %d assertions\n", historicalCount)
// P2.3: Cascade invalidation demo data
cascadeCount := populateCascadeData(ctx, registry, baseURL)
fmt.Printf(" Cascade Demo: %d assertions\n", cascadeCount)
total := semaglutideCount + tirzepatideCount + liraglutideCount + comparisonCount + mechanismCount + communityCount + historicalCount + cascadeCount
fmt.Printf("\n Total: %d assertions\n", total)
fmt.Println()
}
// submitAssertion submits a single assertion and returns success.
func submitAssertion(ctx context.Context, registry *AgentRegistry, baseURL string, cfg DrugAssertionConfig) bool {
signer, ok := registry.signers[cfg.Agent]
if !ok {
log.Printf("Warning: Unknown agent %s", cfg.Agent)
return false
}
client := steme.NewClient(baseURL, signer)
assertion := steme.NewAssertion(cfg.Subject, cfg.Predicate).
WithObject(cfg.Value).
WithConfidence(cfg.Confidence).
WithLifecycle(cfg.Lifecycle).
WithSourceClass(cfg.Source.Class).
WithSourceHash(cfg.Source.Hash()).
Build()
_, err := client.Assert(ctx, assertion)
if err != nil {
log.Printf("Warning: Failed to create assertion %s/%s: %v", cfg.Subject, cfg.Predicate, err)
return false
}
return true
}
// submitAssertions submits a batch of assertions and returns the count.
func submitAssertions(ctx context.Context, registry *AgentRegistry, baseURL string, configs []DrugAssertionConfig) int {
count := 0
for _, cfg := range configs {
if submitAssertion(ctx, registry, baseURL, cfg) {
count++
}
}
return count
}
// =============================================================================
// SEMAGLUTIDE (Ozempic, Wegovy, Rybelsus)
// =============================================================================
func populateSemaglutide(ctx context.Context, registry *AgentRegistry, baseURL string) int {
configs := []DrugAssertionConfig{}
// -------------------------------------------------------------------------
// CONFLICT 1: Weight Loss % (The Flagship Demo)
// This is the killer conflict - same metric, different values from different tiers
// -------------------------------------------------------------------------
// FDA Wegovy Label (T0): 14.9% from STEP 1 pivotal
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Semaglutide:ChronicWeightManagement",
Predicate: "weight_loss_percent",
Value: steme.NewNumberValue(14.9),
Confidence: 0.98,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_WEGOVY_LABEL"],
})
// STEP 1 Trial (T1): 14.9% (CI 13.5-16.4)
configs = append(configs, DrugAssertionConfig{
Agent: "clinicaltrials:study-importer",
Subject: "Semaglutide:ChronicWeightManagement",
Predicate: "weight_loss_percent",
Value: steme.NewNumberValue(14.9),
Confidence: 0.95,
Lifecycle: steme.LifecycleApproved,
Source: Sources["TRIAL_STEP_1"],
})
// STEP UP Trial (T1): 20.7% at 7.2mg dose (higher dose study)
configs = append(configs, DrugAssertionConfig{
Agent: "clinicaltrials:study-importer",
Subject: "Semaglutide:ChronicWeightManagement",
Predicate: "weight_loss_percent",
Value: steme.NewNumberValue(20.7),
Confidence: 0.92,
Lifecycle: steme.LifecycleApproved,
Source: Sources["TRIAL_STEP_UP"],
})
// Expert (T3): ~15% typical in practice
configs = append(configs, DrugAssertionConfig{
Agent: "internal:clinical-ops-reviewer",
Subject: "Semaglutide:ChronicWeightManagement",
Predicate: "weight_loss_percent",
Value: steme.NewNumberValue(15.0),
Confidence: 0.85,
Lifecycle: steme.LifecycleApproved,
Source: Sources["EXPERT_ENDOCRINE_SOCIETY"],
})
// Reddit (T5): Anecdotal reports vary wildly
configs = append(configs, DrugAssertionConfig{
Agent: "reddit:health-discussion-scraper",
Subject: "Semaglutide:ChronicWeightManagement",
Predicate: "weight_loss_percent",
Value: steme.NewTextValue("Reports range 10-25%, highly variable"),
Confidence: 0.70,
Lifecycle: steme.LifecycleProposed,
Source: Sources["ANECDOTAL_REDDIT_OZEMPIC"],
})
// -------------------------------------------------------------------------
// CONFLICT 2: Gastroparesis Risk (Real-World vs Clinical Trial)
// This demonstrates how clinical trials underreport vs real-world evidence
// -------------------------------------------------------------------------
// FDA Label (T0): 0.2% trial incidence
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Semaglutide",
Predicate: "gastroparesis_risk",
Value: steme.NewNumberValue(0.002), // 0.2%
Confidence: 0.95,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_WEGOVY_LABEL"],
})
// UBC Study (T2): 3x risk vs bupropion-naltrexone
configs = append(configs, DrugAssertionConfig{
Agent: "pubmed:abstract-indexer",
Subject: "Semaglutide",
Predicate: "gastroparesis_risk",
Value: steme.NewTextValue("3.67x increased risk vs bupropion-naltrexone (HR 3.67, 95% CI 1.15-11.90)"),
Confidence: 0.88,
Lifecycle: steme.LifecycleApproved,
Source: Sources["RWE_UBC_GASTROPARESIS"],
})
// FAERS Data (T2): Higher signal
configs = append(configs, DrugAssertionConfig{
Agent: "pubmed:abstract-indexer",
Subject: "Semaglutide",
Predicate: "gastroparesis_risk",
Value: steme.NewTextValue("Elevated reporting rate vs background (PRR 2.8)"),
Confidence: 0.82,
Lifecycle: steme.LifecycleUnderReview,
Source: Sources["RWE_FAERS_SEMAGLUTIDE"],
})
// Expert (T3): Acknowledgment of signal
configs = append(configs, DrugAssertionConfig{
Agent: "internal:clinical-ops-reviewer",
Subject: "Semaglutide",
Predicate: "gastroparesis_risk",
Value: steme.NewTextValue("Risk signal acknowledged; monitor patients with pre-existing GI conditions"),
Confidence: 0.80,
Lifecycle: steme.LifecycleApproved,
Source: Sources["EXPERT_ADA_GUIDELINES"],
})
// Reddit (T5): High patient-reported incidence
configs = append(configs, DrugAssertionConfig{
Agent: "reddit:health-discussion-scraper",
Subject: "Semaglutide",
Predicate: "gastroparesis_risk",
Value: steme.NewTextValue("Many users report stomach paralysis symptoms; underreported in trials"),
Confidence: 0.70,
Lifecycle: steme.LifecycleProposed,
Source: Sources["ANECDOTAL_REDDIT_OZEMPIC"],
})
// -------------------------------------------------------------------------
// CONFLICT 3: Nausea Rate (Investigator vs Patient-Reported)
// -------------------------------------------------------------------------
// FDA Label (T0): 44% from clinical trials
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Semaglutide",
Predicate: "nausea_rate",
Value: steme.NewNumberValue(0.44), // 44%
Confidence: 0.97,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_WEGOVY_LABEL"],
})
// STEP 1 Trial (T1): 44.2%
configs = append(configs, DrugAssertionConfig{
Agent: "clinicaltrials:study-importer",
Subject: "Semaglutide",
Predicate: "nausea_rate",
Value: steme.NewNumberValue(0.442),
Confidence: 0.95,
Lifecycle: steme.LifecycleApproved,
Source: Sources["TRIAL_STEP_1"],
})
// Real-World (T2): More disruptive
configs = append(configs, DrugAssertionConfig{
Agent: "pubmed:abstract-indexer",
Subject: "Semaglutide",
Predicate: "nausea_rate",
Value: steme.NewTextValue("Real-world: nausea more severe/disruptive than trial reports suggest"),
Confidence: 0.78,
Lifecycle: steme.LifecycleApproved,
Source: Sources["RWE_TRINETX_GLP1"],
})
// Reddit (T5): Debilitating for some
configs = append(configs, DrugAssertionConfig{
Agent: "reddit:health-discussion-scraper",
Subject: "Semaglutide",
Predicate: "nausea_rate",
Value: steme.NewTextValue("Debilitating for first weeks; many struggle with dose titration"),
Confidence: 0.68,
Lifecycle: steme.LifecycleProposed,
Source: Sources["ANECDOTAL_REDDIT_OZEMPIC"],
})
// -------------------------------------------------------------------------
// Efficacy: HbA1c Reduction (T2D indication)
// -------------------------------------------------------------------------
// FDA Ozempic Label (T0)
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Semaglutide:Type2Diabetes",
Predicate: "hba1c_reduction_percent",
Value: steme.NewNumberValue(1.5),
Confidence: 0.98,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_OZEMPIC_LABEL"],
})
// SUSTAIN-6 Trial (T1)
configs = append(configs, DrugAssertionConfig{
Agent: "clinicaltrials:study-importer",
Subject: "Semaglutide:Type2Diabetes",
Predicate: "hba1c_reduction_percent",
Value: steme.NewNumberValue(1.4),
Confidence: 0.95,
Lifecycle: steme.LifecycleApproved,
Source: Sources["TRIAL_SUSTAIN_6"],
})
// -------------------------------------------------------------------------
// Safety: Cardiovascular Benefit (SELECT Trial)
// -------------------------------------------------------------------------
// SELECT Trial (T1): 20% CV event reduction
configs = append(configs, DrugAssertionConfig{
Agent: "clinicaltrials:study-importer",
Subject: "Semaglutide:CardiovascularDisease",
Predicate: "cardiovascular_events_reduction",
Value: steme.NewNumberValue(0.20), // 20% reduction
Confidence: 0.94,
Lifecycle: steme.LifecycleApproved,
Source: Sources["TRIAL_SELECT"],
})
// FDA Label updated (T0)
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Semaglutide:CardiovascularDisease",
Predicate: "cardiovascular_events_reduction",
Value: steme.NewTextValue("Approved for CV risk reduction in adults with obesity"),
Confidence: 0.98,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_WEGOVY_LABEL"],
})
// -------------------------------------------------------------------------
// Safety: Discontinuation Rate
// -------------------------------------------------------------------------
// FDA Label (T0)
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Semaglutide",
Predicate: "discontinuation_rate_adverse_events",
Value: steme.NewNumberValue(0.07), // 7%
Confidence: 0.95,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_WEGOVY_LABEL"],
})
// Real-World (T2): Higher in practice
configs = append(configs, DrugAssertionConfig{
Agent: "pubmed:abstract-indexer",
Subject: "Semaglutide",
Predicate: "discontinuation_rate_adverse_events",
Value: steme.NewNumberValue(0.15), // 15% in real-world
Confidence: 0.82,
Lifecycle: steme.LifecycleApproved,
Source: Sources["RWE_IQVIA_ADHERENCE"],
})
// -------------------------------------------------------------------------
// Additional Safety Predicates
// -------------------------------------------------------------------------
// Vomiting rate
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Semaglutide",
Predicate: "vomiting_rate",
Value: steme.NewNumberValue(0.24), // 24%
Confidence: 0.97,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_WEGOVY_LABEL"],
})
// Diarrhea rate
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Semaglutide",
Predicate: "diarrhea_rate",
Value: steme.NewNumberValue(0.30), // 30%
Confidence: 0.97,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_WEGOVY_LABEL"],
})
// Constipation rate
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Semaglutide",
Predicate: "constipation_rate",
Value: steme.NewNumberValue(0.24), // 24%
Confidence: 0.97,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_WEGOVY_LABEL"],
})
// Pancreatitis risk (boxed warning)
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Semaglutide",
Predicate: "pancreatitis_risk",
Value: steme.NewTextValue("Warning: acute pancreatitis observed; discontinue if suspected"),
Confidence: 0.99,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_WEGOVY_LABEL"],
})
// Thyroid C-cell tumor warning
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Semaglutide",
Predicate: "has_boxed_warning",
Value: steme.NewBooleanValue(true),
Confidence: 1.0,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_WEGOVY_LABEL"],
})
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Semaglutide",
Predicate: "boxed_warning_text",
Value: steme.NewTextValue("Thyroid C-Cell Tumors: contraindicated in MTC or MEN 2"),
Confidence: 1.0,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_WEGOVY_LABEL"],
})
// Gallbladder disease risk
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Semaglutide",
Predicate: "gallbladder_disease_risk",
Value: steme.NewTextValue("Cholelithiasis/cholecystitis reported; monitor for symptoms"),
Confidence: 0.95,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_WEGOVY_LABEL"],
})
// Hypoglycemia risk
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Semaglutide",
Predicate: "hypoglycemia_risk",
Value: steme.NewTextValue("Low risk alone; increased when combined with insulin or sulfonylureas"),
Confidence: 0.96,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_OZEMPIC_LABEL"],
})
// Injection site reactions
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Semaglutide",
Predicate: "injection_site_reaction_rate",
Value: steme.NewNumberValue(0.02), // 2%
Confidence: 0.95,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_WEGOVY_LABEL"],
})
// Muscle loss concerns (emerging)
configs = append(configs, DrugAssertionConfig{
Agent: "pubmed:abstract-indexer",
Subject: "Semaglutide",
Predicate: "muscle_loss_observed",
Value: steme.NewTextValue("39% of weight loss from lean mass in STEP 1"),
Confidence: 0.85,
Lifecycle: steme.LifecycleApproved,
Source: Sources["TRIAL_STEP_1"],
})
configs = append(configs, DrugAssertionConfig{
Agent: "reddit:health-discussion-scraper",
Subject: "Semaglutide",
Predicate: "muscle_loss_observed",
Value: steme.NewTextValue("'Ozempic face' and muscle wasting commonly reported"),
Confidence: 0.65,
Lifecycle: steme.LifecycleProposed,
Source: Sources["ANECDOTAL_REDDIT_OZEMPIC"],
})
// Hair loss reports (anecdotal)
configs = append(configs, DrugAssertionConfig{
Agent: "reddit:health-discussion-scraper",
Subject: "Semaglutide",
Predicate: "hair_loss_reported",
Value: steme.NewTextValue("Many users report hair thinning/loss, possibly from rapid weight loss"),
Confidence: 0.60,
Lifecycle: steme.LifecycleProposed,
Source: Sources["ANECDOTAL_REDDIT_OZEMPIC"],
})
// -------------------------------------------------------------------------
// Mechanism / Pharmacology
// -------------------------------------------------------------------------
// Primary target
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Semaglutide:GLP1R",
Predicate: "primary_target",
Value: steme.NewTextValue("GLP-1 receptor agonist (94% homology to native GLP-1)"),
Confidence: 1.0,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_WEGOVY_LABEL"],
})
// Half-life
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Semaglutide",
Predicate: "half_life_hours",
Value: steme.NewNumberValue(168), // ~7 days
Confidence: 0.98,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_WEGOVY_LABEL"],
})
// Bioavailability (oral)
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Semaglutide",
Predicate: "bioavailability_percent",
Value: steme.NewNumberValue(0.89), // 89% for injection
Confidence: 0.95,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_WEGOVY_LABEL"],
})
// -------------------------------------------------------------------------
// Regulatory / Approval
// -------------------------------------------------------------------------
// FDA approval date (Wegovy for obesity)
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Semaglutide",
Predicate: "fda_approval_date",
Value: steme.NewTextValue("2021-06-04 (Wegovy for chronic weight management)"),
Confidence: 1.0,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_WEGOVY_LABEL"],
})
// Approved indications
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Semaglutide",
Predicate: "approved_indications",
Value: steme.NewTextValue("Chronic weight management (BMI >=30 or >=27 with comorbidity); Type 2 diabetes; CV risk reduction"),
Confidence: 1.0,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_WEGOVY_LABEL"],
})
// Max approved dose
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Semaglutide",
Predicate: "max_approved_dose_mg",
Value: steme.NewNumberValue(2.4), // Wegovy max
Confidence: 1.0,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_WEGOVY_LABEL"],
})
// -------------------------------------------------------------------------
// STEP 2 Trial Data (T2D population)
// -------------------------------------------------------------------------
configs = append(configs, DrugAssertionConfig{
Agent: "clinicaltrials:study-importer",
Subject: "Semaglutide:Type2Diabetes",
Predicate: "weight_loss_percent",
Value: steme.NewNumberValue(9.6), // Lower in T2D population
Confidence: 0.94,
Lifecycle: steme.LifecycleApproved,
Source: Sources["TRIAL_STEP_2"],
})
// -------------------------------------------------------------------------
// Expert Guidelines Integration
// -------------------------------------------------------------------------
// ADA recommendation
configs = append(configs, DrugAssertionConfig{
Agent: "internal:clinical-ops-reviewer",
Subject: "Semaglutide:Type2Diabetes",
Predicate: "response_rate",
Value: steme.NewTextValue("Recommended as first-line injectable for patients with T2D and obesity (ADA 2024)"),
Confidence: 0.92,
Lifecycle: steme.LifecycleApproved,
Source: Sources["EXPERT_ADA_GUIDELINES"],
})
return submitAssertions(ctx, registry, baseURL, configs)
}
// =============================================================================
// TIRZEPATIDE (Mounjaro, Zepbound)
// =============================================================================
func populateTirzepatide(ctx context.Context, registry *AgentRegistry, baseURL string) int {
configs := []DrugAssertionConfig{}
// -------------------------------------------------------------------------
// CONFLICT 3: Weight Loss % (Highest Efficacy GLP-1)
// -------------------------------------------------------------------------
// FDA Zepbound Label (T0): 20.9% at 15mg
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Tirzepatide:ChronicWeightManagement",
Predicate: "weight_loss_percent",
Value: steme.NewNumberValue(20.9),
Confidence: 0.98,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_ZEPBOUND_LABEL"],
})
// SURMOUNT-1 Trial (T1): 22.5% at 72 weeks
configs = append(configs, DrugAssertionConfig{
Agent: "clinicaltrials:study-importer",
Subject: "Tirzepatide:ChronicWeightManagement",
Predicate: "weight_loss_percent",
Value: steme.NewNumberValue(22.5),
Confidence: 0.96,
Lifecycle: steme.LifecycleApproved,
Source: Sources["TRIAL_SURMOUNT_1"],
})
// 3-Year Extension (T1): 22.9% sustained
configs = append(configs, DrugAssertionConfig{
Agent: "clinicaltrials:study-importer",
Subject: "Tirzepatide:ChronicWeightManagement",
Predicate: "weight_loss_percent",
Value: steme.NewNumberValue(22.9),
Confidence: 0.93,
Lifecycle: steme.LifecycleApproved,
Source: Sources["TRIAL_SURMOUNT_3YR"],
})
// Expert (T3): Best-in-class
configs = append(configs, DrugAssertionConfig{
Agent: "internal:clinical-ops-reviewer",
Subject: "Tirzepatide:ChronicWeightManagement",
Predicate: "weight_loss_percent",
Value: steme.NewTextValue("Highest efficacy among GLP-1s; ~22% typical at max dose"),
Confidence: 0.88,
Lifecycle: steme.LifecycleApproved,
Source: Sources["EXPERT_AACE_OBESITY"],
})
// Reddit (T5): Variable reports
configs = append(configs, DrugAssertionConfig{
Agent: "reddit:health-discussion-scraper",
Subject: "Tirzepatide:ChronicWeightManagement",
Predicate: "weight_loss_percent",
Value: steme.NewTextValue("Users report 15-30% loss; 'game changer' for some"),
Confidence: 0.68,
Lifecycle: steme.LifecycleProposed,
Source: Sources["ANECDOTAL_REDDIT_MOUNJARO"],
})
// -------------------------------------------------------------------------
// CONFLICT 4: Nausea/GI Side Effects (Trade-off)
// Tirzepatide has highest efficacy but also GI issues
// -------------------------------------------------------------------------
// FDA Label (T0): 17% nausea (lower than reported in practice)
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Tirzepatide",
Predicate: "nausea_rate",
Value: steme.NewNumberValue(0.17), // 17%
Confidence: 0.97,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_ZEPBOUND_LABEL"],
})
// SURMOUNT-1 (T1): 29.3% all GI AEs
configs = append(configs, DrugAssertionConfig{
Agent: "clinicaltrials:study-importer",
Subject: "Tirzepatide",
Predicate: "adverse_event_rate",
Value: steme.NewTextValue("GI AEs: nausea 24.6%, diarrhea 21.1%, constipation 17.1%"),
Confidence: 0.95,
Lifecycle: steme.LifecycleApproved,
Source: Sources["TRIAL_SURMOUNT_1"],
})
// Real-World (T2): Higher GI issues
configs = append(configs, DrugAssertionConfig{
Agent: "pubmed:abstract-indexer",
Subject: "Tirzepatide",
Predicate: "nausea_rate",
Value: steme.NewTextValue("Real-world GI AE rates higher than trials; dose titration critical"),
Confidence: 0.80,
Lifecycle: steme.LifecycleApproved,
Source: Sources["RWE_OPTUM_TIRZEPATIDE"],
})
// Reddit (T5): Trade-off discussion
configs = append(configs, DrugAssertionConfig{
Agent: "reddit:health-discussion-scraper",
Subject: "Tirzepatide",
Predicate: "nausea_rate",
Value: steme.NewTextValue("'Worth it for the weight loss' but GI sides are real; slow titration helps"),
Confidence: 0.65,
Lifecycle: steme.LifecycleProposed,
Source: Sources["ANECDOTAL_REDDIT_MOUNJARO"],
})
// -------------------------------------------------------------------------
// Gastroparesis Risk (Tirzepatide)
// -------------------------------------------------------------------------
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Tirzepatide",
Predicate: "gastroparesis_risk",
Value: steme.NewTextValue("Delayed gastric emptying observed; caution with preexisting GI disorders"),
Confidence: 0.94,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_ZEPBOUND_LABEL"],
})
configs = append(configs, DrugAssertionConfig{
Agent: "pubmed:abstract-indexer",
Subject: "Tirzepatide",
Predicate: "gastroparesis_risk",
Value: steme.NewTextValue("Similar risk profile to semaglutide; may be higher due to dual agonism"),
Confidence: 0.78,
Lifecycle: steme.LifecycleUnderReview,
Source: Sources["RWE_UBC_GASTROPARESIS"],
})
// -------------------------------------------------------------------------
// Efficacy: HbA1c Reduction (T2D)
// -------------------------------------------------------------------------
// FDA Mounjaro Label (T0): Best HbA1c reduction
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Tirzepatide:Type2Diabetes",
Predicate: "hba1c_reduction_percent",
Value: steme.NewNumberValue(2.4), // Best in class
Confidence: 0.98,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_MOUNJARO_LABEL"],
})
// SURMOUNT-2 (T1): T2D population
configs = append(configs, DrugAssertionConfig{
Agent: "clinicaltrials:study-importer",
Subject: "Tirzepatide:Type2Diabetes",
Predicate: "hba1c_reduction_percent",
Value: steme.NewNumberValue(2.1),
Confidence: 0.95,
Lifecycle: steme.LifecycleApproved,
Source: Sources["TRIAL_SURMOUNT_2"],
})
// Weight loss in T2D
configs = append(configs, DrugAssertionConfig{
Agent: "clinicaltrials:study-importer",
Subject: "Tirzepatide:Type2Diabetes",
Predicate: "weight_loss_percent",
Value: steme.NewNumberValue(15.7), // 15.7% in T2D (lower than non-T2D)
Confidence: 0.94,
Lifecycle: steme.LifecycleApproved,
Source: Sources["TRIAL_SURMOUNT_2"],
})
// -------------------------------------------------------------------------
// Safety Predicates
// -------------------------------------------------------------------------
// Vomiting rate
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Tirzepatide",
Predicate: "vomiting_rate",
Value: steme.NewNumberValue(0.12), // 12%
Confidence: 0.96,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_ZEPBOUND_LABEL"],
})
// Diarrhea rate
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Tirzepatide",
Predicate: "diarrhea_rate",
Value: steme.NewNumberValue(0.21), // 21%
Confidence: 0.96,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_ZEPBOUND_LABEL"],
})
// Constipation rate
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Tirzepatide",
Predicate: "constipation_rate",
Value: steme.NewNumberValue(0.17), // 17%
Confidence: 0.96,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_ZEPBOUND_LABEL"],
})
// Discontinuation rate
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Tirzepatide",
Predicate: "discontinuation_rate_adverse_events",
Value: steme.NewNumberValue(0.06), // 6%
Confidence: 0.95,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_ZEPBOUND_LABEL"],
})
// Boxed warning (same class)
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Tirzepatide",
Predicate: "has_boxed_warning",
Value: steme.NewBooleanValue(true),
Confidence: 1.0,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_ZEPBOUND_LABEL"],
})
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Tirzepatide",
Predicate: "boxed_warning_text",
Value: steme.NewTextValue("Thyroid C-Cell Tumors: contraindicated in MTC or MEN 2"),
Confidence: 1.0,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_ZEPBOUND_LABEL"],
})
// Pancreatitis risk
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Tirzepatide",
Predicate: "pancreatitis_risk",
Value: steme.NewTextValue("Acute pancreatitis reported; discontinue if suspected"),
Confidence: 0.98,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_ZEPBOUND_LABEL"],
})
// Injection site reactions
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Tirzepatide",
Predicate: "injection_site_reaction_rate",
Value: steme.NewNumberValue(0.07), // 7%
Confidence: 0.95,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_ZEPBOUND_LABEL"],
})
// Muscle loss observation
configs = append(configs, DrugAssertionConfig{
Agent: "clinicaltrials:study-importer",
Subject: "Tirzepatide",
Predicate: "lean_mass_preserved",
Value: steme.NewTextValue("Better lean mass preservation than semaglutide (~65% fat loss)"),
Confidence: 0.82,
Lifecycle: steme.LifecycleApproved,
Source: Sources["TRIAL_SURMOUNT_1"],
})
// -------------------------------------------------------------------------
// Mechanism / Pharmacology
// -------------------------------------------------------------------------
// Primary target (dual agonist - unique!)
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Tirzepatide:GLP1R",
Predicate: "primary_target",
Value: steme.NewTextValue("Dual GIP/GLP-1 receptor agonist - first in class"),
Confidence: 1.0,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_ZEPBOUND_LABEL"],
})
// Half-life
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Tirzepatide",
Predicate: "half_life_hours",
Value: steme.NewNumberValue(120), // ~5 days
Confidence: 0.97,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_ZEPBOUND_LABEL"],
})
// -------------------------------------------------------------------------
// Regulatory / Approval
// -------------------------------------------------------------------------
// FDA approval date (Zepbound)
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Tirzepatide",
Predicate: "fda_approval_date",
Value: steme.NewTextValue("2023-11-08 (Zepbound for chronic weight management)"),
Confidence: 1.0,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_ZEPBOUND_LABEL"],
})
// Approved indications
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Tirzepatide",
Predicate: "approved_indications",
Value: steme.NewTextValue("Chronic weight management (BMI >=30 or >=27 with comorbidity); Type 2 diabetes"),
Confidence: 1.0,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_ZEPBOUND_LABEL"],
})
// Max approved dose
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Tirzepatide",
Predicate: "max_approved_dose_mg",
Value: steme.NewNumberValue(15.0),
Confidence: 1.0,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_ZEPBOUND_LABEL"],
})
// -------------------------------------------------------------------------
// Expert Guidelines
// -------------------------------------------------------------------------
configs = append(configs, DrugAssertionConfig{
Agent: "internal:clinical-ops-reviewer",
Subject: "Tirzepatide:ChronicWeightManagement",
Predicate: "response_rate",
Value: steme.NewTextValue("Preferred for maximum weight loss; consider for patients who failed semaglutide"),
Confidence: 0.88,
Lifecycle: steme.LifecycleApproved,
Source: Sources["EXPERT_AACE_OBESITY"],
})
return submitAssertions(ctx, registry, baseURL, configs)
}
// =============================================================================
// LIRAGLUTIDE (Victoza, Saxenda)
// =============================================================================
func populateLiraglutide(ctx context.Context, registry *AgentRegistry, baseURL string) int {
configs := []DrugAssertionConfig{}
// -------------------------------------------------------------------------
// Weight Loss % (Established, lower than newer agents)
// -------------------------------------------------------------------------
// FDA Saxenda Label (T0): 5-10% range
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Liraglutide:ChronicWeightManagement",
Predicate: "weight_loss_percent",
Value: steme.NewNumberValue(8.0),
Confidence: 0.97,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_SAXENDA_LABEL"],
})
// SCALE Trial (T1): 8% at 56 weeks
configs = append(configs, DrugAssertionConfig{
Agent: "clinicaltrials:study-importer",
Subject: "Liraglutide:ChronicWeightManagement",
Predicate: "weight_loss_percent",
Value: steme.NewNumberValue(8.0),
Confidence: 0.94,
Lifecycle: steme.LifecycleApproved,
Source: Sources["TRIAL_SCALE_OBESITY"],
})
// Expert (T3): Established but modest
configs = append(configs, DrugAssertionConfig{
Agent: "internal:clinical-ops-reviewer",
Subject: "Liraglutide:ChronicWeightManagement",
Predicate: "weight_loss_percent",
Value: steme.NewTextValue("5-10% typical; less effective than semaglutide/tirzepatide"),
Confidence: 0.85,
Lifecycle: steme.LifecycleApproved,
Source: Sources["EXPERT_ENDOCRINE_SOCIETY"],
})
// Reddit (T5): Mixed reviews
configs = append(configs, DrugAssertionConfig{
Agent: "reddit:health-discussion-scraper",
Subject: "Liraglutide:ChronicWeightManagement",
Predicate: "weight_loss_percent",
Value: steme.NewTextValue("Results vary 5-15%; many switch to Ozempic for better results"),
Confidence: 0.65,
Lifecycle: steme.LifecycleProposed,
Source: Sources["ANECDOTAL_REDDIT_SAXENDA"],
})
// -------------------------------------------------------------------------
// Nausea Rate (Generally better tolerated)
// -------------------------------------------------------------------------
// FDA Label (T0): 39%
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Liraglutide",
Predicate: "nausea_rate",
Value: steme.NewNumberValue(0.39), // 39%
Confidence: 0.96,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_SAXENDA_LABEL"],
})
// SCALE Trial (T1)
configs = append(configs, DrugAssertionConfig{
Agent: "clinicaltrials:study-importer",
Subject: "Liraglutide",
Predicate: "nausea_rate",
Value: steme.NewNumberValue(0.40), // 40%
Confidence: 0.94,
Lifecycle: steme.LifecycleApproved,
Source: Sources["TRIAL_SCALE_OBESITY"],
})
// Reddit (T5): Manageable
configs = append(configs, DrugAssertionConfig{
Agent: "reddit:health-discussion-scraper",
Subject: "Liraglutide",
Predicate: "nausea_rate",
Value: steme.NewTextValue("Generally manageable; easier titration than newer GLP-1s"),
Confidence: 0.68,
Lifecycle: steme.LifecycleProposed,
Source: Sources["ANECDOTAL_REDDIT_SAXENDA"],
})
// -------------------------------------------------------------------------
// Gastroparesis Risk (Lower signal)
// -------------------------------------------------------------------------
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Liraglutide",
Predicate: "gastroparesis_risk",
Value: steme.NewTextValue("Delayed gastric emptying; lower signal than semaglutide"),
Confidence: 0.92,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_SAXENDA_LABEL"],
})
configs = append(configs, DrugAssertionConfig{
Agent: "pubmed:abstract-indexer",
Subject: "Liraglutide",
Predicate: "gastroparesis_risk",
Value: steme.NewTextValue("Similar risk profile but fewer reports than semaglutide (shorter half-life)"),
Confidence: 0.82,
Lifecycle: steme.LifecycleApproved,
Source: Sources["RWE_UBC_GASTROPARESIS"],
})
// -------------------------------------------------------------------------
// Cardiovascular Outcomes (LEADER Trial)
// -------------------------------------------------------------------------
// LEADER Trial (T1): CV benefit demonstrated
configs = append(configs, DrugAssertionConfig{
Agent: "clinicaltrials:study-importer",
Subject: "Liraglutide:CardiovascularDisease",
Predicate: "cardiovascular_events_reduction",
Value: steme.NewNumberValue(0.13), // 13% MACE reduction
Confidence: 0.94,
Lifecycle: steme.LifecycleApproved,
Source: Sources["TRIAL_LEADER"],
})
configs = append(configs, DrugAssertionConfig{
Agent: "clinicaltrials:study-importer",
Subject: "Liraglutide:CardiovascularDisease",
Predicate: "all_cause_mortality_reduction",
Value: steme.NewNumberValue(0.15), // 15% mortality reduction
Confidence: 0.92,
Lifecycle: steme.LifecycleApproved,
Source: Sources["TRIAL_LEADER"],
})
// FDA Label (T0)
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Liraglutide:CardiovascularDisease",
Predicate: "cardiovascular_events_reduction",
Value: steme.NewTextValue("Approved for CV risk reduction in T2D with established CVD"),
Confidence: 0.98,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_VICTOZA_LABEL"],
})
// -------------------------------------------------------------------------
// Efficacy: HbA1c Reduction (T2D)
// -------------------------------------------------------------------------
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Liraglutide:Type2Diabetes",
Predicate: "hba1c_reduction_percent",
Value: steme.NewNumberValue(1.2),
Confidence: 0.97,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_VICTOZA_LABEL"],
})
configs = append(configs, DrugAssertionConfig{
Agent: "clinicaltrials:study-importer",
Subject: "Liraglutide:Type2Diabetes",
Predicate: "hba1c_reduction_percent",
Value: steme.NewNumberValue(1.1),
Confidence: 0.94,
Lifecycle: steme.LifecycleApproved,
Source: Sources["TRIAL_LEADER"],
})
// -------------------------------------------------------------------------
// Safety Predicates
// -------------------------------------------------------------------------
// Vomiting rate
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Liraglutide",
Predicate: "vomiting_rate",
Value: steme.NewNumberValue(0.16), // 16%
Confidence: 0.96,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_SAXENDA_LABEL"],
})
// Diarrhea rate
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Liraglutide",
Predicate: "diarrhea_rate",
Value: steme.NewNumberValue(0.21), // 21%
Confidence: 0.96,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_SAXENDA_LABEL"],
})
// Constipation rate
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Liraglutide",
Predicate: "constipation_rate",
Value: steme.NewNumberValue(0.19), // 19%
Confidence: 0.96,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_SAXENDA_LABEL"],
})
// Discontinuation rate (lower than newer agents)
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Liraglutide",
Predicate: "discontinuation_rate_adverse_events",
Value: steme.NewNumberValue(0.10), // 10%
Confidence: 0.95,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_SAXENDA_LABEL"],
})
// Boxed warning
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Liraglutide",
Predicate: "has_boxed_warning",
Value: steme.NewBooleanValue(true),
Confidence: 1.0,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_SAXENDA_LABEL"],
})
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Liraglutide",
Predicate: "boxed_warning_text",
Value: steme.NewTextValue("Thyroid C-Cell Tumors: contraindicated in MTC or MEN 2"),
Confidence: 1.0,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_SAXENDA_LABEL"],
})
// Pancreatitis risk
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Liraglutide",
Predicate: "pancreatitis_risk",
Value: steme.NewTextValue("Acute pancreatitis reported; discontinue if suspected"),
Confidence: 0.98,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_SAXENDA_LABEL"],
})
// Injection site reactions
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Liraglutide",
Predicate: "injection_site_reaction_rate",
Value: steme.NewNumberValue(0.02), // 2%
Confidence: 0.95,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_SAXENDA_LABEL"],
})
// -------------------------------------------------------------------------
// Mechanism / Pharmacology
// -------------------------------------------------------------------------
// Primary target
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Liraglutide:GLP1R",
Predicate: "primary_target",
Value: steme.NewTextValue("GLP-1 receptor agonist (97% homology to native GLP-1)"),
Confidence: 1.0,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_SAXENDA_LABEL"],
})
// Half-life (shorter than semaglutide)
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Liraglutide",
Predicate: "half_life_hours",
Value: steme.NewNumberValue(13), // ~13 hours (daily dosing)
Confidence: 0.98,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_SAXENDA_LABEL"],
})
// -------------------------------------------------------------------------
// Regulatory / Approval (First-mover advantage)
// -------------------------------------------------------------------------
// FDA approval date (Saxenda)
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Liraglutide",
Predicate: "fda_approval_date",
Value: steme.NewTextValue("2014-12-23 (Saxenda for chronic weight management)"),
Confidence: 1.0,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_SAXENDA_LABEL"],
})
// Approved indications
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Liraglutide",
Predicate: "approved_indications",
Value: steme.NewTextValue("Chronic weight management; Type 2 diabetes; CV risk reduction in T2D"),
Confidence: 1.0,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_SAXENDA_LABEL"],
})
// Max approved dose
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Liraglutide",
Predicate: "max_approved_dose_mg",
Value: steme.NewNumberValue(3.0), // Saxenda 3.0mg
Confidence: 1.0,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_SAXENDA_LABEL"],
})
// -------------------------------------------------------------------------
// Established Safety Profile (Advantage)
// -------------------------------------------------------------------------
configs = append(configs, DrugAssertionConfig{
Agent: "internal:clinical-ops-reviewer",
Subject: "Liraglutide",
Predicate: "serious_adverse_event_rate",
Value: steme.NewTextValue("Longest post-market safety record among GLP-1s; well-characterized profile"),
Confidence: 0.90,
Lifecycle: steme.LifecycleApproved,
Source: Sources["EXPERT_ADA_GUIDELINES"],
})
// -------------------------------------------------------------------------
// Comparison Assertions
// -------------------------------------------------------------------------
configs = append(configs, DrugAssertionConfig{
Agent: "internal:clinical-ops-reviewer",
Subject: "Liraglutide:Placebo:ChronicWeightManagement",
Predicate: "superiority_demonstrated",
Value: steme.NewBooleanValue(true),
Confidence: 0.95,
Lifecycle: steme.LifecycleApproved,
Source: Sources["TRIAL_SCALE_OBESITY"],
})
// -------------------------------------------------------------------------
// Additional Community and Anecdotal Data
// -------------------------------------------------------------------------
// Community perspective on tolerability
configs = append(configs, DrugAssertionConfig{
Agent: "reddit:health-discussion-scraper",
Subject: "Liraglutide",
Predicate: "adverse_event_rate",
Value: steme.NewTextValue("Daily dosing annoying but side effects manageable for most"),
Confidence: 0.62,
Lifecycle: steme.LifecycleProposed,
Source: Sources["ANECDOTAL_REDDIT_SAXENDA"],
})
// Discontinuation perspective
configs = append(configs, DrugAssertionConfig{
Agent: "pubmed:abstract-indexer",
Subject: "Liraglutide",
Predicate: "discontinuation_rate_adverse_events",
Value: steme.NewNumberValue(0.12), // Real-world slightly higher
Confidence: 0.80,
Lifecycle: steme.LifecycleApproved,
Source: Sources["RWE_IQVIA_ADHERENCE"],
})
return submitAssertions(ctx, registry, baseURL, configs)
}
// =============================================================================
// ADDITIONAL COMPARISON AND CROSS-DRUG ASSERTIONS
// =============================================================================
// populateComparisons adds head-to-head comparison assertions.
func populateComparisons(ctx context.Context, registry *AgentRegistry, baseURL string) int {
configs := []DrugAssertionConfig{}
// -------------------------------------------------------------------------
// Semaglutide vs Placebo
// -------------------------------------------------------------------------
configs = append(configs, DrugAssertionConfig{
Agent: "clinicaltrials:study-importer",
Subject: "Semaglutide:Placebo:ChronicWeightManagement",
Predicate: "superiority_demonstrated",
Value: steme.NewBooleanValue(true),
Confidence: 0.98,
Lifecycle: steme.LifecycleApproved,
Source: Sources["TRIAL_STEP_1"],
})
configs = append(configs, DrugAssertionConfig{
Agent: "clinicaltrials:study-importer",
Subject: "Semaglutide:Placebo:ChronicWeightManagement",
Predicate: "relative_efficacy",
Value: steme.NewTextValue("12.4% greater weight loss vs placebo (STEP 1)"),
Confidence: 0.96,
Lifecycle: steme.LifecycleApproved,
Source: Sources["TRIAL_STEP_1"],
})
// -------------------------------------------------------------------------
// Tirzepatide vs Placebo
// -------------------------------------------------------------------------
configs = append(configs, DrugAssertionConfig{
Agent: "clinicaltrials:study-importer",
Subject: "Tirzepatide:Placebo:ChronicWeightManagement",
Predicate: "superiority_demonstrated",
Value: steme.NewBooleanValue(true),
Confidence: 0.98,
Lifecycle: steme.LifecycleApproved,
Source: Sources["TRIAL_SURMOUNT_1"],
})
configs = append(configs, DrugAssertionConfig{
Agent: "clinicaltrials:study-importer",
Subject: "Tirzepatide:Placebo:ChronicWeightManagement",
Predicate: "relative_efficacy",
Value: steme.NewTextValue("19.5% greater weight loss vs placebo (SURMOUNT-1, 15mg)"),
Confidence: 0.96,
Lifecycle: steme.LifecycleApproved,
Source: Sources["TRIAL_SURMOUNT_1"],
})
// -------------------------------------------------------------------------
// Tirzepatide vs Semaglutide (Head-to-Head - Real Data!)
// This is the SURPASS-2 equivalent conflict
// -------------------------------------------------------------------------
configs = append(configs, DrugAssertionConfig{
Agent: "clinicaltrials:study-importer",
Subject: "Tirzepatide:Semaglutide:Type2Diabetes",
Predicate: "superiority_demonstrated",
Value: steme.NewBooleanValue(true),
Confidence: 0.94,
Lifecycle: steme.LifecycleApproved,
Source: Sources["TRIAL_SURMOUNT_1"],
})
configs = append(configs, DrugAssertionConfig{
Agent: "clinicaltrials:study-importer",
Subject: "Tirzepatide:Semaglutide:Type2Diabetes",
Predicate: "relative_efficacy",
Value: steme.NewTextValue("Superior HbA1c and weight reduction vs semaglutide 1mg"),
Confidence: 0.92,
Lifecycle: steme.LifecycleApproved,
Source: Sources["TRIAL_SURMOUNT_1"],
})
// Expert perspective on comparison
configs = append(configs, DrugAssertionConfig{
Agent: "internal:clinical-ops-reviewer",
Subject: "Tirzepatide:Semaglutide:ChronicWeightManagement",
Predicate: "relative_efficacy",
Value: steme.NewTextValue("Tirzepatide shows ~5-7% greater weight loss; dual mechanism may explain"),
Confidence: 0.85,
Lifecycle: steme.LifecycleApproved,
Source: Sources["EXPERT_ENDOCRINE_SOCIETY"],
})
// Anecdotal comparison
configs = append(configs, DrugAssertionConfig{
Agent: "reddit:health-discussion-scraper",
Subject: "Tirzepatide:Semaglutide:ChronicWeightManagement",
Predicate: "relative_efficacy",
Value: steme.NewTextValue("Many switchers report better results on Mounjaro; YMMV"),
Confidence: 0.60,
Lifecycle: steme.LifecycleProposed,
Source: Sources["ANECDOTAL_REDDIT_MOUNJARO"],
})
// -------------------------------------------------------------------------
// Liraglutide vs Semaglutide (Older vs Newer)
// -------------------------------------------------------------------------
configs = append(configs, DrugAssertionConfig{
Agent: "internal:clinical-ops-reviewer",
Subject: "Semaglutide:Liraglutide:ChronicWeightManagement",
Predicate: "superiority_demonstrated",
Value: steme.NewBooleanValue(true),
Confidence: 0.90,
Lifecycle: steme.LifecycleApproved,
Source: Sources["EXPERT_AACE_OBESITY"],
})
configs = append(configs, DrugAssertionConfig{
Agent: "internal:clinical-ops-reviewer",
Subject: "Semaglutide:Liraglutide:ChronicWeightManagement",
Predicate: "relative_efficacy",
Value: steme.NewTextValue("Semaglutide ~7% more effective; weekly vs daily dosing preferred"),
Confidence: 0.88,
Lifecycle: steme.LifecycleApproved,
Source: Sources["EXPERT_ENDOCRINE_SOCIETY"],
})
// Reddit perspective
configs = append(configs, DrugAssertionConfig{
Agent: "reddit:health-discussion-scraper",
Subject: "Semaglutide:Liraglutide:ChronicWeightManagement",
Predicate: "relative_efficacy",
Value: steme.NewTextValue("Most who tried both prefer Ozempic for convenience and results"),
Confidence: 0.65,
Lifecycle: steme.LifecycleProposed,
Source: Sources["ANECDOTAL_REDDIT_OZEMPIC"],
})
// -------------------------------------------------------------------------
// Cost-Effectiveness Comparisons (Real-World Consideration)
// -------------------------------------------------------------------------
configs = append(configs, DrugAssertionConfig{
Agent: "internal:clinical-ops-reviewer",
Subject: "Semaglutide:Placebo:ChronicWeightManagement",
Predicate: "cost_effectiveness_ratio",
Value: steme.NewTextValue("$13,000-$24,000 per QALY gained (varies by payer perspective)"),
Confidence: 0.75,
Lifecycle: steme.LifecycleApproved,
Source: Sources["EXPERT_ADA_GUIDELINES"],
})
configs = append(configs, DrugAssertionConfig{
Agent: "internal:clinical-ops-reviewer",
Subject: "Tirzepatide:Placebo:ChronicWeightManagement",
Predicate: "cost_effectiveness_ratio",
Value: steme.NewTextValue("Higher acquisition cost but potentially better ICER due to efficacy"),
Confidence: 0.70,
Lifecycle: steme.LifecycleUnderReview,
Source: Sources["EXPERT_AACE_OBESITY"],
})
// -------------------------------------------------------------------------
// Safety Comparisons
// -------------------------------------------------------------------------
configs = append(configs, DrugAssertionConfig{
Agent: "internal:clinical-ops-reviewer",
Subject: "Tirzepatide:Semaglutide:ChronicWeightManagement",
Predicate: "relative_safety",
Value: steme.NewTextValue("Similar GI AE profile; tirzepatide may have slightly higher initial GI burden"),
Confidence: 0.80,
Lifecycle: steme.LifecycleApproved,
Source: Sources["EXPERT_ENDOCRINE_SOCIETY"],
})
configs = append(configs, DrugAssertionConfig{
Agent: "pubmed:abstract-indexer",
Subject: "Tirzepatide:Semaglutide:ChronicWeightManagement",
Predicate: "relative_safety",
Value: steme.NewTextValue("Discontinuation rates similar (~5-7%); lean mass preservation may favor tirzepatide"),
Confidence: 0.78,
Lifecycle: steme.LifecycleApproved,
Source: Sources["RWE_TRINETX_GLP1"],
})
return submitAssertions(ctx, registry, baseURL, configs)
}
// =============================================================================
// ADDITIONAL MECHANISM AND PHARMACOLOGY DATA
// =============================================================================
// populateMechanismData adds mechanism of action and pharmacology assertions.
func populateMechanismData(ctx context.Context, registry *AgentRegistry, baseURL string) int {
configs := []DrugAssertionConfig{}
// -------------------------------------------------------------------------
// Semaglutide Mechanism Details
// -------------------------------------------------------------------------
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Semaglutide:GLP1R",
Predicate: "mechanism_of_action",
Value: steme.NewTextValue("Activates GLP-1 receptors; increases insulin secretion, decreases glucagon, slows gastric emptying, reduces appetite"),
Confidence: 0.99,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_WEGOVY_LABEL"],
})
configs = append(configs, DrugAssertionConfig{
Agent: "pubmed:abstract-indexer",
Subject: "Semaglutide:GLP1R",
Predicate: "receptor_binding_affinity",
Value: steme.NewTextValue("High affinity GLP-1R agonist; 94% sequence homology to native GLP-1"),
Confidence: 0.95,
Lifecycle: steme.LifecycleApproved,
Source: Sources["TRIAL_STEP_1"],
})
// -------------------------------------------------------------------------
// Tirzepatide Dual Mechanism (Unique!)
// -------------------------------------------------------------------------
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Tirzepatide:GIPR",
Predicate: "mechanism_of_action",
Value: steme.NewTextValue("Dual GIP/GLP-1 receptor agonist; GIP activation may enhance insulin sensitivity and fat metabolism"),
Confidence: 0.98,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_ZEPBOUND_LABEL"],
})
configs = append(configs, DrugAssertionConfig{
Agent: "pubmed:abstract-indexer",
Subject: "Tirzepatide:GIPR",
Predicate: "receptor_binding_affinity",
Value: steme.NewTextValue("Imbalanced agonist: higher affinity for GIP (5x) than GLP-1 receptor"),
Confidence: 0.92,
Lifecycle: steme.LifecycleApproved,
Source: Sources["TRIAL_SURMOUNT_1"],
})
// Expert interpretation of dual mechanism
configs = append(configs, DrugAssertionConfig{
Agent: "internal:clinical-ops-reviewer",
Subject: "Tirzepatide:GIPR",
Predicate: "mechanism_of_action",
Value: steme.NewTextValue("GIP component may explain superior efficacy; mechanism still being elucidated"),
Confidence: 0.82,
Lifecycle: steme.LifecycleUnderReview,
Source: Sources["EXPERT_ENDOCRINE_SOCIETY"],
})
// -------------------------------------------------------------------------
// Liraglutide Mechanism
// -------------------------------------------------------------------------
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Liraglutide:GLP1R",
Predicate: "mechanism_of_action",
Value: steme.NewTextValue("GLP-1 receptor agonist; 97% homology to native GLP-1; acylated for albumin binding"),
Confidence: 0.99,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_SAXENDA_LABEL"],
})
// -------------------------------------------------------------------------
// Additional Pharmacokinetic Data
// -------------------------------------------------------------------------
// Semaglutide PK
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Semaglutide",
Predicate: "peak_plasma_concentration_hours",
Value: steme.NewNumberValue(24), // 1-3 days
Confidence: 0.95,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_WEGOVY_LABEL"],
})
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Semaglutide",
Predicate: "protein_binding_percent",
Value: steme.NewNumberValue(99.0),
Confidence: 0.97,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_WEGOVY_LABEL"],
})
// Tirzepatide PK
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Tirzepatide",
Predicate: "peak_plasma_concentration_hours",
Value: steme.NewNumberValue(24), // ~24 hours
Confidence: 0.95,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_ZEPBOUND_LABEL"],
})
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Tirzepatide",
Predicate: "protein_binding_percent",
Value: steme.NewNumberValue(99.0),
Confidence: 0.97,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_ZEPBOUND_LABEL"],
})
// Liraglutide PK
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Liraglutide",
Predicate: "peak_plasma_concentration_hours",
Value: steme.NewNumberValue(11), // 8-12 hours
Confidence: 0.96,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_SAXENDA_LABEL"],
})
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Liraglutide",
Predicate: "protein_binding_percent",
Value: steme.NewNumberValue(98.0),
Confidence: 0.97,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_SAXENDA_LABEL"],
})
return submitAssertions(ctx, registry, baseURL, configs)
}
// =============================================================================
// ADDITIONAL COMMUNITY AND REAL-WORLD DATA
// =============================================================================
// populateCommunityData adds community and real-world experience assertions.
func populateCommunityData(ctx context.Context, registry *AgentRegistry, baseURL string) int {
configs := []DrugAssertionConfig{}
// -------------------------------------------------------------------------
// Semaglutide Community Insights
// -------------------------------------------------------------------------
// PatientsLikeMe data
configs = append(configs, DrugAssertionConfig{
Agent: "reddit:health-discussion-scraper",
Subject: "Semaglutide:ChronicWeightManagement",
Predicate: "response_rate",
Value: steme.NewTextValue("Community reports: ~70% achieve >10% weight loss; 30% non-responders"),
Confidence: 0.72,
Lifecycle: steme.LifecycleProposed,
Source: Sources["COMMUNITY_PATIENTS_LIKE_ME"],
})
// Time to response (real-world)
configs = append(configs, DrugAssertionConfig{
Agent: "reddit:health-discussion-scraper",
Subject: "Semaglutide:ChronicWeightManagement",
Predicate: "time_to_response_weeks",
Value: steme.NewTextValue("Most see results by week 4-8; full effect at maintenance dose ~4-6 months"),
Confidence: 0.70,
Lifecycle: steme.LifecycleProposed,
Source: Sources["ANECDOTAL_REDDIT_OZEMPIC"],
})
// Food aversion reports
configs = append(configs, DrugAssertionConfig{
Agent: "reddit:health-discussion-scraper",
Subject: "Semaglutide",
Predicate: "adverse_event_rate",
Value: steme.NewTextValue("'Food noise' silencing reported; some develop aversions to fatty/sweet foods"),
Confidence: 0.65,
Lifecycle: steme.LifecycleProposed,
Source: Sources["ANECDOTAL_REDDIT_OZEMPIC"],
})
// -------------------------------------------------------------------------
// Tirzepatide Community Insights
// -------------------------------------------------------------------------
configs = append(configs, DrugAssertionConfig{
Agent: "reddit:health-discussion-scraper",
Subject: "Tirzepatide:ChronicWeightManagement",
Predicate: "response_rate",
Value: steme.NewTextValue("Community reports: higher super-responder rate (>20% loss) than semaglutide"),
Confidence: 0.68,
Lifecycle: steme.LifecycleProposed,
Source: Sources["COMMUNITY_PATIENTS_LIKE_ME"],
})
configs = append(configs, DrugAssertionConfig{
Agent: "reddit:health-discussion-scraper",
Subject: "Tirzepatide:ChronicWeightManagement",
Predicate: "time_to_response_weeks",
Value: steme.NewTextValue("Rapid initial response; some report 10lbs first month even at 2.5mg"),
Confidence: 0.66,
Lifecycle: steme.LifecycleProposed,
Source: Sources["ANECDOTAL_REDDIT_MOUNJARO"],
})
// Supply issues (real-world challenge)
configs = append(configs, DrugAssertionConfig{
Agent: "reddit:health-discussion-scraper",
Subject: "Tirzepatide",
Predicate: "adverse_event_rate",
Value: steme.NewTextValue("Sulfur burps common; injection site reactions more frequent than semaglutide"),
Confidence: 0.62,
Lifecycle: steme.LifecycleProposed,
Source: Sources["ANECDOTAL_REDDIT_MOUNJARO"],
})
// -------------------------------------------------------------------------
// Liraglutide Community Insights
// -------------------------------------------------------------------------
configs = append(configs, DrugAssertionConfig{
Agent: "reddit:health-discussion-scraper",
Subject: "Liraglutide:ChronicWeightManagement",
Predicate: "response_rate",
Value: steme.NewTextValue("Older but proven; many report steady 1-2 lbs/week loss with diet"),
Confidence: 0.65,
Lifecycle: steme.LifecycleProposed,
Source: Sources["COMMUNITY_DIABETES_FORUM"],
})
configs = append(configs, DrugAssertionConfig{
Agent: "reddit:health-discussion-scraper",
Subject: "Liraglutide",
Predicate: "adverse_event_rate",
Value: steme.NewTextValue("Daily injection burden cited as main drawback vs weekly alternatives"),
Confidence: 0.68,
Lifecycle: steme.LifecycleProposed,
Source: Sources["ANECDOTAL_REDDIT_SAXENDA"],
})
// -------------------------------------------------------------------------
// Real-World Adherence Data (Key for Demo)
// -------------------------------------------------------------------------
// Semaglutide adherence
configs = append(configs, DrugAssertionConfig{
Agent: "pubmed:abstract-indexer",
Subject: "Semaglutide",
Predicate: "response_rate",
Value: steme.NewTextValue("12-month persistence: ~55-60% (real-world); higher than liraglutide"),
Confidence: 0.82,
Lifecycle: steme.LifecycleApproved,
Source: Sources["RWE_IQVIA_ADHERENCE"],
})
// Tirzepatide adherence (newer, less data)
configs = append(configs, DrugAssertionConfig{
Agent: "pubmed:abstract-indexer",
Subject: "Tirzepatide",
Predicate: "response_rate",
Value: steme.NewTextValue("Early real-world data: similar or better persistence than semaglutide"),
Confidence: 0.75,
Lifecycle: steme.LifecycleUnderReview,
Source: Sources["RWE_OPTUM_TIRZEPATIDE"],
})
// Liraglutide adherence
configs = append(configs, DrugAssertionConfig{
Agent: "pubmed:abstract-indexer",
Subject: "Liraglutide",
Predicate: "response_rate",
Value: steme.NewTextValue("12-month persistence: ~40-45%; daily dosing impacts adherence"),
Confidence: 0.82,
Lifecycle: steme.LifecycleApproved,
Source: Sources["RWE_IQVIA_ADHERENCE"],
})
// -------------------------------------------------------------------------
// Twitter/TikTok Anecdotal (Tier 5 - Important for Demo)
// -------------------------------------------------------------------------
configs = append(configs, DrugAssertionConfig{
Agent: "reddit:health-discussion-scraper",
Subject: "Semaglutide:ChronicWeightManagement",
Predicate: "weight_loss_percent",
Value: steme.NewTextValue("#OzempicJourney: viral weight loss stories; often unrealistic expectations set"),
Confidence: 0.55,
Lifecycle: steme.LifecycleProposed,
Source: Sources["ANECDOTAL_TIKTOK_WEIGHTLOSS"],
})
configs = append(configs, DrugAssertionConfig{
Agent: "reddit:health-discussion-scraper",
Subject: "Tirzepatide:ChronicWeightManagement",
Predicate: "weight_loss_percent",
Value: steme.NewTextValue("#Mounjaro trending: dramatic before/after; selection bias evident"),
Confidence: 0.52,
Lifecycle: steme.LifecycleProposed,
Source: Sources["ANECDOTAL_TWITTER_GLP1"],
})
// -------------------------------------------------------------------------
// Additional Guideline Recommendations
// -------------------------------------------------------------------------
// ADA 2024 recommendations
configs = append(configs, DrugAssertionConfig{
Agent: "internal:clinical-ops-reviewer",
Subject: "Semaglutide:Type2Diabetes",
Predicate: "approved_indications",
Value: steme.NewTextValue("ADA 2024: Preferred GLP-1 for T2D with obesity or established CVD"),
Confidence: 0.92,
Lifecycle: steme.LifecycleApproved,
Source: Sources["EXPERT_ADA_GUIDELINES"],
})
configs = append(configs, DrugAssertionConfig{
Agent: "internal:clinical-ops-reviewer",
Subject: "Tirzepatide:Type2Diabetes",
Predicate: "approved_indications",
Value: steme.NewTextValue("ADA 2024: Option for T2D when maximum weight loss desired"),
Confidence: 0.90,
Lifecycle: steme.LifecycleApproved,
Source: Sources["EXPERT_ADA_GUIDELINES"],
})
configs = append(configs, DrugAssertionConfig{
Agent: "internal:clinical-ops-reviewer",
Subject: "Liraglutide:Type2Diabetes",
Predicate: "approved_indications",
Value: steme.NewTextValue("ADA 2024: Established option; consider when daily dosing preferred"),
Confidence: 0.88,
Lifecycle: steme.LifecycleApproved,
Source: Sources["EXPERT_ADA_GUIDELINES"],
})
// ACC/AHA cardiovascular recommendations
configs = append(configs, DrugAssertionConfig{
Agent: "internal:clinical-ops-reviewer",
Subject: "Semaglutide:CardiovascularDisease",
Predicate: "approved_indications",
Value: steme.NewTextValue("ACC/AHA 2023: Recommended for CV risk reduction in obesity with established CVD"),
Confidence: 0.94,
Lifecycle: steme.LifecycleApproved,
Source: Sources["EXPERT_ACC_AHA"],
})
// Endocrine Society obesity guidelines
configs = append(configs, DrugAssertionConfig{
Agent: "internal:clinical-ops-reviewer",
Subject: "Semaglutide:ChronicWeightManagement",
Predicate: "approved_indications",
Value: steme.NewTextValue("Endocrine Society 2023: First-line pharmacotherapy for obesity with comorbidities"),
Confidence: 0.91,
Lifecycle: steme.LifecycleApproved,
Source: Sources["EXPERT_ENDOCRINE_SOCIETY"],
})
configs = append(configs, DrugAssertionConfig{
Agent: "internal:clinical-ops-reviewer",
Subject: "Tirzepatide:ChronicWeightManagement",
Predicate: "approved_indications",
Value: steme.NewTextValue("Endocrine Society 2023: Consider for maximum efficacy; monitor for GI AEs"),
Confidence: 0.89,
Lifecycle: steme.LifecycleApproved,
Source: Sources["EXPERT_ENDOCRINE_SOCIETY"],
})
// -------------------------------------------------------------------------
// Kidney Outcomes (Emerging Data)
// -------------------------------------------------------------------------
configs = append(configs, DrugAssertionConfig{
Agent: "clinicaltrials:study-importer",
Subject: "Semaglutide:ChronicKidneyDisease",
Predicate: "kidney_disease_progression_reduction",
Value: steme.NewTextValue("FLOW trial: 24% reduction in kidney disease progression"),
Confidence: 0.93,
Lifecycle: steme.LifecycleApproved,
Source: Sources["TRIAL_SELECT"],
})
configs = append(configs, DrugAssertionConfig{
Agent: "internal:clinical-ops-reviewer",
Subject: "Liraglutide:ChronicKidneyDisease",
Predicate: "kidney_disease_progression_reduction",
Value: steme.NewTextValue("LEADER secondary: kidney composite endpoint reduced 22%"),
Confidence: 0.88,
Lifecycle: steme.LifecycleApproved,
Source: Sources["TRIAL_LEADER"],
})
// -------------------------------------------------------------------------
// Remission Data (T2D)
// -------------------------------------------------------------------------
configs = append(configs, DrugAssertionConfig{
Agent: "clinicaltrials:study-importer",
Subject: "Tirzepatide:Type2Diabetes",
Predicate: "remission_rate",
Value: steme.NewNumberValue(0.52), // 52% achieved remission at 15mg
Confidence: 0.92,
Lifecycle: steme.LifecycleApproved,
Source: Sources["TRIAL_SURMOUNT_2"],
})
configs = append(configs, DrugAssertionConfig{
Agent: "clinicaltrials:study-importer",
Subject: "Semaglutide:Type2Diabetes",
Predicate: "remission_rate",
Value: steme.NewNumberValue(0.32), // 32% achieved remission
Confidence: 0.90,
Lifecycle: steme.LifecycleApproved,
Source: Sources["TRIAL_STEP_2"],
})
configs = append(configs, DrugAssertionConfig{
Agent: "internal:clinical-ops-reviewer",
Subject: "Tirzepatide:Type2Diabetes",
Predicate: "remission_rate",
Value: steme.NewTextValue("Highest remission rates among GLP-1s; ~50% at max dose"),
Confidence: 0.85,
Lifecycle: steme.LifecycleApproved,
Source: Sources["EXPERT_ADA_GUIDELINES"],
})
return submitAssertions(ctx, registry, baseURL, configs)
}
// printConflictDemoCommands prints curl commands for the P2.2 conflict scenarios.
func printConflictDemoCommands() {
fmt.Println("--- P2.2: Drug Conflict Scenarios ---")
fmt.Println()
fmt.Println("# CONFLICT 1: Semaglutide Weight Loss (The Flagship Demo)")
fmt.Println("# Expect: 5 claims, conflict_score ~0.4-0.6, T0-T5 tiers represented")
fmt.Println(`curl -s "http://localhost:18180/v1/skeptic?subject=Semaglutide:ChronicWeightManagement&predicate=weight_loss_percent" | jq`)
fmt.Println()
fmt.Println("# CONFLICT 2: Semaglutide Gastroparesis Risk (Clinical vs Real-World)")
fmt.Println("# Expect: 5 claims, conflict_score ~0.6-0.8, genuine disagreement")
fmt.Println(`curl -s "http://localhost:18180/v1/skeptic?subject=Semaglutide&predicate=gastroparesis_risk" | jq`)
fmt.Println()
fmt.Println("# CONFLICT 3: Tirzepatide Weight Loss (Highest Efficacy)")
fmt.Println("# Expect: 5 claims, conflict_score ~0.3-0.5, values cluster higher")
fmt.Println(`curl -s "http://localhost:18180/v1/skeptic?subject=Tirzepatide:ChronicWeightManagement&predicate=weight_loss_percent" | jq`)
fmt.Println()
fmt.Println("# CONFLICT 4: Nausea Rates (All GLP-1s)")
fmt.Println("# Compare side effect profiles across drugs")
fmt.Println(`curl -s "http://localhost:18180/v1/skeptic?subject=Semaglutide&predicate=nausea_rate" | jq`)
fmt.Println(`curl -s "http://localhost:18180/v1/skeptic?subject=Tirzepatide&predicate=nausea_rate" | jq`)
fmt.Println(`curl -s "http://localhost:18180/v1/skeptic?subject=Liraglutide&predicate=nausea_rate" | jq`)
fmt.Println()
fmt.Println("# Compare weight loss across all 3 drugs")
fmt.Println(`curl -s "http://localhost:18180/v1/skeptic?subject=Liraglutide:ChronicWeightManagement&predicate=weight_loss_percent" | jq`)
fmt.Println()
fmt.Println("# Check assertion count (expect 150+)")
fmt.Println(`curl -s "http://localhost:18180/v1/health" | jq '.assertions_count'`)
fmt.Println()
fmt.Println("# Layered view (per-tier consensus)")
fmt.Println(`curl -s "http://localhost:18180/v1/layered?subject=Semaglutide:ChronicWeightManagement&predicate=weight_loss_percent" | jq`)
fmt.Println()
}
// =============================================================================
// P2.4: HISTORICAL DATA (TIME-TRAVEL VIA LIFECYCLE EVOLUTION)
// =============================================================================
// populateHistoricalData creates assertions with lifecycle progression to
// demonstrate time-travel queries. The key demo scenario is the Wegovy CV
// indication change in March 2024 - before SELECT trial results, semaglutide
// was not approved for cardiovascular risk reduction.
//
// Demo Scenario:
// - June 2021: Wegovy approved for weight management only
// - November 2023: SELECT trial published (CV benefit proven)
// - March 2024: FDA adds CV risk reduction indication
//
// This creates assertions showing:
// - DEPRECATED: "Semaglutide not approved for CV risk reduction" (pre-2024)
// - APPROVED: "Semaglutide approved for CV risk reduction" (post-2024)
//
// Query with as_of parameter to see historical state vs current state.
func populateHistoricalData(ctx context.Context, registry *AgentRegistry, baseURL string) int {
configs := []DrugAssertionConfig{}
// -------------------------------------------------------------------------
// SCENARIO 1: Wegovy CV Indication Evolution (The Flagship Time-Travel Demo)
// -------------------------------------------------------------------------
// DEPRECATED: Pre-SELECT era claim (what we "knew" before March 2024)
// This was the truth until SELECT trial changed everything
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Semaglutide:CardiovascularDisease",
Predicate: "fda_cv_indication",
Value: steme.NewTextValue("Not approved for cardiovascular risk reduction (obesity indication only)"),
Confidence: 0.99,
Lifecycle: steme.LifecycleDeprecated, // Was true, now superseded
Source: Sources["FDA_WEGOVY_LABEL_2021"],
})
// APPROVED: Post-SELECT era claim (current truth)
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Semaglutide:CardiovascularDisease",
Predicate: "fda_cv_indication",
Value: steme.NewTextValue("Approved for cardiovascular risk reduction in adults with obesity and established CVD"),
Confidence: 0.99,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_WEGOVY_LABEL_2024_CV"],
})
// -------------------------------------------------------------------------
// SCENARIO 2: SELECT Trial Knowledge Evolution
// -------------------------------------------------------------------------
// DEPRECATED: Interim data (what experts believed before final results)
configs = append(configs, DrugAssertionConfig{
Agent: "clinicaltrials:study-importer",
Subject: "Semaglutide:CardiovascularDisease",
Predicate: "cv_benefit_evidence",
Value: steme.NewTextValue("SELECT trial ongoing; interim analysis suggests potential CV benefit (unpublished)"),
Confidence: 0.75,
Lifecycle: steme.LifecycleDeprecated, // Superseded by final results
Source: Sources["TRIAL_SELECT_INTERIM"],
})
// APPROVED: Final published results
configs = append(configs, DrugAssertionConfig{
Agent: "clinicaltrials:study-importer",
Subject: "Semaglutide:CardiovascularDisease",
Predicate: "cv_benefit_evidence",
Value: steme.NewTextValue("SELECT trial final: 20% reduction in MACE (HR 0.80, 95% CI 0.72-0.90, p<0.001)"),
Confidence: 0.97,
Lifecycle: steme.LifecycleApproved,
Source: Sources["TRIAL_SELECT_FINAL"],
})
// -------------------------------------------------------------------------
// SCENARIO 3: ADA Guidelines Evolution (Pre/Post SELECT)
// -------------------------------------------------------------------------
// DEPRECATED: 2023 ADA guidelines (before SELECT results influenced guidelines)
configs = append(configs, DrugAssertionConfig{
Agent: "internal:clinical-ops-reviewer",
Subject: "Semaglutide:Type2Diabetes",
Predicate: "guideline_cv_recommendation",
Value: steme.NewTextValue("ADA 2023: GLP-1 agonists preferred for T2D with established ASCVD (based on SUSTAIN-6/LEADER data)"),
Confidence: 0.92,
Lifecycle: steme.LifecycleDeprecated,
Source: Sources["EXPERT_ADA_GUIDELINES_2023"],
})
// APPROVED: 2024 ADA guidelines (stronger CV recommendation post-SELECT)
configs = append(configs, DrugAssertionConfig{
Agent: "internal:clinical-ops-reviewer",
Subject: "Semaglutide:Type2Diabetes",
Predicate: "guideline_cv_recommendation",
Value: steme.NewTextValue("ADA 2024: Semaglutide now recommended FIRST for obesity with established CVD, even without T2D"),
Confidence: 0.95,
Lifecycle: steme.LifecycleApproved,
Source: Sources["EXPERT_ADA_GUIDELINES_2024"],
})
// -------------------------------------------------------------------------
// SCENARIO 4: Tirzepatide Indication Evolution (T2D → Obesity)
// -------------------------------------------------------------------------
// DEPRECATED: Original T2D-only approval
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Tirzepatide",
Predicate: "fda_approved_indications_history",
Value: steme.NewTextValue("Approved for type 2 diabetes only (not yet approved for weight management)"),
Confidence: 0.99,
Lifecycle: steme.LifecycleDeprecated,
Source: Sources["FDA_MOUNJARO_LABEL_2022"],
})
// APPROVED: Current dual indication
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Tirzepatide",
Predicate: "fda_approved_indications_history",
Value: steme.NewTextValue("Approved for type 2 diabetes (Mounjaro) AND chronic weight management (Zepbound)"),
Confidence: 0.99,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_ZEPBOUND_LABEL"],
})
// -------------------------------------------------------------------------
// SCENARIO 5: Semaglutide Initial Approval History
// -------------------------------------------------------------------------
// DEPRECATED: Original 2017 approval (T2D only, no weight indication)
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Semaglutide",
Predicate: "fda_approved_indications_history",
Value: steme.NewTextValue("2017: Approved for type 2 diabetes only (Ozempic 0.5mg and 1mg)"),
Confidence: 0.99,
Lifecycle: steme.LifecycleDeprecated,
Source: Sources["FDA_OZEMPIC_LABEL_2017"],
})
// UNDER_REVIEW: 2021 expansion (weight added, CV pending)
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Semaglutide",
Predicate: "fda_approved_indications_history",
Value: steme.NewTextValue("2021: Added chronic weight management indication (Wegovy 2.4mg)"),
Confidence: 0.98,
Lifecycle: steme.LifecycleDeprecated, // Also superseded by 2024
Source: Sources["FDA_WEGOVY_LABEL_2021"],
})
// APPROVED: Current full indication set
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Semaglutide",
Predicate: "fda_approved_indications_history",
Value: steme.NewTextValue("2024: T2D (Ozempic) + Weight Management (Wegovy) + CV Risk Reduction in Obesity (Wegovy)"),
Confidence: 0.99,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_WEGOVY_LABEL_2024_CV"],
})
// -------------------------------------------------------------------------
// SCENARIO 6: Gastroparesis Warning Evolution
// -------------------------------------------------------------------------
// PROPOSED: Early signal (before formal FDA acknowledgment)
configs = append(configs, DrugAssertionConfig{
Agent: "pubmed:abstract-indexer",
Subject: "Semaglutide",
Predicate: "gastroparesis_fda_warning_status",
Value: steme.NewTextValue("Signal detected in FAERS; no formal FDA warning yet"),
Confidence: 0.78,
Lifecycle: steme.LifecycleDeprecated,
Source: Sources["RWE_FAERS_SEMAGLUTIDE"],
})
// APPROVED: Current FDA acknowledgment
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: "Semaglutide",
Predicate: "gastroparesis_fda_warning_status",
Value: steme.NewTextValue("FDA added gastroparesis to adverse reactions; investigating serious GI events"),
Confidence: 0.95,
Lifecycle: steme.LifecycleApproved,
Source: Sources["FDA_WEGOVY_LABEL"],
})
// -------------------------------------------------------------------------
// SCENARIO 7: Expert Opinion Evolution on Muscle Loss
// -------------------------------------------------------------------------
// PROPOSED: Initial concern (raised after early data)
configs = append(configs, DrugAssertionConfig{
Agent: "internal:clinical-ops-reviewer",
Subject: "Semaglutide",
Predicate: "lean_mass_concern_status",
Value: steme.NewTextValue("Emerging concern: 39% of weight loss from lean mass (STEP 1); needs monitoring"),
Confidence: 0.80,
Lifecycle: steme.LifecycleProposed,
Source: Sources["TRIAL_STEP_1"],
})
// UNDER_REVIEW: Current active debate
configs = append(configs, DrugAssertionConfig{
Agent: "internal:clinical-ops-reviewer",
Subject: "Semaglutide",
Predicate: "lean_mass_concern_status",
Value: steme.NewTextValue("Active debate: resistance exercise recommended; protein intake guidance being developed"),
Confidence: 0.82,
Lifecycle: steme.LifecycleUnderReview,
Source: Sources["EXPERT_ENDOCRINE_SOCIETY"],
})
// -------------------------------------------------------------------------
// SCENARIO 8: Tirzepatide vs Semaglutide Comparative Evolution
// -------------------------------------------------------------------------
// PROPOSED: Early comparison (before head-to-head data)
configs = append(configs, DrugAssertionConfig{
Agent: "internal:clinical-ops-reviewer",
Subject: "Tirzepatide:Semaglutide:ChronicWeightManagement",
Predicate: "comparative_efficacy_status",
Value: steme.NewTextValue("Cross-trial comparison suggests tirzepatide may be more effective; no head-to-head data"),
Confidence: 0.70,
Lifecycle: steme.LifecycleDeprecated,
Source: Sources["EXPERT_ENDOCRINE_SOCIETY"],
})
// APPROVED: Now with more robust comparison
configs = append(configs, DrugAssertionConfig{
Agent: "internal:clinical-ops-reviewer",
Subject: "Tirzepatide:Semaglutide:ChronicWeightManagement",
Predicate: "comparative_efficacy_status",
Value: steme.NewTextValue("Tirzepatide demonstrates ~5-7% greater weight loss vs semaglutide at max doses; dual mechanism confirmed"),
Confidence: 0.88,
Lifecycle: steme.LifecycleApproved,
Source: Sources["TRIAL_SURMOUNT_1"],
})
return submitAssertions(ctx, registry, baseURL, configs)
}
// printHistoricalDemoCommands prints curl commands for the P2.4 time-travel demos.
func printHistoricalDemoCommands() {
fmt.Println("--- P2.4: Historical Data (Time-Travel) Demo ---")
fmt.Println()
fmt.Println("# THE FLAGSHIP TIME-TRAVEL DEMO: Semaglutide CV Indication")
fmt.Println("# Before March 2024: Not approved for CV risk reduction")
fmt.Println("# After March 2024: Approved for CV risk reduction")
fmt.Println()
fmt.Println("# Query CURRENT state (should show CV indication APPROVED)")
fmt.Println(`curl -s "http://localhost:18180/v1/skeptic?subject=Semaglutide:CardiovascularDisease&predicate=fda_cv_indication" | jq`)
fmt.Println()
fmt.Println("# Query HISTORICAL state (before March 2024 - should show DEPRECATED claim)")
fmt.Println("# Note: as_of uses Unix timestamp. 1704067200 = Jan 1, 2024")
fmt.Println(`curl -s "http://localhost:18180/v1/skeptic?subject=Semaglutide:CardiovascularDisease&predicate=fda_cv_indication&as_of=1704067200" | jq`)
fmt.Println()
fmt.Println("# Query SELECT trial knowledge evolution")
fmt.Println(`curl -s "http://localhost:18180/v1/skeptic?subject=Semaglutide:CardiovascularDisease&predicate=cv_benefit_evidence" | jq`)
fmt.Println()
fmt.Println("# Query guideline evolution (ADA 2023 vs 2024)")
fmt.Println(`curl -s "http://localhost:18180/v1/skeptic?subject=Semaglutide:Type2Diabetes&predicate=guideline_cv_recommendation" | jq`)
fmt.Println()
fmt.Println("# Query Semaglutide indication history (shows lifecycle progression)")
fmt.Println(`curl -s "http://localhost:18180/v1/skeptic?subject=Semaglutide&predicate=fda_approved_indications_history" | jq`)
fmt.Println()
fmt.Println("# Query Tirzepatide indication evolution (T2D → Obesity)")
fmt.Println(`curl -s "http://localhost:18180/v1/skeptic?subject=Tirzepatide&predicate=fda_approved_indications_history" | jq`)
fmt.Println()
fmt.Println("# AUDIT TRAIL: See lifecycle stages with timestamps")
fmt.Println("# Each claim shows when it was proposed, approved, or deprecated")
fmt.Println("# This is the regulatory audit answer: 'What did your system know on Date X?'")
fmt.Println()
}
// =============================================================================
// P2.3: CASCADE INVALIDATION DEMO DATA (Retractable Sources)
// =============================================================================
// populateCascadeData creates 110 assertions across 8 categories, all citing
// the CARDIOVASC_MEGA_TRIAL landmark study. When this source is quarantined,
// all 110 assertions are affected, demonstrating the "visceral cascade effect."
//
// This enables "Aha Moment #2: Cascade invalidation when source retracted."
//
// Categories (110 total):
// - Primary CV Outcomes: 15 (3 drugs × 5 predicates)
// - Secondary CV Outcomes: 15 (3 drugs × 5 predicates)
// - CV Biomarkers: 15 (3 drugs × 5 predicates)
// - Subgroup Analyses: 20 (4 populations × 5 results)
// - Expert Guidelines: 15 (5 bodies × 3 recommendations)
// - Real-World Evidence: 15 (3 databases × 5 outcomes)
// - Comparative Efficacy: 10 (5 FDA + 5 expert comparisons)
// - Community Reactions: 5 (social media awareness)
//
// Agent Distribution:
// - clinicaltrials:study-importer (T1): 50 assertions
// - pubmed:abstract-indexer (T2): 30 assertions
// - internal:clinical-ops-reviewer (T3): 20 assertions
// - fda:drug-label-ingestor (T0): 5 assertions
// - reddit:health-discussion-scraper (T5): 5 assertions
func populateCascadeData(ctx context.Context, registry *AgentRegistry, baseURL string) int {
configs := []DrugAssertionConfig{}
source := Sources["CARDIOVASC_MEGA_TRIAL"]
// Drug names for iteration
drugs := []string{"Semaglutide", "Liraglutide", "Tirzepatide"}
// -------------------------------------------------------------------------
// CATEGORY 1: Primary CV Outcomes (15 assertions - 3 drugs × 5 predicates)
// Agent: clinicaltrials:study-importer (T1)
// -------------------------------------------------------------------------
primaryPredicates := []struct {
predicate string
description string
value float64
}{
{"mace_reduction_percent", "Major adverse cardiovascular events reduction", 0.18},
{"cv_death_reduction_percent", "Cardiovascular death reduction", 0.15},
{"mi_reduction_percent", "Myocardial infarction reduction", 0.21},
{"stroke_reduction_percent", "Stroke reduction", 0.17},
{"hospitalization_hf_reduction_percent", "Heart failure hospitalization reduction", 0.24},
}
drugEffects := map[string]float64{"Semaglutide": 1.0, "Liraglutide": 0.85, "Tirzepatide": 1.1}
for _, drug := range drugs {
for _, pred := range primaryPredicates {
configs = append(configs, DrugAssertionConfig{
Agent: "clinicaltrials:study-importer",
Subject: drug + ":CardiovascularOutcomes:MEGA",
Predicate: pred.predicate,
Value: steme.NewNumberValue(pred.value * drugEffects[drug]),
Confidence: 0.94,
Lifecycle: steme.LifecycleApproved,
Source: source,
})
}
}
// -------------------------------------------------------------------------
// CATEGORY 2: Secondary CV Outcomes (15 assertions - 3 drugs × 5 predicates)
// Agent: clinicaltrials:study-importer (T1)
// -------------------------------------------------------------------------
secondaryPredicates := []struct {
predicate string
value string
}{
{"all_cause_mortality_reduction", "12% reduction in all-cause mortality"},
{"revascularization_reduction", "19% reduction in coronary revascularization"},
{"cardiovascular_mortality_hr", "HR 0.83 (95% CI 0.72-0.96)"},
{"time_to_first_mace_days", "Extended time to first MACE event by 47 days median"},
{"composite_renal_cv_endpoint", "22% reduction in composite renal-cardiovascular endpoint"},
}
for _, drug := range drugs {
for _, pred := range secondaryPredicates {
configs = append(configs, DrugAssertionConfig{
Agent: "clinicaltrials:study-importer",
Subject: drug + ":CardiovascularOutcomes:MEGA",
Predicate: pred.predicate,
Value: steme.NewTextValue(fmt.Sprintf("%s: %s", drug, pred.value)),
Confidence: 0.92,
Lifecycle: steme.LifecycleApproved,
Source: source,
})
}
}
// -------------------------------------------------------------------------
// CATEGORY 3: CV Biomarkers (15 assertions - 3 drugs × 5 predicates)
// Agent: pubmed:abstract-indexer (T2)
// -------------------------------------------------------------------------
biomarkerPredicates := []struct {
predicate string
value string
}{
{"systolic_bp_reduction_mmhg", "Systolic BP reduced by 5.2 mmHg"},
{"ldl_cholesterol_reduction_percent", "LDL-C reduced by 8%"},
{"triglycerides_reduction_percent", "Triglycerides reduced by 15%"},
{"hscrp_reduction_percent", "hs-CRP reduced by 22%"},
{"hba1c_improvement_percent", "HbA1c improved by 0.8%"},
}
for _, drug := range drugs {
for _, pred := range biomarkerPredicates {
configs = append(configs, DrugAssertionConfig{
Agent: "pubmed:abstract-indexer",
Subject: drug + ":Biomarkers:MEGA",
Predicate: pred.predicate,
Value: steme.NewTextValue(fmt.Sprintf("%s: %s", drug, pred.value)),
Confidence: 0.88,
Lifecycle: steme.LifecycleApproved,
Source: source,
})
}
}
// -------------------------------------------------------------------------
// CATEGORY 4: Subgroup Analyses (20 assertions - 4 populations × 5 combos)
// Agent: clinicaltrials:study-importer (T1)
// -------------------------------------------------------------------------
subgroups := []string{
"PriorMI",
"HeartFailure",
"CKD_Stage3plus",
"Elderly65plus",
}
subgroupResults := []struct {
predicate string
value string
}{
{"subgroup_mace_benefit", "Consistent MACE benefit observed"},
{"subgroup_mortality_benefit", "Mortality benefit maintained"},
{"subgroup_interaction_pvalue", "No significant interaction (p>0.05)"},
{"subgroup_safety_profile", "Safety profile consistent with overall population"},
{"subgroup_efficacy_maintained", "Efficacy maintained across baseline characteristics"},
}
for _, subgroup := range subgroups {
for _, result := range subgroupResults {
configs = append(configs, DrugAssertionConfig{
Agent: "clinicaltrials:study-importer",
Subject: "GLP1:Subgroup:" + subgroup + ":MEGA",
Predicate: result.predicate,
Value: steme.NewTextValue(fmt.Sprintf("%s in %s: %s", "GLP-1 class", subgroup, result.value)),
Confidence: 0.90,
Lifecycle: steme.LifecycleApproved,
Source: source,
})
}
}
// -------------------------------------------------------------------------
// CATEGORY 5: Expert Guidelines (15 assertions - 5 bodies × 3 recommendations)
// Agent: internal:clinical-ops-reviewer (T3)
// -------------------------------------------------------------------------
guidelineBodies := []string{
"ADA",
"ACC_AHA",
"ESC",
"EndocrineSociety",
"AACE",
}
recommendations := []struct {
predicate string
value string
}{
{"cv_indication_recommendation", "Recommends GLP-1 for CV risk reduction based on CARDIOVASC-MEGA"},
{"first_line_cv_therapy", "Elevated to first-line therapy for patients with established CVD"},
{"guideline_update_2024", "2024 guideline update incorporates CARDIOVASC-MEGA findings"},
}
for _, body := range guidelineBodies {
for _, rec := range recommendations {
configs = append(configs, DrugAssertionConfig{
Agent: "internal:clinical-ops-reviewer",
Subject: "Guideline:" + body + ":GLP1:MEGA",
Predicate: rec.predicate,
Value: steme.NewTextValue(fmt.Sprintf("%s: %s", body, rec.value)),
Confidence: 0.91,
Lifecycle: steme.LifecycleApproved,
Source: source,
})
}
}
// -------------------------------------------------------------------------
// CATEGORY 6: Real-World Evidence (15 assertions - 3 databases × 5 outcomes)
// Agent: pubmed:abstract-indexer (T2)
// -------------------------------------------------------------------------
rweDatabases := []string{
"TriNetX",
"Optum",
"IQVIA",
}
rweOutcomes := []struct {
predicate string
value string
}{
{"rwe_mace_validation", "Real-world MACE reduction consistent with CARDIOVASC-MEGA trial"},
{"rwe_adherence_cv_benefit", "Higher adherence correlated with greater CV benefit"},
{"rwe_mortality_signal", "Real-world mortality reduction observed"},
{"rwe_hospitalization_reduction", "Reduced CV hospitalizations in real-world cohort"},
{"rwe_cost_effectiveness", "Cost-effective at current pricing when CV benefits included"},
}
for _, db := range rweDatabases {
for _, outcome := range rweOutcomes {
configs = append(configs, DrugAssertionConfig{
Agent: "pubmed:abstract-indexer",
Subject: "RWE:" + db + ":GLP1:MEGA",
Predicate: outcome.predicate,
Value: steme.NewTextValue(fmt.Sprintf("%s analysis: %s", db, outcome.value)),
Confidence: 0.85,
Lifecycle: steme.LifecycleApproved,
Source: source,
})
}
}
// -------------------------------------------------------------------------
// CATEGORY 7: Comparative Efficacy (10 assertions - head-to-head comparisons)
// Mixed agents: fda:drug-label-ingestor (T0), internal:clinical-ops-reviewer (T3)
// -------------------------------------------------------------------------
// FDA-derived comparisons (5 assertions)
fdaComparisons := []struct {
subject string
predicate string
value string
}{
{"Tirzepatide:Semaglutide:CV", "comparative_mace_reduction", "Tirzepatide showed numerically greater MACE reduction (22% vs 18%)"},
{"Semaglutide:Liraglutide:CV", "comparative_mace_reduction", "Semaglutide showed greater CV benefit than liraglutide (18% vs 13%)"},
{"GLP1:Placebo:CV", "class_effect_mace", "GLP-1 class demonstrates consistent MACE reduction vs placebo"},
{"Tirzepatide:Placebo:CV", "mace_superiority", "Tirzepatide superior to placebo for MACE prevention"},
{"Semaglutide:Placebo:CV", "mace_superiority", "Semaglutide superior to placebo for MACE prevention"},
}
for _, comp := range fdaComparisons {
configs = append(configs, DrugAssertionConfig{
Agent: "fda:drug-label-ingestor",
Subject: comp.subject + ":MEGA",
Predicate: comp.predicate,
Value: steme.NewTextValue(comp.value),
Confidence: 0.96,
Lifecycle: steme.LifecycleApproved,
Source: source,
})
}
// Expert-derived comparisons (5 assertions)
expertComparisons := []struct {
subject string
predicate string
value string
}{
{"GLP1:DualAgonist:CV", "mechanism_comparison", "Dual GIP/GLP-1 agonism may provide additional CV benefit"},
{"GLP1:SGLT2:CV", "combination_benefit", "GLP-1 + SGLT2 combination shows additive CV protection"},
{"GLP1:WeightLoss:CV", "mediation_analysis", "~40% of CV benefit mediated through weight loss"},
{"GLP1:GlycemicControl:CV", "mediation_analysis", "~30% of CV benefit independent of glycemic control"},
{"GLP1:ClassEffect:CV", "heterogeneity_assessment", "No significant heterogeneity across GLP-1 agents"},
}
for _, comp := range expertComparisons {
configs = append(configs, DrugAssertionConfig{
Agent: "internal:clinical-ops-reviewer",
Subject: comp.subject + ":MEGA",
Predicate: comp.predicate,
Value: steme.NewTextValue(comp.value),
Confidence: 0.87,
Lifecycle: steme.LifecycleApproved,
Source: source,
})
}
// -------------------------------------------------------------------------
// BONUS: Reddit/Community reactions (5 assertions)
// Agent: reddit:health-discussion-scraper (T5)
// These show even anecdotal sources citing the landmark study
// -------------------------------------------------------------------------
communityReactions := []struct {
subject string
predicate string
value string
}{
{"Semaglutide:Community:MEGA", "patient_awareness", "CARDIOVASC-MEGA results widely discussed; patients asking doctors about CV benefits"},
{"Tirzepatide:Community:MEGA", "patient_interest", "High patient interest in tirzepatide following MEGA trial results"},
{"GLP1:Community:MEGA", "insurance_impact", "Patients reporting improved insurance coverage citing CV outcomes data"},
{"Ozempic:Community:MEGA", "prescription_trends", "Increased prescriptions for CV protection, not just weight loss"},
{"Mounjaro:Community:MEGA", "comparative_discussions", "Community debates tirzepatide vs semaglutide CV benefits"},
}
for _, reaction := range communityReactions {
configs = append(configs, DrugAssertionConfig{
Agent: "reddit:health-discussion-scraper",
Subject: reaction.subject,
Predicate: reaction.predicate,
Value: steme.NewTextValue(reaction.value),
Confidence: 0.65,
Lifecycle: steme.LifecycleProposed,
Source: source,
})
}
return submitAssertions(ctx, registry, baseURL, configs)
}
// printCascadeDemoCommands prints curl commands for the P2.3 cascade invalidation demo.
func printCascadeDemoCommands() {
// Get the source hash for the landmark study
sourceHash := Sources["CARDIOVASC_MEGA_TRIAL"].Hash()
fmt.Println("--- P2.3: CASCADE INVALIDATION DEMO ---")
fmt.Println()
fmt.Printf("Source: CARDIOVASC_MEGA_TRIAL\n")
fmt.Printf("Hash: %s\n", sourceHash)
fmt.Println()
fmt.Println("# THE VISCERAL MOMENT: 110 assertions depend on one landmark study")
fmt.Println("# When the study is retracted, ALL 110 are instantly affected")
fmt.Println()
fmt.Println("# 1. Check impact BEFORE quarantine")
fmt.Println("# Shows: 110 assertions from 5 agents will be affected")
fmt.Printf("curl -s 'http://localhost:18180/v1/sources/%s/impact' | jq\n", sourceHash)
fmt.Println()
fmt.Println("# 2. See the assertions citing this source")
fmt.Println(`curl -s 'http://localhost:18180/v1/query?subject=Semaglutide:CardiovascularOutcomes:MEGA' | jq`)
fmt.Println(`curl -s 'http://localhost:18180/v1/query?subject=Guideline:ADA:GLP1:MEGA' | jq`)
fmt.Println(`curl -s 'http://localhost:18180/v1/query?subject=RWE:TriNetX:GLP1:MEGA' | jq`)
fmt.Println()
fmt.Println("# 3. Preview quarantine (dry run - shows what WOULD happen)")
fmt.Printf("curl -X POST 'http://localhost:18180/v1/sources/%s/quarantine' \\\n", sourceHash)
fmt.Println(" -H 'Content-Type: application/json' \\")
fmt.Println(" -d '{\"preview\": true, \"reason\": \"Data integrity concerns - methodology under review\"}' | jq")
fmt.Println()
fmt.Println("# Expected: \"Preview: Quarantining would affect 110 assertions\"")
fmt.Println()
fmt.Println("# 4. Execute the quarantine (THE MAGIC MOMENT)")
fmt.Printf("curl -X POST 'http://localhost:18180/v1/sources/%s/quarantine' \\\n", sourceHash)
fmt.Println(" -H 'Content-Type: application/json' \\")
fmt.Println(" -d '{\"preview\": false, \"reason\": \"Study retracted: data fabrication confirmed\"}' | jq")
fmt.Println()
fmt.Println("# Expected: status: \"quarantined\", affected_assertions: 105")
fmt.Println()
fmt.Println("# 5. Verify the cascade - queries now exclude quarantined source assertions")
fmt.Println(`curl -s 'http://localhost:18180/v1/skeptic?subject=Semaglutide:CardiovascularOutcomes:MEGA&predicate=mace_reduction_percent' | jq`)
fmt.Println()
fmt.Println("# Expected: Empty or reduced results (assertions quarantined)")
fmt.Println()
fmt.Println("# 6. Check quarantine impact across all affected subjects")
fmt.Printf("curl -s 'http://localhost:18180/v1/sources/%s/impact' | jq '.affected_subjects'\n", sourceHash)
fmt.Println()
fmt.Println("# 7. Restore the source (if the study is later cleared)")
fmt.Printf("curl -X POST 'http://localhost:18180/v1/sources/%s/restore' \\\n", sourceHash)
fmt.Println(" -H 'Content-Type: application/json' \\")
fmt.Println(" -d '{\"reason\": \"Independent review complete - data integrity confirmed\"}' | jq")
fmt.Println()
fmt.Println("# Expected: status: \"active\", 110 assertions restored")
fmt.Println()
fmt.Println("# TALKING POINTS:")
fmt.Println("# - \"One source retraction, 110 assertions instantly affected\"")
fmt.Println("# - \"Preview mode shows impact BEFORE you commit\"")
fmt.Println("# - \"Restore capability for false positives\"")
fmt.Println("# - \"Full audit trail: who quarantined, when, why\"")
fmt.Println("# - \"Your regulatory team can answer: 'Which assertions cited that retracted study?'\"")
fmt.Println()
}