{"record":{"id":"7b1af00099bbb1de","repo":"benbjohnson/litestream","slug":"invalid-timestamp-expected-rfc3339-or-relative-ti","errorCode":null,"errorMessage":"invalid timestamp (expected RFC3339 or relative time like '5 minutes ago'): %s","messagePattern":"invalid timestamp \\(expected RFC3339 or relative time like '5 minutes ago'\\): (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"vfs.go","lineNumber":2416,"sourceCode":"// parseTimeValue parses a timestamp string, trying RFC3339 first, then relative expressions.\nfunc parseTimeValue(value string) (time.Time, error) {\n\t// Try RFC3339Nano first (existing behavior)\n\tif t, err := time.Parse(time.RFC3339Nano, value); err == nil {\n\t\treturn t, nil\n\t}\n\n\t// Try RFC3339 (without nanoseconds)\n\tif t, err := time.Parse(time.RFC3339, value); err == nil {\n\t\treturn t, nil\n\t}\n\n\t// Fall back to dateparser for relative expressions\n\tcfg := &dateparser.Configuration{\n\t\tCurrentTime: time.Now().UTC(),\n\t}\n\tresult, err := dateparser.Parse(cfg, value)\n\tif err != nil {\n\t\treturn time.Time{}, fmt.Errorf(\"invalid timestamp (expected RFC3339 or relative time like '5 minutes ago'): %s\", value)\n\t}\n\tif result.Time.IsZero() {\n\t\treturn time.Time{}, fmt.Errorf(\"could not parse time: %s\", value)\n\t}\n\treturn result.Time.UTC(), nil\n}\n\n// FileControl handles file control operations, specifically PRAGMA commands for time travel.\nfunc (f *VFSFile) FileControl(op int, pragmaName string, pragmaValue *string) (*string, error) {\n\tconst SQLITE_FCNTL_PRAGMA = 14\n\n\tif op != SQLITE_FCNTL_PRAGMA {\n\t\treturn nil, fmt.Errorf(\"unsupported file control op: %d\", op)\n\t}\n\n\tname := strings.ToLower(pragmaName)\n\n\tf.logger.Debug(\"file control\", \"pragma\", name, \"value\", pragmaValue)","sourceCodeStart":2398,"sourceCodeEnd":2434,"githubUrl":"https://github.com/benbjohnson/litestream/blob/4ed7a308f6271ebfd2b0a6e4b70b03011a37e4a3/vfs.go#L2398-L2434","documentation":"parseTimeValue rejected a timestamp string: it is neither RFC3339(Nano) nor a relative expression dateparser understands (like '5 minutes ago'). This guards VFS URI / config timestamp options such as hydration or retention points-in-time.","triggerScenarios":"Thrown at vfs.go:2416 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Use RFC3339 like 2026-01-02T15:04:05Z","Or a supported relative expression like '5 minutes ago'"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"4ed7a308f6271ebfd2b0a6e4b70b03011a37e4a3","analyzedAt":"2026-09-06T18:29:25.564Z","contentChangedAt":"2026-09-06T18:29:25.564Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}