{"record":{"id":"2e67d345e8a2450f","repo":"benbjohnson/litestream","slug":"cannot-specify-enforce-retention-flag-without-on","errorCode":null,"errorMessage":"cannot specify -enforce-retention flag without -once","messagePattern":"cannot specify -enforce-retention flag without -once","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cmd/litestream/replicate.go","lineNumber":171,"sourceCode":"\t\tfor _, dbConfig := range c.Config.DBs {\n\t\t\tdbConfig.RestoreIfDBNotExists = true\n\t\t}\n\t}\n\n\t// Set one-shot replication flags and validate their usage.\n\tc.once = *onceFlag\n\tc.forceSnapshot = *forceSnapshotFlag\n\tc.enforceRetention = *enforceRetentionFlag\n\n\t// Validate flag combinations.\n\tif c.once && c.Config.Exec != \"\" {\n\t\treturn fmt.Errorf(\"cannot specify -once flag with -exec\")\n\t}\n\tif c.forceSnapshot && !c.once {\n\t\treturn fmt.Errorf(\"cannot specify -force-snapshot flag without -once\")\n\t}\n\tif c.enforceRetention && !c.once {\n\t\treturn fmt.Errorf(\"cannot specify -enforce-retention flag without -once\")\n\t}\n\n\treturn nil\n}\n\n// Run loads all databases specified in the configuration.\nfunc (c *ReplicateCommand) Run(ctx context.Context) (err error) {\n\t// Display version information.\n\tslog.Info(\"litestream\", \"version\", Version, \"level\", c.Config.Logging.Level)\n\n\t// Start MCP server if enabled\n\tif c.Config.MCPAddr != \"\" {\n\t\tc.MCP, err = NewMCP(ctx, c.Config.ConfigPath)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tgo c.MCP.Start(c.Config.MCPAddr)\n\t}","sourceCodeStart":153,"sourceCodeEnd":189,"githubUrl":"https://github.com/benbjohnson/litestream/blob/4ed7a308f6271ebfd2b0a6e4b70b03011a37e4a3/cmd/litestream/replicate.go#L153-L189","documentation":"`-enforce-retention` forces retention enforcement at the end of a run and is only meaningful for a `-once` single-pass run; in continuous mode retention runs on its schedule. ParseFlags rejects the combination so the flag is never silently ignored.","triggerScenarios":"Running `litestream replicate -enforce-retention db.sqlite url` without `-once` — c.enforceRetention is true while c.once is false.","commonSituations":"Ops scripts cleaning up old LTX files before/after a one-shot backup that forget the required `-once` flag.","solutions":["Add `-once` to the command line so retention is enforced after the single pass","Remove `-enforce-retention` and rely on the continuous retention schedule","If cleanup without replication is needed, use the `-once` mode dedicated to it"],"exampleFix":"// before\nlitestream replicate -enforce-retention db.sqlite s3://bucket/db\n// after\nlitestream replicate -once -enforce-retention db.sqlite s3://bucket/db","handlingStrategy":"validation","validationCode":"if printf '%s' \"$ARGS\" | grep -q -- '-enforce-retention' && ! printf '%s' \"$ARGS\" | grep -q -- '-once'; then\n  echo \"-enforce-retention requires -once\" >&2; exit 1\nfi","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always pair -enforce-retention with -once","Centralize litestream CLI construction in one helper so flag rules are enforced once","Review release notes when upgrading — one-shot flags have been added over versions"],"tags":["cli","flags","validation"],"backgroundTag":"invalid-flag-value","analyzedSha":"4ed7a308f6271ebfd2b0a6e4b70b03011a37e4a3","analyzedAt":"2026-09-06T18:29:25.564Z","contentChangedAt":"2026-09-06T18:29:25.564Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}