# CRM AppRelease `0.14.0`

This immutable CRM AppRelease moves the launch global and lookup Search routes
from the legacy process-local composition to the neutral Runtime Search, Query,
and effective Catalog AppMetadata capabilities. All capabilities published by
`0.13.0` are preserved.

- App: `io.nexuscrm.sfcrm`
- semantic version: `0.14.0`
- AppReleaseDigest:
  `sha256:e401a51fcf242ce54c5daac9c91463f00ec9617d91c4ac8d09299b7f6606e523`
- MetadataBundleDigest:
  `sha256:ebd87069da020d182ec4a3a3b55d69902db186cdcb24991ac68f6a3b69b18486`
- component count: `66`, exactly one per component in the source
  `salesforce-crm-standard/pack.json`
- source input revision: `5fb2cdd11fa2c7fdf6975f4e234c3ec46bdf0245`

The new `io.nexuscrm.sfcrm.search.v1` handler requires:

- `catalog.consumer.app-metadata-view.v2`;
- `runtime.records.query.v1`;
- `runtime.search.records.v1`.

sfcrm obtains the authorized object and field shape from one immutable
AppMetadata revision, passes that exact Catalog revision to Runtime Search and
Query, and requires matching revision and generation receipts. Runtime owns
effective authorization and record selection; sfcrm owns Salesforce-compatible
routes, request grammar, labels, URLs, snippets, and response shape. There is no
repository/global metadata fallback and no process-local Runtime call.

`app-package.json` is canonical and reproducible from the exact source inputs.
`publisher-attestation.json` binds the release tuple and exact source
provenance. `publisher-public-key.json` is verification material, not publisher
trust; Catalog's independent trust authority must approve that exact key before
import. The AppRelease contains no service image identity.

This artifact does not select an active AppInstallation, publish an AppService
image, switch traffic, or create a fallback. Those ownership changes remain
explicit M2/D3 activation gates.

Rebuild and verify:

```bash
git worktree add /tmp/nexuscrm-app-packs-0.14.0-source \
  5fb2cdd11fa2c7fdf6975f4e234c3ec46bdf0245
cd tools/crm-app-release
GOWORK=off go test ./... -count=1
GOWORK=off go run . build \
  --pack-root /tmp/nexuscrm-app-packs-0.14.0-source/salesforce-crm-standard \
  --output /tmp/crm-app-package-0.14.0.json
cmp /tmp/crm-app-package-0.14.0.json \
  ../../releases/io.nexuscrm.sfcrm/0.14.0/app-package.json
GOWORK=off go run . verify \
  --package ../../releases/io.nexuscrm.sfcrm/0.14.0/app-package.json \
  --attestation ../../releases/io.nexuscrm.sfcrm/0.14.0/publisher-attestation.json \
  --public-key ../../releases/io.nexuscrm.sfcrm/0.14.0/publisher-public-key.json
```
