Data Integrity
Persistence correctness, schema and migration safety, tenant isolation at the record layer, retention, deletion mechanics, and backup/restore viability.
The storage layer: is the stored state correct, isolated, and recoverable, independent of who the actor is?
In scope. Persistence correctness, schema and migration safety (backfills, non-nullable adds, rename safety), transaction atomicity, per-record tenant isolation (query-scoped tenant_id filters, row-level security), backup / restore viability, data-quality invariants (duplicates, orphans, referential constraints), retention and deletion mechanics on the storage side.
Not in scope. User-facing rights over their data (access requests, erasure requests) — those are privacy-consent. Injection-driven corruption — that's injection-and-input-trust. Unauthorized cross-tenant reads — that's access-control (even when it surfaces as isolation failure, the decision layer is where the gate failed).
Distinct because. The defect is "the bytes in the database are structurally wrong" or "can't be recovered." A legitimate admin running a bad migration hits data-integrity. The beneficiary of a fix is anyone who reads the data, not specifically the user whose privacy is at stake.
Conceptual sub-structure. Schema/migration, tenant isolation, persistence correctness, retention, backup/restore.
Patterns in this taxon (271)
- high.ics file includes complete fields with a stable UID across modificationsab-000568 · booking-notifications-reminders
- highAccount and data deletion completed within disclosed timeframeab-000478 · app-store-privacy-data
- infoAccount deletion cascades to AI conversation dataab-000169 · ai-data-privacy
- highAggregate metrics reconcile with individual campaign dataab-000595 · campaign-analytics-attribution
- highaggregateRating in structured data matches visible on-page valuesab-001020 · directory-listing-schema
- lowAI conversation data stored separately from core user dataab-000168 · ai-data-privacy
- infoAI response metadata stored for audit trailab-000170 · ai-data-privacy
- criticalAll datetimes stored in UTC or with explicit timezone offsetab-000519 · booking-calendar-availability
- criticalAll financial transactions logged immutably with UTC timestamp, user ID, operation typeab-001379 · finserv-audit-trail
- highAll products are assigned to at least one categoryab-001115 · ecommerce-catalog
- lowAPI responses include appropriate cache headersab-002212 · saas-api-design
- highApp gracefully restores state from storage on launchab-001875 · mobile-offline-storage
- criticalApp uses AsyncStorage/MMKV or equivalent for local persistenceab-001872 · mobile-offline-storage
- criticalApple Mail Privacy Protection accounted for in open rate calculationab-000579 · campaign-analytics-attribution
- mediumApplication settings have sensible defaults for new usersab-002338 · saas-onboarding
- mediumAppropriate data types for each column (no stringly-typed data)ab-000901 · database-design-operations
- criticalAt most one database driver in active useab-000219 · ai-slop-code-drift
- mediumAt most one payment processorab-000232 · ai-slop-code-drift
- highAt-least-once delivery with deduplication guardab-002458 · sending-pipeline-infrastructure
- highAudit log is append-only (tamper-resistant)ab-000791 · compliance-consent-engine
- criticalAudit logs append-only: no deletion, modification, or truncationab-001380 · finserv-audit-trail
- mediumAudit logs are immutableab-002293 · saas-logging
- mediumAutomated database backups scheduled and tested; retention at least 7 days; restore procedure verifiedab-000980 · deployment-readiness
- highAutomated retention policy for AI conversation historyab-000166 · ai-data-privacy
- highAutomated staleness warnings sent after 90 days without verificationab-001033 · directory-listing-schema
- criticalAvailability data refreshed from server on every calendar view loadab-000517 · booking-calendar-availability
- highAvailability re-checked before commitab-000544 · booking-flow-lifecycle
- mediumBackground jobs are scoped to a single tenantab-002317 · saas-multi-tenancy
- mediumBackup and restore posture for persistent data is evidenced in the repoab-002637 · soc2-readiness
- highBackup strategy is documentedab-000918 · database-design-operations
- mediumBadge count accurately reflects number of unread or active itemsab-001368 · extension-ux-performance
- highBanker's rounding (round-half-to-even) for interest calculationsab-001439 · finserv-form-validation
- criticalBase price is correctly set and numericab-001118 · ecommerce-catalog
- lowBooking confirmation and calendar agree on displayed appointment timeab-000531 · booking-calendar-availability
- highBooking record created before paymentab-000539 · booking-flow-lifecycle
- highBranching logic for engagement-based pathsab-000600 · campaign-orchestration-sequencing
- criticalBuffer time between appointments enforced at the data layerab-000518 · booking-calendar-availability
- mediumBusiness hours structured data is presentab-001766 · marketing-local-seo
- highCache invalidation strategy implementedab-001883 · mobile-offline-storage
- lowCache respects TTL/expiration rulesab-001888 · mobile-offline-storage
- highCancellation state machineab-000549 · booking-flow-lifecycle
- highCancellation updates order status and creates history entryab-001141 · ecommerce-order-management
- criticalCardholder data is stored only in isolated, documented environmentab-001177 · ecommerce-pci
- lowCart displays accurate item count and subtotalab-001096 · ecommerce-cart-ux
- highCart syncs across devices when authenticatedab-001097 · ecommerce-cart-ux
- lowCatch-all domain detection with conservative handlingab-000856 · data-quality-list-hygiene
- highCategory taxonomy uses controlled vocabulary, not freeform textab-001025 · directory-listing-schema
- infoChildren's data retained only as long as necessary; then deletedab-000829 · coppa-compliance
- lowClient-side validation matches server-sideab-001448 · finserv-form-validation
- mediumCommitted seeds and fixtures contain no real-looking PIIab-002638 · soc2-readiness
- criticalConcurrent requests are handled safelyab-000543 · booking-flow-lifecycle
- highConfirmation page displays order number and next stepsab-001108 · ecommerce-cart-ux
- lowConfirmed orders generate confirmation record or flagab-001136 · ecommerce-order-management
- lowConsent queryable by contact ID with an indexab-000778 · compliance-consent-engine
- criticalConsent records are immutable (append-only)ab-000777 · compliance-consent-engine
- highConsent records stored with timestamp, policy version, and mechanismab-000724 · community-privacy-controls
- mediumConsent records with timestamp, source, method per subscriberab-001249 · email-sms-compliance
- criticalConsent stored as structured records, not boolean flagsab-000775 · compliance-consent-engine
- highContact age tracked per recordab-000864 · data-quality-list-hygiene
- criticalContact database backed up with restore procedure documentedab-001983 · operational-resilience-email
- criticalContent can be deleted or hidden by moderatorsab-000702 · community-moderation-safety
- highControl group is maintained throughout the experimentab-000588 · campaign-analytics-attribution
- criticalConversation history persists across page refreshesab-000151 · ai-chat-visibility
- criticalConversion events are linked back to the originating email sendab-000591 · campaign-analytics-attribution
- mediumCoordinates stored as lat/lng pair, not derived from address at render timeab-001037 · directory-map-location
- mediumCoordinates stored with six or more decimal places of precisionab-001045 · directory-map-location
- lowCorrect currency code usage to prevent conversion errorsab-001175 · ecommerce-payment-security
- criticalCritical app data is persisted across app lifecycleab-001873 · mobile-offline-storage
- lowCross-domain tracking is configured if multiple domains are in useab-001701 · marketing-analytics
- lowCross-platform entitlement sync if app is on both storesab-000410 · app-store-iap-subscriptions
- highCurrency conversions server-side, locked at transaction timeab-001440 · finserv-form-validation
- lowCurrency handling is consistentab-002284 · saas-billing
- criticalCurrency inputs reject negative values at validation layerab-001437 · finserv-form-validation
- highDaily balance reconciliation against source-of-truth ledgerab-001382 · finserv-audit-trail
- highData model supports all PRD requirementsab-001542 · goal-alignment
- lowData retention periods documented in policy and enforced by automated jobsab-000734 · community-privacy-controls
- lowData retention policy limits CDE storage to business requirementsab-001197 · ecommerce-pci
- highData syncs correctly when reconnected after offline periodab-001881 · mobile-offline-storage
- criticalDatabase backup strategy is definedab-002178 · pre-launch
- highDatabase migrations tested on staging or test database before productionab-000975 · deployment-readiness
- criticalDatabase queries function without network connectivityab-001874 · mobile-offline-storage
- lowDatabase/network tests are isolated from production dataab-000304 · ai-slop-test-theater
- criticalDecimal amounts stored as integers (cents), never floatsab-001438 · finserv-form-validation
- highDedup check before insertab-000893 · data-sourcing-provenance
- highDefault sort order is deterministic and explicitly labeledab-001064 · directory-search-discovery
- highDeleted account content removed or attributed to anonymized placeholderab-000723 · community-privacy-controls
- highDeletion cascades to all related personal data recordsab-000786 · compliance-consent-engine
- lowDeletion does not corrupt aggregate analyticsab-000789 · compliance-consent-engine
- lowDelivered status records delivery date/timeab-001137 · ecommerce-order-management
- highDelivery status via webhooks, not pollingab-002460 · sending-pipeline-infrastructure
- highDescription minimum length enforced at submission; short descriptions flagged incompleteab-001024 · directory-listing-schema
- lowDirections deeplinks use stored coordinates, not address stringab-001052 · directory-map-location
- highDisposable email domain detectionab-000854 · data-quality-list-hygiene
- lowDomain alias resolutionab-000861 · data-quality-list-hygiene
- highDowngrade removes access to premium featuresab-002254 · saas-billing
- infoDST transitions handled; gap or overlap slots are skipped or disambiguatedab-000533 · booking-calendar-availability
- highDuplicate messages deduplicated via client-generated ID before renderingab-000741 · community-realtime
- highDuplicate payment prevention logic existsab-001165 · ecommerce-payment-security
- mediumDuplicate submissions prevented via idempotency tokenab-001454 · finserv-form-validation
- highEach message carries a monotonic sequence number enabling gap detectionab-000740 · community-realtime
- highEach variant has a unique SKU or identifierab-001120 · ecommerce-catalog
- criticalEmail lowercased and trimmed before storageab-000859 · data-quality-list-hygiene
- highEmail syntax validation beyond basic regexab-000858 · data-quality-list-hygiene
- highEncryption at rest for sensitive dataab-002398 · security-hardening
- mediumEngagement scoring drives freshness classificationab-000866 · data-quality-list-hygiene
- lowEngagement scoring uses multi-signal approach (not opens alone)ab-000612 · campaign-orchestration-sequencing
- mediumEnrichment chain of custody trackedab-000888 · data-sourcing-provenance
- highEntry and exit conditions are explicitab-000601 · campaign-orchestration-sequencing
- criticalEvery contact has source_type, source_id, and acquired_atab-000886 · data-sourcing-provenance
- criticalEvery database query is scoped to the active tenantab-002332 · saas-multi-tenancy
- criticalEvery table has an explicit primary keyab-000897 · database-design-operations
- lowExceptions to recurring schedules override the rule in real timeab-000535 · booking-calendar-availability
- mediumExperiments are isolated — one active experiment per contact at a time, or interaction effects are handledab-000587 · campaign-analytics-attribution
- highFail-safe blocks sends to pending-unsubscribe contactsab-000783 · compliance-consent-engine
- highFailed send recovery plan documentedab-001984 · operational-resilience-email
- highFCI sanitized before disposal or reuse of digital mediaab-001557 · gov-cmmc-level-1
- highFilter counts update dynamically reflecting current filter intersectionab-001059 · directory-search-discovery
- criticalFollow/Unfollow Transactional Logicab-000760 · community-social-engagement
- criticalForeign keys enforce referential integrity between related tablesab-000898 · database-design-operations
- mediumFree shipping thresholds are applied correctlyab-001223 · ecommerce-shipping-tax
- highFree tier limits are enforcedab-002277 · saas-billing
- lowFuzzy name matching for same-email contactsab-000862 · data-quality-list-hygiene
- highGeocoding failures surface a validation error, not silent (0,0) coordinate storageab-001044 · directory-map-location
- highGlobal suppression list shared across campaignsab-000872 · data-quality-list-hygiene
- criticalHard bounces permanently suppressedab-000870 · data-quality-list-hygiene
- highIdempotency keys are used on all state-changing charge requestsab-001158 · ecommerce-payment-security
- highIdempotency keys for payment and mutation endpointsab-002198 · saas-api-design
- mediumInitial booking state is explicitab-000537 · booking-flow-lifecycle
- lowInterest/APY rounded consistentlyab-001450 · finserv-form-validation
- lowInternational shipping rates are configured (if applicable)ab-001230 · ecommerce-shipping-tax
- highLast verified or updated timestamp reflects actual verification dateab-001019 · directory-listing-schema
- highLast-engagement timestamp maintainedab-000869 · data-quality-list-hygiene
- infoLegacy data migration plan for re-encryptionab-001436 · finserv-encryption
- lowLocal data includes metadata (timestamp, source)ab-001890 · mobile-offline-storage
- mediumLog export with cryptographic completeness proofab-001389 · finserv-audit-trail
- infoLog schema versioned for regulatory changesab-001398 · finserv-audit-trail
- highLogs include before-and-after balance snapshotsab-001381 · finserv-audit-trail
- highLogs retained min 7 years per SOX/GLBAab-001384 · finserv-audit-trail
- mediumMalformed records quarantined, not silently discardedab-000894 · data-sourcing-provenance
- highMerge audit trail maintainedab-000863 · data-quality-list-hygiene
- lowMessage ordering preserves campaign sequenceab-002456 · sending-pipeline-infrastructure
- lowMessages maintain causal order within a single thread; reply not emitted before parentab-000751 · community-realtime
- mediumMessages queued server-side during disconnect and delivered in order on reconnectionab-000743 · community-realtime
- highMigrations are non-destructive (no data loss without explicit intent)ab-000909 · database-design-operations
- criticalMinimum spacing enforced between emails to same contactab-000604 · campaign-orchestration-sequencing
- highModified booking sends updated .ics with the same UID and incremented SEQUENCEab-000569 · booking-notifications-reminders
- highMulti-touch attribution model implemented — not exclusively last-clickab-000590 · campaign-analytics-attribution
- lowMulti-value fields stored as arrays, not comma-delimited stringsab-001028 · directory-listing-schema
- infoMultiple analytics scripts are not redundantly loading the same dataab-001717 · marketing-analytics
- criticalMX record verification performed on ingestab-000853 · data-quality-list-hygiene
- mediumNavigation state persists across app backgroundingab-001869 · mobile-navigation-linking
- lowNear-real-time score updatesab-000615 · campaign-orchestration-sequencing
- highNew fields are additive with defaultsab-000369 · api-design
- criticalNo credit card data stored in application databaseab-002264 · saas-billing
- highNo cumulative floating-point errors in multi-step transactionsab-001442 · finserv-form-validation
- criticalNo in-memory data stores used as production databasesab-000256 · ai-slop-half-finished
- criticalNo PII is sent to analyticsab-001710 · marketing-analytics
- lowNo unnecessary data in responses (over-fetching)ab-002200 · saas-api-design
- criticalNo way to bypass payment via APIab-002265 · saas-billing
- mediumNo-show follow-up sent only after no-show status is explicitly set on the booking recordab-000578 · booking-notifications-reminders
- highNOT NULL constraints on required fieldsab-000900 · database-design-operations
- highOffline queue prevents duplicate submissions on reconnectab-001879 · mobile-offline-storage
- criticalOpted-out numbers never contacted even within the same processing batchab-000564 · booking-notifications-reminders
- criticalOrder creation stores correct initial stateab-001133 · ecommerce-order-management
- highOrder history log captures all state changes with timestampsab-001135 · ecommerce-order-management
- criticalOrder state transitions follow valid sequenceab-001134 · ecommerce-order-management
- criticalOrder summary shows line items, shipping, taxes, and total before paymentab-001102 · ecommerce-cart-ux
- mediumParental consent records maintained with timestamp, method, parent identityab-000819 · coppa-compliance
- mediumPartial refunds supported and recordedab-001143 · ecommerce-order-management
- mediumPartial sync failures do not corrupt local stateab-001884 · mobile-offline-storage
- criticalPayment and booking couplingab-000557 · booking-flow-lifecycle
- highPayment capture timingab-000554 · booking-flow-lifecycle
- mediumPayment operations are idempotentab-002274 · saas-billing
- highPer-contact frequency cap across all campaignsab-000605 · campaign-orchestration-sequencing
- mediumPer-source quality scoring implementedab-000877 · data-sourcing-provenance
- lowPessimistic locking is usedab-000545 · booking-flow-lifecycle
- lowPlus-addressing normalizationab-000860 · data-quality-list-hygiene
- mediumPost-shipment cancellation requires special handling or admin approvalab-001140 · ecommerce-order-management
- highPre-shipment cancellation allowed and functionalab-001139 · ecommerce-order-management
- criticalProduct IDs are unique and consistentab-001114 · ecommerce-catalog
- highProduct images are present and properly referencedab-001117 · ecommerce-catalog
- highProduct records contain all required fieldsab-001113 · ecommerce-catalog
- highProvenance fields are immutable after creationab-000887 · data-sourcing-provenance
- highProvenance queryable for compliance lookupsab-000889 · data-sourcing-provenance
- highPurchase entitlements survive app reinstall and device transferab-000407 · app-store-iap-subscriptions
- highPurchased list age verificationab-000883 · data-sourcing-provenance
- criticalQueue backed by durable persistent storageab-002442 · sending-pipeline-infrastructure
- highRadius search uses great-circle distance, not bounding-box approximationab-001049 · directory-map-location
- lowRaw event data is retained for custom analysisab-000597 · campaign-analytics-attribution
- highRe-verification triggered after engagement inactivityab-000865 · data-quality-list-hygiene
- mediumRead receipts stored as explicit user acknowledgment, not inferred from deliveryab-000747 · community-realtime
- mediumRecipient timezone respected for send timeab-000606 · campaign-orchestration-sequencing
- lowRecurring schedules stored as rule definitions, not pre-expanded individual rowsab-000534 · booking-calendar-availability
- lowRefund initiated within configured timeframe of cancellationab-001144 · ecommerce-order-management
- mediumRefund logic existsab-000556 · booking-flow-lifecycle
- highRefund status tracked separately from order statusab-001142 · ecommerce-order-management
- lowRegional tax rules for multi-state or VAT zones are enforcedab-001231 · ecommerce-shipping-tax
- highReply auto-pauses sequence for that contactab-000610 · campaign-orchestration-sequencing
- mediumReported listings move to suspended status, not hard-deletedab-001089 · directory-submissions-moderation
- mediumRescheduling is atomicab-000550 · booking-flow-lifecycle
- lowRetention periods disclosed for each category of PIab-000634 · ccpa-readiness
- criticalRetries are idempotent — no duplicate sendsab-002451 · sending-pipeline-infrastructure
- highReview counts and ratings updated near-real-time on submissionab-001034 · directory-listing-schema
- highReview submission prevents duplicate submissions from same user per productab-001201 · ecommerce-reviews
- highReview text content cannot be edited after submission without moderationab-001212 · ecommerce-reviews
- mediumRole-based address flaggingab-000855 · data-quality-list-hygiene
- highRollback or cleanup logic exists if post-payment database updates failab-001164 · ecommerce-payment-security
- highRow-Level Security (RLS) or equivalent access control on multi-tenant tablesab-000914 · database-design-operations
- mediumSale prices are validated to be less than base pricesab-001123 · ecommerce-catalog
- highSample size calculated before experiment launchab-000585 · campaign-analytics-attribution
- highScheduled reminders cancelled when booking is modified or cancelled before fire timeab-000574 · booking-notifications-reminders
- highSchema validation on ingestab-000892 · data-sourcing-provenance
- lowScore decay for inactive contactsab-000617 · campaign-orchestration-sequencing
- criticalSequence state persisted per contact (survives restarts)ab-000599 · campaign-orchestration-sequencing
- highSequence versioning for in-flight contactsab-000602 · campaign-orchestration-sequencing
- criticalSequences modeled as state machinesab-000598 · campaign-orchestration-sequencing
- highShareable URLs reproduce identical result set in a new tabab-001068 · directory-search-discovery
- highShared resources do not leak between tenantsab-002327 · saas-multi-tenancy
- highShipped status includes or links to tracking informationab-001138 · ecommerce-order-management
- highShipping costs are recalculated when customer changes address in checkoutab-001222 · ecommerce-shipping-tax
- lowShipping costs are taxed appropriately per jurisdictionab-001232 · ecommerce-shipping-tax
- criticalShipping rates are calculated accurately based on weight, distance, or methodab-001219 · ecommerce-shipping-tax
- highSoft bounce threshold before suppressionab-000871 · data-quality-list-hygiene
- mediumSource deletion cascades or anonymizes contactsab-000890 · data-sourcing-provenance
- highSource type enum enforcedab-000876 · data-sourcing-provenance
- mediumStaging uses separate database with test dataab-001263 · environment-security
- lowStale contacts queued for re-verification, not deletedab-000867 · data-quality-list-hygiene
- highStatistical significance verified before declaring a winnerab-000586 · campaign-analytics-attribution
- criticalStock decrements on order placement without double-countingab-001126 · ecommerce-catalog
- highStock levels are initialized and tracked accuratelyab-001125 · ecommerce-catalog
- criticalStructured data populates name, description, url, and contact or location propertyab-001016 · directory-listing-schema
- highSubscription status is verified server-sideab-002253 · saas-billing
- mediumSuppression honored during queue processingab-000875 · data-quality-list-hygiene
- mediumSuppression list includes all required sourcesab-000873 · data-quality-list-hygiene
- infoSuppression list maintained; unsubscribed users never emailedab-001255 · email-sms-compliance
- highSync conflicts resolved with clear user-facing strategyab-001882 · mobile-offline-storage
- mediumTamper-evident logging via hash chain or digital signaturesab-001387 · finserv-audit-trail
- highTax amount displayed in cart matches final checkout amountab-001235 · ecommerce-shipping-tax
- mediumTax amount is calculated on correct subtotal (pre-discount vs. post-discount)ab-001226 · ecommerce-shipping-tax
- highTax computation excludes shipping costs unless jurisdiction requires shipping taxab-001228 · ecommerce-shipping-tax
- lowTax exemption certificates are validated where requiredab-001233 · ecommerce-shipping-tax
- criticalTax is not applied to tax-exempt productsab-001225 · ecommerce-shipping-tax
- criticalTax rate is applied correctly based on customer location jurisdictionab-001224 · ecommerce-shipping-tax
- highTax-exempt customer handling is implementedab-001227 · ecommerce-shipping-tax
- lowTemplate versioning tracks breaking changesab-002468 · sending-pipeline-infrastructure
- lowTemporary data caches cleared when user logs out or uninstallsab-001317 · extension-data-privacy
- lowTemporary hold on time slotab-000540 · booking-flow-lifecycle
- highTenant deletion cascades completelyab-002341 · saas-multi-tenancy
- infoTest database is separate from dev databaseab-000308 · ai-slop-test-theater
- highThreshold-triggered actions (score > X → notify sales)ab-000616 · campaign-orchestration-sequencing
- highTimezone conversion uses IANA library; no manual offset arithmeticab-000529 · booking-calendar-availability
- lowTimezone handling is correct in report date bucketingab-000596 · campaign-analytics-attribution
- lowTracking events stored with precise timestamps, not daily aggregatesab-000583 · campaign-analytics-attribution
- criticalTransaction atomicity enforcedab-000546 · booking-flow-lifecycle
- highTransactions used for multi-step mutationsab-000906 · database-design-operations
- highTrial period enforces feature limitsab-002256 · saas-billing
- mediumUnsubscribe mechanism functional for 30 days after email sentab-001239 · email-sms-compliance
- highUsage-based billing tracks metrics accuratelyab-002276 · saas-billing
- mediumUser actions queue correctly during offlineab-001878 · mobile-offline-storage
- lowUsers can permanently delete their account and all associated PIIab-000844 · data-protection
- highUsers can request permanent deletion of their personal data and accountab-001502 · gdpr-readiness
- highUTM parameter values are preserved in analyticsab-001700 · marketing-analytics
- highUTM parameters are standardized and consistently appliedab-000589 · campaign-analytics-attribution
- criticalVariant assignment is deterministic per contactab-000584 · campaign-analytics-attribution
- highVariant options are clearly defined and enumeratedab-001119 · ecommerce-catalog
- highVariant prices override base price when applicableab-001122 · ecommerce-catalog
- highVariant selection prevents invalid combinationsab-001121 · ecommerce-catalog
- mediumVerified purchase badge distinguishes buyer reviews from non-buyer reviewsab-001213 · ecommerce-reviews
- mediumWebhook retry handling for payment eventsab-002258 · saas-billing
- lowWebhook retry logic is handled with idempotent processing designab-001172 · ecommerce-payment-security
- highWritten retention schedule for each data type; automated deletion confirmedab-000838 · data-protection