You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Many points in the application, especially those based on patterns established in the early days. However, some sporadic commits interpret nullable strings that allow the variable to be set as a bool-parseable value or a greater-than-0 int.
It's not the end of the world, but:
It is inconsistent when some boolean properties support flexible phrasing and some don't.
While the logic is far from complex, it's lengthy enough to be annoying.
My current plan is:
Place a string extension in Common. Tentative signature: bool InterpretAsBoolProperty(this string input).
All boolean configuration values should be updated to be consistent. Actions per property:
Adjust bool property to string? properties.
Have an Effective_ supporting property that interprets the string.
I'd be remiss if I didn't bring up a counterpoint to this whole thing: Introducing a bool string makes configuration phrasing easier, but it is technically introducing more string parsing over a flat bool.
At the end of the day, the true goal of this issue is just to pick a lane for consistency.
Activity
adeutscher commentedon Sep 5, 2026
Did an automated sweep for
boolproperties to consider (this sweep also captured properties that were already string-parsed):CoreConfigurationModelsrc/RedShirt.Example.JobWorker.Core/Configuration/CoreConfigurationModel.csJobsHaltOnFailureJOBS__HALT_ON_FAILURECoreConfigurationModelJobsTreatTransientExceptionAsFailureJOBS__TREAT_TRANSIENT_EXCEPTION_AS_FAILUREIdempotencyConfigurationModelsrc/RedShirt.Example.JobWorker.Core/Configuration/IdempotencyConfigurationModel.csJobs:IdempotencyEnabledJOBS__IDEMPOTENCY__ENABLEDIdempotencyConfigurationModelJobs:IdempotencyIdempotencyIdsCanRepeatJOBS__IDEMPOTENCY__IDEMPOTENCY_IDS_CAN_REPEATIdempotencyConfigurationModelJobs:IdempotencyEnableTraceLoggingJOBS__IDEMPOTENCY__ENABLE_TRACE_LOGGINGLoaderModeConfigurationModelsrc/RedShirt.Example.JobWorker.Core/Configuration/LoaderModeConfigurationModel.csJobs:LoaderModeEnabled(string) →EffectiveEnabledSettingJOBS__LOADER_MODE__ENABLEDCommonHealthConfigurationModelsrc/RedShirt.Example.JobWorker.Common.Health/Configuration/CommonHealthConfigurationModel.csHealthEnabled(defaulttrue)HEALTH__ENABLEDCoreHealthStateService.ConfigurationModelsrc/RedShirt.Example.JobWorker.Core/Services/Health/CoreHealthStateService.csHealthEnabled(defaulttrue)HEALTH__ENABLEDJobLogicRunner.ConfigurationModelsrc/RedShirt.Example.JobWorker.Core.Logic/JobLogicRunner.csJobs:JobLogicAccessBarEnabled(string) →EffectiveAccessBarEnabledJOBS__JOB_LOGIC__ACCESS_BAR_ENABLEDAzureServiceBusConfigurationModelsrc/RedShirt.Example.JobWorker.JobManagement.AzureServiceBus/Configuration/AzureServiceBusConfigurationModel.csJobSource:AzureServiceBusAbandonRecoveredFailuresOnAcknowledgeJOB_SOURCE__AZURE_SERVICE_BUS__ABANDON_RECOVERED_FAILURES_ON_ACKNOWLEDGEGooglePubSubConfigurationModelsrc/RedShirt.Example.JobWorker.JobManagement.GooglePubSub/Configuration/GooglePubSubConfigurationModel.csJobSource:GooglePubSubDlqNotEnabledJOB_SOURCE__GOOGLE_PUB_SUB__DLQ_NOT_ENABLEDSqsConfigurationModelsrc/RedShirt.Example.JobWorker.JobManagement.Sqs/Configuration/SqsConfigurationModel.csJobSource:SQSDlqNotEnabledJOB_SOURCE__SQS__DLQ_NOT_ENABLEDKinesisConfigurationsrc/RedShirt.Example.JobWorker.JobManagement.Kinesis/Configuration/KinesisConfiguration.csJobSource:KinesisRoundRobinShardsJOB_SOURCE__KINESIS__ROUND_ROBIN_SHARDSKinesisConfigurationJobSource:KinesisShuffleShardsJOB_SOURCE__KINESIS__SHUFFLE_SHARDSSubscribeConfigurationModel(private)src/RedShirt.Example.JobWorker.JobManagement.Nats/Extensions/ServiceCollectionExtensions.csJobSource:NATSSubscribeJOB_SOURCE__NATS__SUBSCRIBESubscribeConfigurationModel(private)src/RedShirt.Example.JobWorker.JobManagement.RabbitMq/Extensions/ServiceCollectionExtensions.csJobSource:RabbitMqSubscribeJOB_SOURCE__RABBITMQ__SUBSCRIBESubscribeConfigurationModel(private)src/RedShirt.Example.JobWorker.JobManagement.ActiveMq/Extensions/ServiceCollectionExtensions.csJobSource:ActiveMqSubscribeJOB_SOURCE__ACTIVEMQ__SUBSCRIBEAzureKeyVaultClientFactory.ConfigurationModelsrc/RedShirt.Example.JobWorker.Common.Azure.KeyVaultSecretManager/Factories/AzureKeyVaultClientFactory.csCommon:Secrets:AzureKeyVaultGenerateLocalTestingTokenCOMMON__SECRETS__AZURE_KEY_VAULT__GENERATE_LOCAL_TESTING_TOKENadeutscher commentedon Sep 5, 2026
I'd be remiss if I didn't bring up a counterpoint to this whole thing: Introducing a
boolstring makes configuration phrasing easier, but it is technically introducing more string parsing over a flatbool.At the end of the day, the true goal of this issue is just to pick a lane for consistency.