release: 0.5.0b1

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

## Changelog

### Added
- SHACL constraint display names on validation records: `shaclName` on each violation and filterable `failedConstraintNames` (resolved from the shapes graph; uniqueness and edge existence use typed tokens)
- Record views over `DataQualityValidationRecord` and `RuleEngineResult` (version v1, with streamId) so Flows can bind view plus stream
- Filterable `ruleId` on uniqueness / aggregate validation records (from `dqs:ruleId`, a named uniqueness node, or `unique_{property}`)
- Instance SHACL validation (sync-cursor and historic) supports Data Product views with `used_for: edge`, validating properties on edge instances over the edges channel; violation records omit `focusNodeInstance` for edge-sourced findings
- Deploy results for `external_dataproducts` include per-view `view_deployments` (`created`, `updated`, or `skipped`) with view space, so first-time historic validation can run when a view is added to an existing DataProduct workflow.

### Fixed
- Applying the validation records container no longer drops existing properties when adding newly merged ones; the update now always sends the full desired property set.
- `external_dataproducts` deploy resolves operational view space (same callback as `data_product_sync`), so RuleSets targeting `sp_ent_ops` match and `ViewConfigState` aliases are not overwritten with the schema space.
- Same-path / multi SPARQL constraints no longer last-win a single `shaclName` via `path_to_name`; violations are matched to distinct `sh:name` values using indexed `sh:message` (suffix-stripped). Unmatchable multi-SPARQL omits `shaclName` instead of falling back to the NodeShape name. Still one Records row per instance.

### Changed
- The supported consumption path for validation output is record view plus stream. Reverse navigation from customer instance views is opt-in through `focusNodeInstance`. Grouped uniqueness and RAW rows without that relation stay stream-filter only. Grouped uniqueness `externalId` stays per property (`dq_{ruleSetId}_group_{property}_...`), so two uniqueness rules on the same property still share one grouped row on a mutable stream even when `ruleId` differs.
- Deploy must re-apply the `DataQualityValidationRecord` container and record views so `failedConstraintNames` and `ruleId` exist before ingest. Redeploy the CDF validation function so writers emit the new fields.
- Records docs: for same-path SPARQL, aggregate/display by `failedConstraintNames` / per-violation `shaclName`, not only `failedConstraints` machine tokens.
