Skip to main content

Diagnostics Reference

This reference documents all 118 diagnostic codes emitted by the Oproto.FluentDynamoDb source generator. Each code links to a detailed page with the message format, description, triggering example, and fix.

Numbering Conventions

PrefixCode RangeDomain
DISC001–006Discriminator configuration and pattern matching
DYNDB001–036, 101–115, 120–127, 1001–1004Core DynamoDB entity validation and mapping
FDDB001–006, 0020–0021, 050–055, 060–062, 070–072, 080, 090, 100–104, 110–116, 120–126Table/index generation and configuration
PROJ001–006, 101–102Projection model validation
SEC001–002Security and package dependency checks

Prefix Distinction: DYNDB vs FDDB

Both DYNDB and FDDB prefixes relate to the FluentDynamoDb source generator:

  • DYNDB covers core entity validation — constraints on individual entity properties, key formats, type compatibility, and attribute correctness.
  • FDDB covers table and index generation — multi-entity table configuration, index consolidation, projection wiring, and computed key format validation.

DYNDB Range Bands

The DYNDB prefix uses range bands to group related diagnostics by functional area:

RangeArea
001–036Core validation (keys, types, attributes, references)
101–115Advanced type system (TTL, JSON, blobs, spatial, deprecation)
120–127Index attribute validation (GSI/LSI configuration)
1001–1004Extension method wrapper generation

The varying digit widths within DYNDB (3-digit, 4-digit) reflect these logical groupings rather than an inconsistency.

FDDB Numbering Inconsistency

Codes FDDB0020 and FDDB0021 use four-digit numbering while other FDDB codes use three-digit numbering. This is a known inconsistency retained for backward compatibility — these codes were introduced before the current naming convention was established and cannot be renumbered without breaking existing suppressions.

DISC — Discriminator Configuration

CodeSeverityTitle
DISC001WarningBoth DiscriminatorValue and DiscriminatorPattern specified
DISC002ErrorDiscriminatorValue or DiscriminatorPattern without DiscriminatorProperty
DISC003ErrorInvalid discriminator pattern syntax
DISC004ErrorAmbiguous overlapping discriminator patterns
DISC005InfoOverlapping discriminator pattern resolved
DISC006ErrorTautological exclusion guard detected

DYNDB — Core Entity Validation

CodeSeverityTitle
DYNDB001ErrorMissing partition key
DYNDB002ErrorMultiple partition keys
DYNDB003ErrorMultiple sort keys
DYNDB004ErrorInvalid key format
DYNDB005ErrorConflicting entity types
DYNDB006ErrorInvalid GSI configuration
DYNDB007ErrorMissing DynamoDbAttribute
DYNDB008WarningAmbiguous related entity pattern
DYNDB009ErrorUnsupported property type
DYNDB010ErrorEntity must be partial
DYNDB011ErrorMulti-item entity missing partition key
DYNDB012WarningMulti-item entity missing sort key
DYNDB013ErrorCollection property cannot be key
DYNDB014WarningMulti-item entity partition key format
DYNDB015ErrorInvalid related entity type
DYNDB016WarningRelated entities require sort key
DYNDB017WarningConflicting related entity patterns
DYNDB018ErrorInvalid key format syntax
DYNDB019WarningPotential key collision
DYNDB020ErrorCircular reference detected
DYNDB021WarningReserved word usage
DYNDB022ErrorInvalid DynamoDB configuration
DYNDB023WarningPerformance warning
DYNDB024ErrorMissing required attribute
DYNDB025WarningPotential data loss
DYNDB026ErrorInvalid GSI projection
DYNDB027WarningScalability warning
DYNDB028ErrorUnsupported type conversion
DYNDB029WarningToo many attributes
DYNDB030ErrorInvalid attribute name
DYNDB031ErrorInvalid computed key source
DYNDB032ErrorInvalid extracted key source
DYNDB033ErrorCircular key dependency
DYNDB034ErrorSelf-referencing computed key
DYNDB035ErrorInvalid extracted key index
DYNDB036WarningInvalid computed key format
DYNDB101ErrorInvalid TTL property type
DYNDB102ErrorMissing JSON serializer package
DYNDB103ErrorMissing blob provider package
DYNDB104ErrorIncompatible attribute combination
DYNDB105ErrorMultiple TTL fields
DYNDB106ErrorUnsupported collection type
DYNDB107ErrorNested map type missing [DynamoDbEntity]
DYNDB108ErrorS2Level specified without S2 index type
DYNDB109ErrorH3Resolution specified without H3 index type
DYNDB110ErrorGeoHashPrecision specified without GeoHash index type
DYNDB111ErrorSpatial index configuration on non-GeoLocation property
DYNDB112WarningMissing Geospatial package
DYNDB113WarningDeprecated [Queryable] attribute
DYNDB115ErrorBlobStorage requires BlobData<T> type
DYNDB120ErrorGSI sort key without partition key
DYNDB121ErrorDuplicate GSI partition keys
DYNDB122ErrorDuplicate GSI sort keys
DYNDB123ErrorDuplicate LSI sort keys
DYNDB124ErrorEmpty GsiPartitionKey index name
DYNDB125ErrorEmpty GsiSortKey index name
DYNDB126ErrorEmpty LsiSortKey index name
DYNDB127ErrorGSI/LSI index name conflict
DYNDB1001ErrorInvalid GenerateWrapper usage
DYNDB1002ErrorInvalid extension method
DYNDB1003WarningInterface not found
DYNDB1004WarningInterface not implemented

FDDB — Table/Index Generation

CodeSeverityTitle
FDDB001ErrorNo default entity specified
FDDB002ErrorMultiple default entities
FDDB003ErrorConflicting accessor configuration
FDDB004ErrorEmpty entity property name
FDDB005WarningInconsistent discriminator properties
FDDB006ErrorConflicting table namespaces
FDDB0020ErrorEnableDynamicFields requires partial class
FDDB0021WarningDynamicFields property already exists
FDDB050ErrorConflicting index Name values
FDDB051ErrorNon-partial table type
FDDB052WarningRedundant index Name specification
FDDB053ErrorConflicting index partition key attribute
FDDB054ErrorConflicting index sort key attribute
FDDB055ErrorConflicting index type
FDDB060ErrorProjection source entity not found
FDDB061ErrorProjection metadata inheritance failure
FDDB062ErrorProjection interface violation
FDDB070WarningInclude projection without properties
FDDB072WarningKeysOnly with UseProjection
FDDB080ErrorUnresolvable source property in computed key
FDDB090ErrorFormat placeholder count mismatch
FDDB100ErrorKey prefix conflicts with explicit computed format
FDDB101ErrorExplicit discriminator pattern conflicts with key format
FDDB102WarningOverlapping auto-derived discriminator patterns
FDDB103InfoRedundant explicit discriminator pattern
FDDB104InfoCompound discrimination resolved overlap
FDDB110WarningMissing schema version attribute
FDDB111ErrorDeclared version below minimum supported
FDDB112ErrorDeclared version above current
FDDB113InfoOlder-but-supported version, upgrade available
FDDB114ErrorMajor version less than 1
FDDB115ErrorMinor version less than 0
FDDB116ErrorMultiple schema version attributes detected
FDDB120ErrorConstant key conflicts with computed attribute
FDDB121ErrorPrefix not applicable to constant key
FDDB122ErrorCannot extract from constant key
FDDB123ErrorEmpty constant key value
FDDB124ErrorExtracted property conflicts with DynamoDbAttribute
FDDB125ErrorComputed key property has redundant Prefix
FDDB126ErrorKey property references non-compile-time-constant value

PROJ — Projection Model Validation

CodeSeverityTitle
PROJ001ErrorProjection property not found
PROJ002ErrorProjection property type mismatch
PROJ003ErrorInvalid projection source entity
PROJ004ErrorProjection must be partial
PROJ005ErrorUseProjection references invalid type
PROJ006ErrorConflicting UseProjection attributes
PROJ101WarningProjection includes all properties
PROJ102WarningProjection has many properties

SEC — Security and Package Dependencies

CodeSeverityTitle
SEC001WarningMissing Encryption.Kms package
SEC002ErrorMissing Amazon.Lambda.DynamoDBEvents package