# Fact Preservation Rules Certain content must survive transformation unchanged. This reference defines what to protect. --- ## Absolute Preservation (Never Modify) These elements must appear in the output exactly as they appear in the input. ### Numbers & Quantities - Specific figures: `$47.3M`, `23%`, `1,500 users` - Dates: `Q3 2024`, `March 15, 2024`, `2024-03-15` - Times: `9:00 AM PST`, `14:30 UTC` - Measurements: `5.2kg`, `100ms`, `2TB` - Ranges: `$50-75K`, `3-5 years`, `10-15%` - Counts: `3 engineers`, `5 steps`, `47 countries` ### Proper Nouns - Company names: `Acme Corp`, `OpenAI`, `Google` - Product names: `GPT-4`, `iPhone 15`, `TensorFlow` - Person names: `John Smith`, `Dr. Chen` - Place names: `San Francisco`, `Building 43` - Brand terms: `React`, `Kubernetes`, `AWS Lambda` ### Technical Terms - API endpoints: `/api/v2/users` - Code references: `handleSubmit()`, `UserContext` - Config values: `max_retries: 3`, `timeout: 30s` - Version numbers: `v2.1.0`, `Node 20.x` - File paths: `/src/components/Button.tsx` ### Quoted Material - Direct quotes: `"We're just getting started" - CEO` - Cited text: anything in quotation marks attributed to a source - Code snippets: preserve exactly, including whitespace ### URLs & References - Links: `https://example.com/page` - DOIs: `10.1234/journal.2024.001` - ISBNs: `978-0-123456-78-9` - Citations: `[1]`, `(Smith et al., 2024)` --- ## Semantic Preservation (Keep Meaning) These can be rephrased but meaning must stay identical. ### Causal Claims - Original: "A caused B" - OK: "B resulted from A" - NOT OK: "A influenced B" (weaker claim) ### Comparisons - Original: "X is 3x faster than Y" - OK: "X outperforms Y by 3x" - NOT OK: "X is faster than Y" (lost quantifier) ### Conditional Statements - Original: "If A, then B" - OK: "B happens when A" - NOT OK: "A and B" (lost conditionality) ### Negations - Original: "X does not support Y" - OK: "X lacks Y support" - NOT OK: "X partially supports Y" (opposite meaning) ### Scope Qualifiers - Original: "Most users (73%) prefer X" - OK: "73% of users prefer X" - NOT OK: "Users prefer X" (lost scope) --- ## Constraint Extraction Before transforming, extract these as must-preserve spans: ```python CONSTRAINT_PATTERNS = { # Numbers with context "currency": r"\$[\d,]+\.?\d*[KMB]?", "percentage": r"\d+\.?\d*%", "date_iso": r"\d{4}-\d{2}-\d{2}", "date_natural": r"(Q[1-4]\s+\d{4}|(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[a-z]*\s+\d{1,2},?\s+\d{4})", "time": r"\d{1,2}:\d{2}\s*(?:AM|PM|UTC|PST|EST)?", "measurement": r"\d+\.?\d*\s*(?:ms|s|min|hr|KB|MB|GB|TB|kg|lb|m|km|mi)", # Identifiers "url": r"https?://[^\s]+", "email": r"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}", "code_ref": r"`[^`]+`", "quote": r'"[^"]{10,}"', # Proper nouns (NER-detected) "org": "ORGANIZATION entities", "person": "PERSON entities", "product": "PRODUCT entities", "location": "GPE/LOC entities" } ``` --- ## Verification Process After transformation: 1. **Extract all constraints from original** 2. **Check each constraint exists in output** 3. **Flag any missing or altered constraints** ### Pass Criteria - All absolute preservation items present and unchanged - All semantic preservation items equivalent in meaning - No fact inversions or significant alterations ### Fail Examples | Original | Output | Problem | |----------|--------|---------| | "$47.3M revenue" | "$47M revenue" | Precision lost | | "23% increase" | "significant increase" | Number removed | | "John Smith, CEO" | "the CEO" | Name removed | | "https://example.com" | "[link]" | URL removed | | "Q3 2024" | "recently" | Date removed | | "does not support" | "partially supports" | Meaning inverted | --- ## Special Cases ### Approximations in Original If original uses approximate language, preserve the approximation: - "about 50%" → OK to keep as "about 50%" or "roughly 50%" - NOT OK to change to "50%" (implies false precision) ### Ranges Preserve both bounds: - "$50-75K" must keep both $50K and $75K - "3-5 years" must keep both bounds ### Lists of Items All items must survive: - "Teams in SF, NYC, and London" → all three cities required - Can reorder, but can't drop any ### Attributed Quotes Quote text and attribution both required: - `"We're excited" - Jane Doe, CEO` - Both the quote and "Jane Doe, CEO" must survive --- ## Quick Reference | Type | Example | Modifiable? | |------|---------|-------------| | Currency | $47.3M | NO - exact | | Percentage | 23% | NO - exact | | Date | Q3 2024 | NO - exact | | Person | John Smith | NO - exact | | Company | Acme Corp | NO - exact | | URL | https://... | NO - exact | | Code | `function()` | NO - exact | | Quote | "..." | NO - exact | | Causal | A caused B | YES - preserve meaning | | Comparison | 3x faster | YES - preserve numbers |