{"record":{"id":"9de1f65d290200e9","repo":"pocketbase/pocketbase","slug":"yearstart-w","errorCode":null,"errorMessage":"@yearStart: %w","messagePattern":"@yearStart: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"tools/search/identifier_macros.go","lineNumber":119,"sourceCode":"\t\"@monthEnd\": func() (any, error) {\n\t\ttoday := timeNow().UTC()\n\t\tstart := time.Date(today.Year(), today.Month(), 1, 23, 59, 59, 999999999, time.UTC)\n\t\tend := start.AddDate(0, 1, -1)\n\n\t\td, err := types.ParseDateTime(end)\n\t\tif err != nil {\n\t\t\treturn \"\", fmt.Errorf(\"@monthEnd: %w\", err)\n\t\t}\n\n\t\treturn d.String(), nil\n\t},\n\t\"@yearStart\": func() (any, error) {\n\t\ttoday := timeNow().UTC()\n\t\tstart := time.Date(today.Year(), 1, 1, 0, 0, 0, 0, time.UTC)\n\n\t\td, err := types.ParseDateTime(start)\n\t\tif err != nil {\n\t\t\treturn \"\", fmt.Errorf(\"@yearStart: %w\", err)\n\t\t}\n\n\t\treturn d.String(), nil\n\t},\n\t\"@yearEnd\": func() (any, error) {\n\t\ttoday := timeNow().UTC()\n\t\tend := time.Date(today.Year(), 12, 31, 23, 59, 59, 999999999, time.UTC)\n\n\t\td, err := types.ParseDateTime(end)\n\t\tif err != nil {\n\t\t\treturn \"\", fmt.Errorf(\"@yearEnd: %w\", err)\n\t\t}\n\n\t\treturn d.String(), nil\n\t},\n}\n","sourceCodeStart":101,"sourceCodeEnd":136,"githubUrl":"https://github.com/pocketbase/pocketbase/blob/5d217ddb50cb144d80a5d0b0bdf11b52b2c3e457/tools/search/identifier_macros.go#L101-L136","documentation":"Thrown by the `@yearStart` macro when `types.ParseDateTime` fails on the January 1st UTC midnight timestamp. Only reachable when resolving filters such as `created >= @yearStart`. The constructed date is trivially valid, making this a defensive error against datetime parser changes.","triggerScenarios":"A filter expression using `@yearStart` where `types.ParseDateTime` rejects the Jan 1 00:00:00 UTC value.","commonSituations":"Forked or outdated datetime parsers; effectively unreachable on stock builds.","solutions":["Update PocketBase","Use an explicit `'YYYY-01-01 00:00:00.000Z'` literal","Report a parser regression if reproducible on stock code"],"exampleFix":"// before\nfilter := \"created >= @yearStart\"\n// after\nfilter := \"created >= '2026-01-01 00:00:00.000Z'\"","handlingStrategy":"try-catch","validationCode":"null","typeGuard":"null","tryCatchPattern":"result, err := search.FilterData(f, resolver)\nif err != nil && strings.Contains(err.Error(), \"@yearStart:\") {\n    // retry with explicit Jan 1 literal\n}","preventionTips":["Keep packages version-aligned","Use literals for stored filters","Regression-test macros after upgrades"],"tags":["pocketbase","filter","macro","datetime","search"],"backgroundTag":null,"analyzedSha":"5d217ddb50cb144d80a5d0b0bdf11b52b2c3e457","analyzedAt":"2026-08-15T10:06:33.165Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}