release: 0.4.10

## Bump
- [ ] Major
- [ ] Minor
- [ ] Beta
- [x] Patch
- [ ] Skip

## Changelog

### Added
- Pre-persist Save gate (`validation_type: pre_persist`): overlay proposed instance JSON, hydrate from DMS, and return form-mappable violations and inferences before apply. Catalog identity is Data Product, RuleSet, and view.
- Stream retention guard: scheduled refresh of instance historic, timeseries, and edge baseline runs before Records stream TTL expires.

### Fixed
- Timeseries SHACL time-window substitution now resolves each `-ago` placeholder independently, so rules like `"24h-ago"` are not evaluated over a 1-hour window.
- Timeseries prefetch passes millisecond timestamps as integers and aligns count granularity for windows longer than 24 hours.
- Stream retention guard persists timeseries `config_name`, skips in-progress retention calls, matches instance jobRunId as `job_{view}_{epoch}`, and enqueues historic refresh with the DataProduct semver.
- Orchestrator restores `ruleset_references` on retention refresh payloads.
- CDF Function local-wheel deploy uses the required `function/` prefix in requirements.txt.

### Changed
- Usage documentation is reorganized into focused guides, including Pre-persist Save and stream retention.
