What's Changed\n\n- Publish translation catalogs as immutable generations for race-free concurrent reads and lossless concurrent loads.\n- Reject duplicate batch declarations, invalid fallback graphs, nil filesystems, and invalid Detector setup before state changes or request handling.\n- Return translation provenance together with formatting errors while keeping missing lookups non-erroring.\n- Evaluate all Accept-Language field values as one weighted preference list.\n- Align README, SPECS, agent guidance, examples, dependencies, and behavior tests with the hardened contracts.\n\n## Breaking Changes\n\n- Localizer.Lookup now returns (TranslationResult, error).\n- NewDetector now returns (*Detector, error), and DetectorOption can report validation errors.\n- middleware.HTTPMiddleware now returns its middleware factory plus an error and accepts DetectorOption values.